|
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
|
||||||
| 24.01.2021, 13:23 | ||||||
|
Еще для ускорения использую функции сгенерированные matlabом, все бы замечательно но api функция GetValue все портит(т.е. ее использование из под плагина)
к примеру использование этой функции из под скриптового элемента - работает отлично. все скрипты работают через библиотеку "\Mathcad\Mathcad 15\mcscriptr.ocx" Подключил эту библиотеку и в обозревателе видно что там работа функций идет через делегаты что толкает на вывод - api функция GetValue реализована с ошибкой.. Думаю реализовать эту функцию посредством библиотеки mcscriptr.ocx и ограничений будет намного меньше во входных параметрах с вызываемых функций из плагина Скрипт
0
|
||||||
| 24.01.2021, 13:23 | |
|
Ответы с готовыми решениями:
31
C++\CLI vs C# для .NET На каких языках написан сайт mp3poisk.net ? Оптимизация производительности C#.NET (Алгоритм, Многопоточность, Debug, Release, .Net Core, Net Native) |
|
|
|
| 24.01.2021, 17:09 [ТС] | |
|
Сомневаюсь, что это получится сделать из синхронной функции. На рабочем листе вывести результат после пересчёта документа ещё возможно, но нарушить причинно-следственную связь в пользовательский функции не получится. Я уже это объяснял, что API Mathcad, основанный на COM, предназначен для внешнего управления и не стоит смешивать то, что не документировано.
Я предложил рабочий вариант создать своё API как функции пользователя и сохранять нужные данные (в промежутке между расчётами) в статической управляемой памяти плагина. Вообще, вызов скриптового движка - это дополнительные тормоза в расчётах. Что касается дальнейшего развития netefi механизма, то я и так сделал много для Mathcad'а, но за прошедшее время никому не пригодилось. Поэтому можно понять и PTC, т. к. пользователи в подавляющем большинстве не имеют образования, чтобы выйти за рамки рабочего листа. Сам я очень давно Mathcad'ом не пользуюсь, в виду его бесполезности и ущербности. Когда-то давно в Mathcad 11 можно было передавать в функцию пользователя вложенные массивы и принимать обратно тоже. Сейчас передавать нельзя, а вот приём не помню проверял ли. Они проверку значений сделали передаваемых параметров, медвежья услуга такая. Если сработает, то добавлю возможность возвращать вложенные массивы, если нет, то на этом всё. Мне гораздо интересней поддерживать другой математический пакет.
0
|
|
|
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
|
|||
| 24.01.2021, 18:30 | |||
|
В любом случае главная задача была - это уйти с версии М020 уж очень багованная версия. Параллельно изучается конвертер файлов Mathcad'а в Prime и тогда расчеты можно перенести на другие программы можно и кодогенератор написать, только все упирается во время. Добавлено через 6 минут К примеру - высчитать момент инерции сложного сечения - через сапр - высчитывается в считанные секунды, если подходить аналитически - то долго и нудновато.
0
|
|||
|
|
|
| 24.01.2021, 22:39 [ТС] | |
|
Текущий наборчик файлов и документов для тестирования работы netefi. Я убрал цифры разрядности из названия библиотеки, т.к. это мешает использованию одних и тех же .net сборок в разных версиях Mathcad. Также добавил в архив библиотеку cstools и документ, который демонстрирует построение неявных кривых. Дополнил небольшими инструкциями readme.
0
|
|
|
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
|
|||||||
| 25.01.2021, 05:10 | |||||||
|
реализовал через него(matcad использует только одно ядро но это ограничение не накладывается на работу скрипта) получается что проигрыша в скорости нету в общем исходник - работает со всеми типами переменных нет проблем с кириллицей передача больших массивов относительно быстрая если сравнивать с предыдущим костылем читается все что можно прочесть с переменной - матрицы/вложенные и нет/смешанные/
0
|
|||||||
|
|
|||||||||||
| 25.01.2021, 16:14 [ТС] | |||||||||||
|
Попробовал разными способами вызывать метод GetValue(), используя Mathcad API внутри плагина. Всегда виснет, в том числе и при использовании скрипта.
Вот такой код доказывает, что метод GetValue() ожидает окончания выполнения документа. Как только функция вернёт значение - поток завершится, но значения, как результат выполнения функции, мы не получим. Это показывает, что Mathcad API не получится использовать внутри netefi плагина для получения промежуточных значений переменных в документе.
0
|
|||||||||||
|
|
||
| 26.01.2021, 16:15 [ТС] | ||
|
Жаль, конечно. Пользоваться вложенными массивами в пользовательских функциях было удобно. К примеру, можно было организовать всего 1 параметр у функции в виде вектора, а его элементами сделать значения произвольных типов. То же касается выходного параметра, т.к. иногда нужно, чтобы его тип был произвольным. Например, вернуть значение из базы данных или таблицы Excel. Можно было "обернуть" это значение вектором из одного элемента и передавать строку, число или матрицу. У Mathsoft были слабые и недальновидные программисты-архитекторы. В PTC, кстати, тоже не далеко от них ушли. Вместо расширения внутреннего инструментария делают всякие косметические правки, оживляя труп каждый год.
0
|
||
|
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
|
|||
| 26.01.2021, 17:03 | |||
![]() Добавлено через 11 минут Если работа синхронная то можно ли как то ее расинхронизировать? Async и await мне кажется что там все же ошибка в реализации функции GetValue или как то через делегаты подступится ? или я все напутал ![]() Добавлено через 16 минут
0
|
|||
|
|
||
| 26.01.2021, 17:25 [ТС] | ||
|
Тут в архитектуре дело. Если посмотреть с точки зрения внешнего пользователя, для которого и предназначался этот COM интерфейс, то для него весь документ - это чёрный ящик, у которого есть входы и выходы. Интерфейс позволяет задать значения входов, "потрясти" ящик и получить выходные данные. Что там происходит внутри - неважно. Переменные на листе Mathcad взаимосвязаны и гарантированно получить результат можно только полностью его рассчитав.
Получить промежуточные значения таким способом нельзя. Вы не первый кто это хочет сделать ![]() В принципе, показанный мной выше способ с потоком позволяет использовать GetValue() в плагине. Об этом я умолчал, но это возможно. Т.е. после того как функция возвратит 0, потоку вернётся управление и GetValue() возвратит запрашиваемое значение. Только вот это будет самое последнее значение этой переменной, т.е. после расчёта всего документа. Гораздо проще, если хочется сохранять текущее значение переменной - принудительно записывать в память плагина, т.е. так, как это можно было бы сделать, сохраняя промежуточную переменную в файл средствами самого Mathcad. В 90-х годах были такие книжки от проф. Аладьева по Maple, так он там даже название дал такому методу ускорения вычислений - "метод дисковых транзитов" Только у него не было возможности и образования подключать плагины и в своём методе использования промежуточных данных он целиком всё писал на maple-языке.Добавлено через 19 минут Пока не поздно, если расчёты не сложные, то переходите на SMath Studio. Там нет таких проблем.
0
|
||
|
|
|
| 26.01.2021, 17:47 [ТС] | |
|
Вот даже в справке написано, что GetValue() возвращает самое нижнее значение переменной, а получится оно там может только после полного расчёта. Так что без вариантов.
Я там выше ошибся немного в стоимости. PTC продаёт SDK к Mathcad за $9000 (для компании). Народ там на форуме долго это обсуждал, было смешно. Где-то есть ролик на youtube с кратким описанием что входит в SDK.
0
|
|
|
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
|
|||||||||||
| 28.01.2021, 00:36 | |||||||||||
|
как вариант создать COM библиотеку которая при вызове копирует входной объект в буфер и за ним тут же вызывается функция плагина которая читает с буфера объект
а функцию копирования в буфер вызывается vbs скриптом
0
|
|||||||||||
|
100 / 95 / 23
Регистрация: 30.08.2015
Сообщений: 457
|
|||||||||||||
| 02.02.2021, 10:31 | |||||||||||||
|
без обработки вложенных матриц скрипт кнопки Кликните здесь для просмотра всего текста
COM библиотека Кликните здесь для просмотра всего текста
0
|
|||||||||||||
| 02.02.2021, 10:31 | |
|
Помогаю со студенческими работами здесь
32
Объясните на пальцах совместимость библиотек в .Net Core, .Net Framework, .Net Standart Как разрабатывается проект .NET на разных языках программирования? Статистическое линкование C++ CLI/CLR с библиотеками NET
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации:
В классе Работник добавить:
накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни
коэффициентПрезентеизма — снижает продуктивность. . .
|
|
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день.
Для работы необходим браузер,. . .
|
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности
Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано.
. . .
|
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
|
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива
Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
|