|
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 | |
|
Объясните на пальцах совместимость библиотек в .Net Core, .Net Framework, .Net Standart Как разрабатывается проект .NET на разных языках программирования? Статистическое линкование C++ CLI/CLR с библиотеками NET
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|