Перейти к публикации

Ug Open Api


Stalker

Рекомендованные сообщения

Привет всем.

Начал писать под UG (NX4) и столкнулся с некоторыми проблемсами - очень хотелось бы получить квалифицированный ответ.

Имеется необходимость создать некоторое приложение windowsForm используя VS2003 (а еще бы лучше под VS2005). Кроме того, здорово было бы здорово использовать библиотеки типов под .NET, а не старый неуправляемый код...

1. Загвоздка 1 - скомпиленное в VS2005 не работает - не верная версия CLR. Вопрос - что-нить известно о перспективах UGS по поддержке .NET 2.0?

2. При осмотре библитек типов NXOPEN под .NET сложилось впечатление, что кое-чего там нет, т.е. многие методы нужно будет вызывать из libufun.dll. К примеру, Retrive Pattern - вставить шаблон в чертеж - выполняется рутиной uc5823, которой просто не существует в библиотеках .NET (а может не нашел). Или например, класс Cylinder? Удручает....

3. Попытался использовать uc5823 в своем проекте - импортировал в VS2003 - метод не работает корректно - возращает null тег, а код ошибки не адекватный. Пробую импортировать в рпоект метод создания цилиндра - работает... Где ошибка - не знаю... Проверяю метод под VS6, работает...

4. Работа с udf - есть udf и его надо привязать параметрически размерами к чему-нмть еще - если есть пример решения такой задачи - очень прошу осветить эту тему...

Да и вообще, вопросов по API завались, хотя в UG я человек не новый

Заранее спасибо за ответы

3dlab@mail.ru

Ссылка на сообщение
Поделиться на других сайтах


Мой Тебе совет

Не заморачивайся с net а потрать время на внимательное

изучение "c" библиотек

Все равно эти новые библиотеки которые так рекламируют

покрывают от силы 20% возможнотей от старой "c"

библиотеки

Исклющение пожалуй составляет C++ библиотека UIStyler

По поводу собираемости niki уже писал в предыдущем посте

о совместимости версий компиляторов и UG

По поводу udf

в UF_MODL есть функции для работы с этим

достаточно набрать поиск по "udf", "dime"

так что это реально написать

Сам я такую задачу не решал так что примеров у меня нет

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за совет, к этому я уже сам прихожу - просто в VS2003 подкупает возможность интерфейс нормальный создавать, исполшьзуя библиотеку типов FCL, да еще и работа с памятью там проще - голова не болит за ее освобождение. C# - тоже штука приятная.

Вопрос, если писать свое приложение - то какую стратегию хранения методов лучше принять:

1. Все разбросать по разным dll? или

2. Все запихнуть в одну свою dll, загрузить ее по aplication start_up, а потом вызвывать из своего toolbara?

Я предполагал следующую стратегию, хотя пока не знаю как ее реализовать (ибо с C++ у меня слабовато пока получается - работаю на C#):

---

Интерфейс и все методы описать в VС6 или в чем-то получше, где можно писать нормальный неуправляемый код. Создать свои тулбары и вызывать методы моей библиотеки из UG (кстати, можно кинуть пример, как это делается?).

Созданные обекты по завершении сериализовать.

Ссылка на сообщение
Поделиться на других сайтах

Если это не нужно специально не стоит разбрасывать все по разным dll

Для экономии памяти это по крайней мере не нужно

в силу того что сами dll по размеру мизерны по сравнению с UG и тем более

с данными которые в UG загружаются

В своих проектах я использовал максимум 2 dll

2 dll нужно если Ты хочешь создавать управлять и хранить свои объекты внутри prt

Тогда часть методов должна быть загружена в момент старта UG и потому выделяется

в отдельную dll

В других случаях все в одной dll

А чем всетаки C++ не устраивает

Если Ты что-то не знаешь или не понимаешь

просто не используй пока

Если хочешь интерфейс с помощью window посмотри

UF_UI_get_default_parent ( );

Но это потеря переносимости

Разрушение взаимодействия твоей программы с остальными модулями UG

(макросы нельзя будет писать, логи будут ущербными ...)

Я думаю потеряется часть функциональности - выбор объектов геометрических

В общем я этим не занимался

Поищи на форуме тут раньше был уже товарищ который это вроде реализовал

Лучше опиши просто что за задачу Ты хочешь решить

может тогда я смогу Тебе что-нибудь посоветовать

По поводу освобождения памяти на C++

Используй библиотеку stl - ее контейнеры освобождают память автоматически

Ссылка на сообщение
Поделиться на других сайтах

1. На данном этапе цель такова - найти такую технологию программирования под UG, чтобы можно было ставить приложение по крайней мере на NXы, без большой переделки кода под каждую версию.

а) Надо определиться с IDE - сейчас у меня VC6 и мне кажется не самый удобный вариант после знакомства с VS2005.

б) Определиться с архитектурой приложени - набор классов, модулей.

в) Как будут вызываться функции библиотек, т.е. организация интерфейса (либо свой, либо Styler)

2. Цель приложения - комплексное оформление чертежей под ГОСТ (вернее - упрощение оформления), а также работа с составом изделия - экспорт данных из UG в приложение управления документами.

Еще хочу автоматизировать создание и расчет зубчатых колес (и оформление). Тоже самое и к пружинам относится. Для этого надо разобраться либо с UDO, либо UDF и как они позиыионируются относительно других объектов.

На ближайшее время чтобы стартовать мне нужен каркас приложения, который я буду наращивать.

Хотелось бы знать, как загрузить в UG билиотеку по его загрузке и больше ничего не делать, пока не будет нажата нужная кнопка.

Мне пока не понятно, как вызвать нужную функцию по кнопке в UG (хотя в документации про это есть - и надо с этим разбираться). Кнопка создается используя Customize/New Button. Если есть другие, более грамотные альтернативы - с радостью приму на вооружение.

Ссылка на сообщение
Поделиться на других сайтах

1) Если хочешь хорошую переносимость

Используй только стандартные библиотеки UG

Для разработки менюшек используй Styler - он проще виндов

VC6 - можно использовать только с NX1

2) UDF Тебе может понадобится если Ты должен хранить в prt какую либо свою информация

и поддерживать ее модификацию ...

Например так в draftinge я делал символы сварки, шерховатость и другие подобные

вещи типа паки клейки ......

Очень это заморочно много кода много отладки

Еще есть вариант кроме UDO просто програмно построить параметрическую модель

того же колеса или пружины

Что-то я не очень понял по поводу загрузки библиотеки

Если имеется в диду загрузка dll

То ее просто надо бросить в каталог startup

В момент старта UG точка входа uf_sta отработает

Там можно разместить любой код

Обычно там регистрируются алгоритмы для работы с UDF:

Что делать если объект UG на который ссылается UDF был модифицирован или удален

или пользователь нажал info object и ткнул в Ваш UDF ...

Ссылка на сообщение
Поделиться на других сайтах

А в каком IDE ты пишешь свои проги, видимо не на VC6? В данный момент меня очень интересует, на чем можно писать неуправляемый C++ и окна удобнее всего.

Styler - это не лучшая альтернатива - я готов пожертвовать совместимостью и сделать это хозяйство под NX 2-4. Интерфей хотелось бы делать прямо в IDE, а не испольуя UGовскую приблуду (Styler).

По поводу dll - может я не правильно что-то понимаю, но я вижу это так:

Пример: библиотека включает в себя ufsta и другие методы, которые будут вызываться по кнопкам. При загрузке UG стартует ufsta, которая получает сессию и все. А дальше пользователь выбирает созданное меню и работает через него с методами нашей библиотеки. От сесии отрубаемся по выходе из UG.

Ссылка на сообщение
Поделиться на других сайтах

Я пишу в VC7 так как у нас сейчас используется NX2

Весь интерфейс я делаю на Styler - мне его возможностей хватает

Интерфейсная часть должна вызываться в момент запуска Твоей программы

точка входа uf_usr

uf_sta - к моменту когда UG загрузился уже полностью завершает свое выполнение

Я также сомневаюсь что используя виндовый интерфейс у Тебя получится

выбирать геометрические объекты из основного окна UG

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответы.

Попробовал что-нибудь под VS2005 (С/С++) - все чудесно компилится и запускается. При попытке добавить форму VS пытается переключиться на CLR - и конечно все перестанет работать.

Появились новые вопросы:

1. Очевидно, что Styler может удовлетворить большинство потребностей по интерфейсу, но как я понял, Styler создает три файла: тэмплет, .h и dlg, причем всякий раз их перегенерирует при изменении чего-нить в редакторе окна. В темплете проходит регитрация actions, там же предлагается их и наполнить смыслом. Но если что-то поменяется - все пререзатрется. Кроме того, я хочу иметь много диалогов и управлять их одним проектом (т.е. одним dll с одной ufsta) (или этот подход не правильный?). В документации проскользнуло, что это возможно, т.е. будет один файл, где регистрируются все actions одним махом, а потом вызываются разными диалогами. Как максимально упростить и автоматизировать процесс создания многодиалогового приложения под UG?

2. Можно ли каким-то образом повесить в UG диалоге что-нить на правую кнопку мыши (скажем, чтобы срабатывала функция какая-нибудь)?

3. Как управлять элементами диалога типа Label, Image. Предположим, в диалоге нажимаю переключатель какой-нить, и вместо одного bitmapa другой подгружается? Как получить ссылку на такие объекты? Они не имеют экшенов, а посему и (UF_STYLER_item_value_type_p_t callback_data) они не имеют, хотя я не разобрался наверное в этом...

4. Как правильно организовать хранение пользовательский данных в сессии? Оъявлять в ufsta переменные или есть другой, более грамотный вариант (сздание собственных структур данных...)?

5. Работал с атрибутами детали - успешно их изменил, в свойствах все здорово, а шаблон, в котором эти атрибуты участвуют остался без изменения. Если нажимаю кнопку Сохранить, шаблон обновлется, есть ли команда, позволяющая обновить данные по атрибутам в чертеже (и наверное в модели)?

С уважением

Ссылка на сообщение
Поделиться на других сайтах

1) Я после того как файлы *.h *.c сгенерены переименовываю и копирую в другую папку

При регенерации файлы сохраняются а изменные куски кода я перекопирую вручную

Если пишешь на c++ не забудь сменить расширение .c файла

Тебе никто не мешает иметь нескоько диалогов в одной dll

Диалог создается UF_STYLER_create_dialog

Если он вызван в uf_usr - это корневой диалог

Если в action - это дочерний диалог

В action как правило вызывается не UF_STYLER_create_dialog а функция

его содержащая

Также не забудь поставить в dlg специальную галочку на такой action

{BC_TOOL_GEOM_LIST , UF_STYLER_ACTIVATE_CB , 1, BC_geom_list_cb},

В третьем поле структуры должна стоять 1.

Ее можно поставить и вручную

2) В styler все завязано на элементы меню

Ты можешь видимо работать с назначениями клавишь и кнопок мыши через men файлы

Это надо смотреть в документации

Можно повесить свою dll на pulldown menu которая выпадает при нажатии на правую

кнопку мыши в рабочей области рисования

3) Тебе будет проще разобраться с C++ библиотекой для styler

в .h файле диалога добавиш

class my_dialog : public UgUIDialog

{

public:

static my_type my_data; // это могут быть Твои данные в сессии

my_dialog (int dialog_id) { initialize(dialog_id); }

void initializeThis () { }

};

В .cpp диалога это будет примерно так

#pragma warning(disable: 4251)

#include <ug_ui_action_button.hxx>

#include <ug_ui_bitmap.hxx>

#include <ug_ui_button_layout.hxx>

#include <ug_ui_container.hxx>

#include <ug_ui_control.hxx>

#include <ug_ui_dialog.hxx>

#include <ug_ui_integer.hxx>

#include <ug_ui_integer_scale.hxx>

#include <ug_ui_label.hxx>

#include <ug_ui_list.hxx>

#include <ug_ui_multi_line_text.hxx>

#include <ug_ui_multi_select_list.hxx>

#include <ug_ui_option_menu.hxx>

#include <ug_ui_radio_box.hxx>

#include <ug_ui_real.hxx>

#include <ug_ui_real_scale.hxx>

#include <ug_ui_scrolled_window.hxx>

#include <ug_ui_selection_box.hxx>

#include <ug_ui_separator.hxx>

#include <ug_ui_session.hxx>

#include <ug_ui_single_select_list.hxx>

#include <ug_ui_string.hxx>

#include <ug_ui_toggle_button.hxx>

#include <ug_ui_tool_palette.hxx>

#include <ug_ui_wide_string.hxx>

..............

int BC_conn_type_cb ( int dialog_id,

void * client_data,

UF_STYLER_item_value_type_p_t callback_data)

{ int k;

if(UF_initialize() != 0) return (UF_UI_CB_CONTINUE_DIALOG);

try

{

my_dialog dialog(dialog_id);

UgUIOptionMenu opt_conn_type(BC_OPTION_CONN_TYPE, &dialog);

UgUISingleSelectList slist_comp(BC_LIST_COMPONENT, &dialog);

UgUISingleSelectList slist_elem(BC_LIST_ELEMENT, &dialog);

UgUIBitmap bmp_element(BC_BITMAP_ELEMENT, &dialog);

conn_list::iterator ii=fixture_package_dialog::list.begin();

for(k=0; k<opt_conn_type.askSelectedIndex(); k++) ++ii;

bmp_element.setBitmap(ii->first+"_0.bmp");

slist_comp.setList(ii->second.get_elements());

for(k=0; k<max_index_element; k++) fixture_package_dialog::index_element[k]=-1;

std::vector<std::string> tmp=slist_elem.getList();

for(k=0; k<(int)tmp.size(); k++) slist_elem.erase(0);

}

catch(base_err& e) { e.trace(THIS_FILE, __LINE__); ug_err(e).message(); }

catch(...) { base_err e(THIS_FILE, __LINE__, "System error"); ug_err(e).message(); }

UF_terminate ();

return (UF_UI_CB_CONTINUE_DIALOG);

}

Будь уверен что версия компилятора соответствует

Собирать рекомендую в режиме release

Этих правил следует придерживаться так как реализация stl библиотек под windows

отличается от версии к версии компиляторов и по разному реализованы механизмы

освобождения памяти для release и debug

а styler с++ библиотека работает с контенерами stl

5) Так наверно и функция должна быть для сохранения

Вызови ее после изменения и все

Многие вещи в программировании не будут иметь изменения даже если Ты что-то отредактировал

пока ты не попросить об обновлении UF_MODL_update()

Это правильно - это увеличивает скорость

Ссылка на сообщение
Поделиться на других сайтах
  • 4 месяца спустя...

Цитата : "4. Работа с udf - есть udf и его надо привязать параметрически размерами к чему-нмть еще - если есть пример решения такой задачи - очень прошу осветить эту тему..."

1) грузишь udf в память - UF_PART_import - это для того чтобы сразу его правильно ориентировать, там ведь один из аргументов - матрица трансформации.

2) просишь default UDF параметры - UF_MODL_ask_udf_definition

3) готовишь strings с новыми параметрами;

4) строишь UDF - UF_MODL_create_instantiated_udf;

5) ждешь когда в UGOpen появится функция для Explode UDF - пока я такой не нашел, вроде и в NX4 тоже нету - ведь в результате получаешь feature UDF, и там после dblClick на него появляется небольшой диалог где есть кнопка Explode - жмешь туда и вместо UDF получаешь его интимную жизнь внутри. Но Explode есть у new-style UDF (начиная где-то с UG18), в предыдущих версиях вроде вообще нет Explode.

Такие дела

"Do it as simple as possible, but not simpler." Albert Einstein.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...