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

Изучаем Toolkit


Sergey___1978

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

03.07.2022 в 18:01, davidovka сказал:

Проект из "Common Files\otk\otk_cpp\x86e_win64\obj\otk_view_tree_app\" собирается, но дебаг также не работает.

Конфигурацию при компиляции Debug используете для примера от PTC?

xtop_debug2.png

 

Если в нем отладка запустится, то сравнивать параметры проектов вашего и из примера otk_view_tree_app

 

https://stackoverflow.com/questions/8341686/visual-studio-no-symbols-have-been-loaded-for-this-document

https://docs.microsoft.com/en-us/visualstudio/debugger/troubleshooting-breakpoints?view=vs-2022

 

 

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


После присоединения к процессу зашел Отладка-Окна-Модули. Принудительно "загрузил" символы которые загрузились. И отладка заработала! Спасибо!

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

Можно ли в функции создания кнопки

perr = ProCmdActionAdd("open_drw",
        (uiCmdCmdActFn)open_drw,
        uiProeImmediate, NULL, PRO_B_TRUE,
        PRO_B_TRUE, &cmd_id);

вызывать функцию с аргументами?

Изменено пользователем davidovka
Ссылка на сообщение
Поделиться на других сайтах
15.07.2022 в 21:58, davidovka сказал:

Можно ли в функции создания кнопки


perr = ProCmdActionAdd("open_drw",
        (uiCmdCmdActFn)open_drw,
        uiProeImmediate, NULL, PRO_B_TRUE,
        PRO_B_TRUE, &cmd_id);

вызывать функцию с аргументами?

Насколько знаю, нет.

А какая цель? Возможно, найдется другой путь.

Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, Onizuka сказал:

А какая цель?

Сейчас сделал так:

Две кнопки "открыть чертеж", "открыть спец-ю". Каждая вызывает свою функцию "open_drw", "open_drw_sp". А эти функции вызывают одну "open_drw_base", но с разными аргументами. Думал, что можно избавиться от лишнего звена, вызывая сразу с нужными аргументами.

Еще вопрос: можно ли перехватить вызов функции "переименовать"? Для чего: при переименовании модели смотреть есть ли чертеж этой модели и переименовывать и его (чертеж)?

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

А зачем что-то перехватывать? Делаете свою кнопку переименовать. Считываете имя модели. Проверяете если чертеж с таким же именем и переименовываете его тоже, так же со спецификацией. Я работаю в винчиле, если чертеж не открывается значит его нет. При локальной работе всех нюансов не знаю.

Ссылка на сообщение
Поделиться на других сайтах
18.07.2022 в 20:24, davidovka сказал:

Еще вопрос: можно ли перехватить вызов функции "переименовать"?

Посмотрите функцию ProCmdBracketFuncAdd()

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

Можно ли как-то вызвать и использовать окно Creo c выбором папки/файла для указания пути сохранения файла?

Или только через виндосовские SHGetPathFromIDList и т.д.?

Хочу сделать печать чертежа в tif:в настройках приложения выбираем путь для сохранения, сначала печатаем в pdf, потом вызываем ghostscript вот ему этот путь указываем.

 

Снимок.PNG

Изменено пользователем davidovka
Ссылка на сообщение
Поделиться на других сайтах
30.07.2022 в 13:46, davidovka сказал:

Можно ли как-то вызвать и использовать окно Creo c выбором папки/файла для указания пути сохранения файла?

ProFileOpen()

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

Узнал недавно о существовании Обжект Тулкит. Есть ли у него какие-нибудь преимущества перед классическим тулкитом?

Хочу попробовать написать что-нибудь, стоит ли тратить время на его изучение, есть ли в нем что-то такое чего нет в Pro\Toolkit?

Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Sergey___1978 сказал:

Узнал недавно о существовании Обжект Тулкит. Есть ли у него какие-нибудь преимущества перед классическим тулкитом?

Хочу попробовать написать что-нибудь, стоит ли тратить время на его изучение, есть ли в нем что-то такое чего нет в Pro\Toolkit?

Вообще PTC говорили, что это приоритетное направление и будет развиваться (правда такие заявления звучали несколько лет назад).

В целом это c++, Java, объектно-ориентированный подход и тд. Есть возможности, которых нет в Pro\Toolkit. Но и нет того, что есть в Pro\Toolkit.

Хотя можно создать проект под Обжект C++ и если чего-то не хватает, то использовать в нем C Toolkit функции. Так что тема, вроде как, перспективная и изучение скорее полезно, чем нет.

Ссылка на сообщение
Поделиться на других сайтах
32 минуты назад, Onizuka сказал:

Хотя можно создать проект под Обжект C++ и если чего-то не хватает, то использовать в нем C Toolkit функции. Так что тема, вроде как, перспективная и изучение скорее полезно, чем нет.

Спасибо, появиться время, надо посмотреть с чем его едят.

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

Приложение открывает чертеж активной модели, хочу после открытия чертежа в "окне сообщений" писать текст, к примеру, "Открыт файл D:/2022/drw/7411111111.drw", но этот текст пишется в окне модели, а не нового окна (окна чертежа). Как побороть?


 

pfcSession_ptr Session = pfcGetProESession();
....
desc = pfcModelDescriptor::CreateFromFileName(model_name);
Session->OpenFile(desc)->Activate();
Session->UIDisplayLocalizedMessage("message.txt", "openDRW", path);

 

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

А зачем это сообщение вообще нужно?

Чертеж открылся, это и есть сообщение.

Надо писать универсальный макрос. Вдруг чертеж еще не создан.

Тогда надо предварительно его создать с именем модели, прописать программно

все необходимые параметры:  обозначение и наименование, взятые из модели...

Кроме того можно  этим же макросом открывать спецфикацию, ГЧ, технические требования и т.д.,

создав под них отдельные кнопки.

Я на тулките себе такой написал, на с++ как то все логичней и проще пишется.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Sergey___1978 сказал:

А зачем это сообщение вообще нужно?

Тоже не понимаю, но пользователи попросили:)

Да и уже в принципе интересно как это сделать, может пригодиться в других ситуациях.

Ссылка на сообщение
Поделиться на других сайтах
19 минут назад, davidovka сказал:

пользователи попросили:)

Не повезло вам с пользователями :)

Ссылка на сообщение
Поделиться на других сайтах
28.10.2022 в 20:51, davidovka сказал:

pfcSession_ptr Session = pfcGetProESession(); .... desc = pfcModelDescriptor::CreateFromFileName(model_name); Session->OpenFile(desc)->Activate(); Session->UIDisplayLocalizedMessage("message.txt", "openDRW", path);

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

(это как я понял ObjectToolkit).

Тут логика какая должна быть, для самого простого случая только с чертежем:

1) Считываем имя текущей модели;

2) Пытаемся открыть чертеж с именем модели;

3) Далее два варианта:

- если чертеж существует, то он открывается;

- если нет, то создаем новый чертеж с форматом по умолчанию (допустим А4),

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

- если чертеж уже открыт, то ничего неделаем;

4) Перед тем как вывести сообщение в окно с чертежом надо его активировать.

5) Послать сообщение.

 

 

 

 

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

На  Тулките это выглядит примерно так: 

 

    //берем данные текущей открытой модели
    status=ProMdlCurrentGet(&mdl1);
    if (status!=PRO_TK_NO_ERROR) {return (status);} //выход из функции, если нет модели
    //берем данные модели
    p_modelitem1.owner=mdl1;
    ProMdldata mdldata1;
    ProMdlDataGet(mdl1,&mdldata1);
    wcscpy(model.name,mdldata1.name);wcscpy(model.type,mdldata1.type);
    switch (mdldata1.type[0])
    {
    case 'A':{p_modelitem1.type=PRO_ASSEMBLY;break;}
    case 'P':{p_modelitem1.type=PRO_PART;break;}
    case 'D':{p_modelitem1.type=PRO_DRAWING;break;}
    default: {return(0);}
    }

 

    ProFamilyName drawing_name1;
    wcscpy(drawing_name1,model.name);
    switch (type_draw)
    {
    case 0: {wcscat(drawing_name1,L""); break;}
    case 1: {wcscat(drawing_name1,L"D"); break;}
    case 2: {wcscat(drawing_name1,L"SP"); break;}
    case 3: {wcscat(drawing_name1,L"GCH"); break;}
    case 4: {wcscat(drawing_name1, L""); break; }
    }
    ProMdl mdl3;
    status=ProMdlRetrieve(drawing_name1,PRO_MDL_DRAWING,&mdl3);
    if (status==PRO_TK_NO_ERROR)
    {    //если в новом окне
        int p_window_id;
        ProObjectwindowCreate (drawing_name1,PRO_DRAWING,&p_window_id);
        ProWindowActivate(p_window_id);
        ProWindowRepaint(p_window_id);
    }    else
    {
        //создание нового чертежа
        int p_window_id;
        ProDrawing created_drawing;
        ProMdl    format1;
        ProSolid    solid1;
        ProDwgcreateErrs errors;
        //задание настроек чертежа из другой папки
        ProDirectoryChange(PRO_TEMPLATES);
        status=ProDrawingFromTmpltCreate(drawing_name1,PRO_DRAWING_TEMPLATE,&model,PRODWGCREATE_DISPLAY_DRAWING,&created_drawing,&errors);

далее  действия для нового чретежа

Ссылка на сообщение
Поделиться на других сайтах
23 минуты назад, Sergey___1978 сказал:

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

Все примерно так и работает как вы описали, просто привел лишь небольшую часть кода. 

1 Открывается окно, чертеж

2 Активируется

3 Пишется сообщение

 

За кода спасибо, интересно

 

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

Есть некоторые имена файлов, которые не открываются

xstring model_name;
model_name = L"вер.drw";            // не открывается
model_name = L"1_223_1_v2_вер2.drw";// не открывается

model_name = L"корпус.drw";         // открывается

pfcModelDescriptor_ptr desc = pfcModelDescriptor::CreateFromFileName(model_name);
Session->OpenFile(desc)->Activate();

Пробовал в creopyson, тоже не открывает :)

import creopyson

c = creopyson.Client()
c.connect()

c.file_open("вер.drw", display=True)
D:\creo\creopyson>test.py
Traceback (most recent call last):
  File "D:\creo\creopyson\test.py", line 6, in <module>
    c.file_open("вер.drw", display=True)
  File "D:\creo\creopyson\creopyson\file.py", line 797, in open_
    return client._creoson_post("file", "open", data)
  File "D:\creo\creopyson\creopyson\connection.py", line 75, in _creoson_post
    raise RuntimeError(error_msg)
RuntimeError: Could not open file 'вер.drw' in directory D:\test\2023\

 

В чем может быть причина?

Файл есть и через Creo открывается.

Creo 4 M150

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

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

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

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

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

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

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

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

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

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

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



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