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

Программирование на UG/Open


Siniy

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

Господа. Два года по документации разбирался с UGopen. Хотелось бы услышать мнение спецов о дальнейшем развитии. Я разбирался с 16 версии и углубился в синтаксис C. А сейчас смотрю что функции для C++ обновляются больше и новых появляется поболее. Еще и качество документации несколько.... не знаю как сказать. ошибок много. И вот я сейчас на распутье: Взятся за С++ или всетаки адаптироваться на С. Есть те кто шел также как я? Поделитесь опытом?

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


Имею только опыт разработки постпроцессоров с использования десятка функций UG Open Возможно, это задача очень простая, хотя и для 5-ти осевых станков, но особых проблем она не вызвала. Версия была еще 15-я.

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

Вообщем трабла:

есть tag объекта (UF_solid_type 70,UF_solid_face_subtype 2) есть функция которая запрашивает параметры фейса:

UF_MODL_ask_face_data (parameters.cyl_face, &typ, point, dir, box, &radius, &rad_data, &norm_dir );

Дык, вот ента быдла не считает вышеуказаный объект фейсом. Т.е. не получается получить радиус фейса(допустим диаметр отверстия). кто-нить может что присоветовать?

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

Я занимаюсь программированием под UG более 5 лет

Заниматься С++ есть смысл особенно если будешь делать большие проекты

То что касается UG и классов которые там есть то они еще не позволяют полностью отказаться от C

и я думаю эта ситуация будет продолжаться долго

Из С++ классов действительно полезно использолвать систему классов для работы со styler

По поводу UF_MODL_ask_face_data

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

Если писать функцию выбора такого типа объекта то UF_UI_mask_t должно быть инициализировано так

{UF_solid_type, UF_solid_body_subtype, UF_UI_SEL_FEATURE_CYLINDRICAL_FACE}

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

to Siniy

попробуй следующий фрагмент кода, может поможет:

// *** cut here ***

#include <iostream>

#include <uf.h>

#include <uf_object_types.h>

#include <uf_modl.h>

#include <ug_session.hxx>

#include <ug_exception.hxx>

#include <ug_part.hxx>

#include <ug_typed.hxx>

using namespace std;

// *** наша точка входа в ug_овую dll ***

extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )

{

try

{

UgSession sess(true); // захват лицензии

UgPart *dp = sess.getDisplayPart(); // спрашиваем displayed part

// если нету - улетаем по exception типа UgException

// заряжаем цикл по всем объектам в displayed part ...

for ( UgTypedObject *to = dp->iterateFirst(); to != NULL; to = dp->iterateNext(to) )

{

int type, subtype;

type = to->askType(); // спрашиваем тип

subtype = to->askSubtype(); // и подтип

if (to->isAlive() == false) continue; // сначала я собрал dll-ку без этой проверки, и сразу улетел по

// UgException : "Solid Object Input Are Not Alive"

// поэтому пришлось добавить эту проверку

// нашли face

if (type == UF_solid_type && subtype == UF_solid_face_subtype)

{

int face_type=0;

double point[3];

double dir[3];

double box[6];

double radius;

double radius_data;

int norm_dir;

// спросили про него инфу

UgException::throwOnFailure(

UF_MODL_ask_face_data (to->getTag(), &face_type, point,

dir, box, &radius, &radius_data, &norm_dir ));

// если тип == 16 (это цилиндрич пов-ть) то распечатали радиус

if (face_type == 16 ) cout<<"cylinder face found ... its rad == "<<radius<<endl;

}

}

}

catch (UgException &erc) { cout<<"ug error "<<erc.askErrorText()<<endl; }

catch (...) { cout<<"unhandled error"<<endl; }

}

// *** cut here ***

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

niki

Скажи какая версия и патч у тебя стоят? у меня выбивает именно эта функция. даже если правильный код объекта подаешь.

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

2 siniy

Внимательно посмотри на входные параметры для функции

int face_type=0;

double point[3];

double dir[3];

double box[6];

double radius;

double radius_data;

int norm_dir;

UgException::throwOnFailure(UF_MODL_ask_face_data (to->getTag(), &face_type, point, dir, box, &radius, &radius_data, &norm_dir ));

point - массив из 3-х double-ов

dir -------- // ---------------

box - массив из 6-ти double-ов

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

И еще... есть ли в С++ возможность вызывать собственнонарисованое диалоговое окно? не в стайлере сделаное а в VC? если да то бросте минимальный код как его подцепить... а то не знаю с какой стороны подойти..

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

на сообщение от 16 декабря.

можно. Гораздо удобнее чем цеплять через Styler. Делается через MFC, каждое поле (или опция) прописывается с переменной в вашей программе.

Есть минусы - стайлеровский диалог "ОКается" в UG через среднюю клавишу мышки, а такой диалог - только кликая по ОК или Enter.

Плюсы - в VC очень просто рисовать диалоги любой сложности, не в пример Стайлеру. Просто подцепить к переменным. Не нужно таскать за dll файл dlg (!) , который постоянно теряется. Кроме того, сам dll меньше раз в 5 (средний размер - 30 кило), хотя последнее не принципиально.

Ссылка на сообщение
Поделиться на других сайтах
  • 2 месяца спустя...
ttt Опа. Можно по подробнее... Либо я уже перегреваюсь когда к этому вопросу возвращаюсь... толи хелп ботаный... если не сложно сбросте набросок проекта на почту... Пожалуйста. Задолбался уже.
Ссылка на сообщение
Поделиться на других сайтах

UF_UI_get_default_parent

Retrieves the window to be used as the parent of any user defined dialogs in

Unigraphics. This way the user defined dialog physically behaves as though

it is one of Unigraphics' dialog. For example it is not able to hide behind

the graphics window and it iconifies when Unigraphics is iconified.

See Also

This is a code fragment showing the essence of how to use this function on Unix.

Return

This routine returns a void pointer which is the

Window to be used as the parent of user defined dialogs.

On Unix you must type cast this to a Widget. On NT you

must type cast this to an HWND.

extern void * UF_UI_get_default_parent ( );

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

Здравствуйте!

Если кто пишет на C под CAM и освоил ф-цию dpud (Drive Path User Defined),

помогите, плиз, разобраться с её работой, а в особенности с переменной

purpose .

Заранее благодарен. :wallbash:

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

to Siniy

попробуй следующий фрагмент кода, может поможет:

// *** cut here ***

#include <iostream>

#include <uf.h>

#include <uf_object_types.h>

#include <uf_modl.h>

#include <ug_session.hxx>

#include <ug_exception.hxx>

#include <ug_part.hxx>

#include <ug_typed.hxx>

using namespace std;

// ***  наша точка входа в ug_овую dll ***

extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen )

{

    try

    {

        UgSession sess(true);  //  захват лицензии

        UgPart *dp = sess.getDisplayPart(); // спрашиваем displayed part

                                                     // если нету - улетаем по exception типа UgException

        // заряжаем цикл по всем объектам в displayed part ...

        for ( UgTypedObject *to = dp->iterateFirst(); to != NULL; to = dp->iterateNext(to) )

        {

            int type, subtype;

            type = to->askType();          // спрашиваем тип

            subtype = to->askSubtype();  // и подтип

            if (to->isAlive() == false) continue; // сначала я собрал dll-ку без этой проверки, и сразу улетел по

                                                           // UgException :       "Solid Object Input Are Not Alive"

                                                           // поэтому пришлось добавить эту проверку

            // нашли face

            if (type == UF_solid_type && subtype == UF_solid_face_subtype)

            {

                int face_type=0;

                double point[3];

                double dir[3];

                double box[6];

                double radius;

                double radius_data;

                int norm_dir;

                // спросили про него инфу

                UgException::throwOnFailure(

                    UF_MODL_ask_face_data (to->getTag(), &face_type, point,

                    dir, box, &radius, &radius_data, &norm_dir ));

                // если тип == 16 (это цилиндрич пов-ть) то распечатали радиус

                 if (face_type == 16 ) cout<<"cylinder face found ... its rad == "<<radius<<endl;

            }

        }

    }

    catch (UgException &erc)  { cout<<"ug error "<<erc.askErrorText()<<endl; }

    catch (...)                  { cout<<"unhandled error"<<endl;                  }

}

// *** cut here ***

<{POST_SNAPBACK}>

привет niki!!

У меня просьба : не могли бы Вы прислать или описание или пример исходника проги, которая бы загружалась как dll в UG, открывалась как окно, и выполняла бы какие-либо действия (собирала инфу об проекте и передавала ее в Excel).

Я новичок в работе с UG/Open API, поэтому Ваша помощь была бы очень кстати.

А преподаватель - очень строгий, не знаю что делать, если не сделаю к середине апреля.

MAIL OKAONLINE@USA.COM

ИЛИ КТО НИБУДЬ ЕЩЕ ЗНАЕТ, ПОМОГИТЕ, ПОЖАЛУЙСТА

Надеюсь на помощь, Марина.

Изменено пользователем oka
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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