Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Разработка приложений под Open API T-FLEX CAD (.NET)
 
В T-FLEX CAD разработан функционал для создания собственных приложений на основе технологии .NET. Пользователь может создавать приложения, использующие функционал параметрического и геометрического ядер T-FLEX CAD.
Думаю эта тема скоро станет востребованной, поэтому взял на себя смелость создать соответствующую ветку. Существующая ветка "Вопросы по API" в основном посвящена макросам. Несмотря на то, что в принципе макросы и отдельные приложения строятся на одних и тех же методах, все же есть различия в подходе создания и применения: макросы, на мой взгляд, предназначены для решения локальных задач - типа задачи объединения нескольких комманд в один вызов макроса, а приложения решают более серьезные задачи.
Сейчас осваиваю программирование под T-FLEX CAD и как у всех начинающих - много вопросов. По-началу вопросы адресовал разработчикам, а потом подумал, что многие проблемы, с которыми сталкиваюсь сам при освоении, возникают и у других пользователей. К тому же осваивать новое лучше не в одиночку. Надеюсь, что этой темой заинтересуются еще пользователи и мы вместе сможем осваивать материал быстрее. Очень ценны советы Brom25. Надеюсь, что ответы на вопросы мы сможем получать и от разработчиков.

Вот мой первый вопрос (перенесен из ветки "Вопросы по API"):
Как создавать контекстное меню в С# разобрался. Причем, задал вызов меню на элементе control. Когда приложение запущено, но файл еще не открыт контекстное меню работает, но при открытии файла в control - контекстное меню работать отказывается. В руководстве по API есть описание вызова:

__delegate void ControlContextMenu(Object* sender, ControlEventArgs* e);

Как его вызвать понять не могу - примера нет.
Страницы: Пред. 1 2 3 4 След.
Ответы
 
Цитата
drugg пишет:

а если не секрет, это где так на работе от скуки маются?


секрет, уволят нафиг... :) собственно я извинился за оффтоп, давайте не будем развивать эту тему ;)
Конструктору - конструирование, программисту - программирование
 
секрет, так секрет... просто любопытно
 
Есть строка для поиска, сделанная при помощи элемента TextBox. Хочется, чтобы поиск запускался нажатием на Enter (с клавиатуры) после заполнения строки поиска. Пробовал различные обработчики событий, на клик мыши реагирует, а на Enter не хочет. Может быть кто знает какой обработчик нужно использовать?
Кто ищет - тот всегда найдет!
 
Цитата
Brom25 пишет:

Есть строка для поиска, сделанная при помощи элемента TextBox. Хочется, чтобы поиск запускался нажатием на Enter (с клавиатуры) после заполнения строки поиска. Пробовал различные обработчики событий, на клик мыши реагирует, а на Enter не хочет. Может быть кто знает какой обработчик нужно использовать?

textBox1_KeyPress плюс проверка на нажатие клавиши Enter
 
Спасибо! Получилось при помощи textBox1_KeyDown.
Изменено: Brom25 - 10.08.2008 14:11:04
Кто ищет - тот всегда найдет!
 
Этот вопрос я задавал и раньше, но в другой теме. С появлением Diso и tipman-a на форуме решил задать его снова. Кому-нибудь приходилось получать ссылку на родительский объект по ключу (метод GetReference), как это делается? В моем случае необходимо получить ссылку на линию построения (класс Construction), от которой была отложена другая конкретная линия построения, содержащаяся в переменной, например, baby_line.
Кто ищет - тот всегда найдет!
 
сам жду этого, в 10тке пока не реализовано если я не ошибаюсь. В 11-й есть, но пока не разбирался, звонил в топсистемы - обещали добавить в 10.60, но в ней не появилось. Жду 10.61...
Изменено: tipman - 11.08.2008 00:03:19
Конструктору - конструирование, программисту - программирование
 
Цитата
tipman пишет:

обещали добавить в 10.60, но в ней не появилось.

У меня были случаи, что функциональность добавляли, а в справке API не отражалось... Проверь в 10.60 скорее всего добавили.

Цитата
tipman пишет:

сам жду этого

В TF11 добавили контейнер родительских элементов Parents, но это не то же самое, что метод GetReference (GetReference - Получить ссылку на родителький объект по ключу). GetReference в TF9 уже был. Или я просто не понял, что ты хотел сказать?
Изменено: Brom25 - 13.08.2008 21:33:18
Кто ищет - тот всегда найдет!
 
У меня такой вопрос. Как из внешней программы через OpenAPI запустить полноценный экземпляр T-Flex-а, или подключиться к уже загруженному, сделать его видимым и программно работать с документами, открываемыми непосредственно в нём? То есть аналогично тому, как это реализовывалось через ActiveX.
 
Юрий, здравствуйте.

В TFlex'е есть возможность использования функциональности Open API без запуска самого CAD'а. Для этого необходимо в своем приложении проинициализировать Open API TFlex CAD. Далее производим необходимые изменения в документе, сохраняем и запускаем документ в CADе посредствам функций .NET. В этом случае все изменения, произведенные в документе, будут Вами отслежены только после открытия документа в CADе.

Организация "параллельной" работы приложения и документа (то, о чем пишете Вы) - задача более сложная. Решение её должно выглядеть следующим образом - нужно сделать свой plugin (dll к CAD) и приложение (exe) и самостоятельно организовать их взаимодействие (например через Remoting для .NET или DDE для неуправляемого кода).

Примеры решения первой задачи существуют, второй - не уверен (по крайней мере я их не видел). Думаю, все разъяснится, когда Вы уточните назначение и функции Вашего приложения.
Изменено: Александр Сысоев - 25.11.2008 13:19:05
 
Александр, спасибо за отклик.
Функции у приложения стандартные - автоматизация рутинной работы конструктора. Я проектирую алюминиевые конструкции - витражи, окна, стеклянные крыши... В этой работе очень много простых, однообразных действий, которые требуют только колоссального внимания и кучи времени. При этом начинаешь сажать ошибки на пустом месте. Вот и захотелось переложить всю рутину, какую только смогу, на компьютер. Но здесь без диалога с пользователем никуда. Например, в случае, когда нужно производить какие-то действия только с выделенными объектами, или в случае, когда дальнейшие действия без указания пользователя невозможны. Поэтому требуется работать непосредственно в Т-Флексе. Реализовывать это через макросы, по-моему, не реально. Только процедура маркировки стеклопакетов и составления заявки на их изготовление, которую я наваял, используя ActiveX, заняла около полутора тысяч строк кода на Дельфи. Делать такое в редакторе макросов с рудиментарной системой отладки и полном отсутствии хэлпа - самоубийство. К тому же я паскалист. Изучить С# не проблема, если уж некуда будет деваться, но пока так не хочется... :-)
Вот и мучаюсь сейчас - не знаю, как подключиться к реальному Т-Флексу, не к его API-хосту.
 
Юрий, как я понял, в Вашем случае все тривиально - Вам достаточно написать плагин к T-FLEX CAD, который может взаимодействовать с объектами, выделенными пользователем.

Есть вариант ещё более простой, который Вы правда сразу отмели, - макрос. Да, система отладки в редакторе, к сожалению, не так удобна как, например, в Visual Studio. Выход из этой ситуации вижу следующий - создание приложения в любом из доступных средств разработки (VS, например), инициализация API способом, о котором я писал выше, написание кода самого приложения, отладка и вставка кода в редактор макросов.

Примеры могу выслать =)

P.S. Паскаль - это конечно хорошо, но хотя бы в одном из .NET-совместимых языков для решения Вашей задачи все же придется разобраться =)
Изменено: Александр Сысоев - 25.11.2008 17:33:04
 
С "простым" вариантом, я думаю, тоже придётся повозиться. Переносить же придётся не только процедуры с функциями, но и формы с реакциями на события. Тут проблем не возникнет? Кстати, а где меня может ждать подвох в Delphi 2007 for the Microsoft .NET Framework, что лучше не рисковать и перейти на С#? Просто, действительно, я только начинаю что-то пробовать писать под .NET и самое интересное у меня ещё впереди.

Очень рад, что мой случай проблем не представляет. Пришлите, пожалуйста, примеры плагина к Т-Флексу и примеры взаимодействия с ним. Буду очень благодарен.
Моё мыло gusev@fasadokna.ru
 
Совершенно верно. Формы придется не переносить, а создавать заново. Да подвоха-то в общем нет никакого, просто большинство примеров написано на либо на C#, либо на VB. Примеры Вам выслал.
Изменено: Александр Сысоев - 26.11.2008 11:38:28
 
Большое спасибо за примеры.
То, что большинство их написано на С# или VB, особых проблем не вызывает. В данном конкретном случае чукча читатель, а не писатель. =) Для меня прочитать программу на С# и понять логику гораздо проще, чем эту программу написать. Думаю-то я на паскале.
 
У меня вопрос к Александру Сысоеву. Сейчас вышел русифицированный MSDN и VS2008 exspress на русском, но на framework 3.5. Что посоветуете: имеет ли смысл сейчас переходить на новую среду разработки приложений под T-Flex, ведь T-Flex на framework 2.0? Как будет себя вести программа, если часть ее tflex.control на framework 2.0, а кнопки и др. элементы графического интерфейса - на framework 3.5?
Интересно 12-я версия уже будет на framework 3.5?
 
Сергей, новая платформа по сути сохранила ядро старой, так что никаких проблем с взаимодействием TFlex API c платформой .NET Framework 3.5 нет, можете смело преходить. Я уже давно так поступил :) Соответственно, использование графических элементов Windows Forms в .NET Framework 3.5 совместно с элементами управления TFlex'a так же не должно вызывать никаких затруднений. Проблемы могут вознинкуть лишь при использовании новой подсистемы интерфейса пользователя WPF. Но этот вопрос пока толком не исследован...
Изменено: Александр Сысоев - 10.12.2008 14:06:07
 
А проблем-то вообще нет. Достаточно выбрать в свойствах проекта использование Framework 2.0 и все.
 
Еще вопрос к Александру Сысоеву. Для приложений под TFlex.Control. Не могу понять как сопоставить координаты Control и координаты рабочего пространства. Дело в том, что нулевая координата Control - это левый верхний угол, а нулевая координата рабочего пространства - левый нижний угол листа. Сопоставить можно только при статичном положении листа относительно Control, но если лист переместить или отмасштабировать получается два неизвестных параметра по вертикали и два неизвестных по горизонтали. Посмотрел в руководстве по API - там есть функции работы с координатами, но какая отвечает за решение подобной задачи разобраться не смог.
 
У объекта Control есть свойство Graphics. У возвращаемого этим свойством объекта необходимо вызвать функцию GetWCSPoint(Point point), на вход которой подается точка point в системе координат графического устройства (в пикселях), а на выходе получается точка в системе координат чертежа
Страницы: Пред. 1 2 3 4 След.