Sergey___1978

Изучаем Toolkit

199 сообщений в этой теме

Что-то я не понял вопроса. Зачем раскидывать по слоям?

Мне просто нужно было получить нормальный чертеж в PDF формате для отправки заказчику, у которого нет прое.

Встроенный принтер не устраивал из-за искажения шрифта размеров.

Можно по подробнее про слои.

Слои, это типа когда текстовая информация раздельно, графика отдельно? Если это имелось ввиду, то ни к чему мне это.

Поделиться сообщением


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


Хочу создать средство быстрого создания технологической модели при помощи Toolkit.

порядок действий:

1. копирую в буфер имя исходной модели.

2. создаю новую модель того же типа(лист или твердотелка) с именем исходной модели + "_TEX"

3. заполняю обозначение для технологической модели (oboznachenie+" ТЕХ").

4. добавляю фичер совместные данные - объединение/наследование - выбираю исходную модель. Ориентация по умолчанию.

5. Создаю карту эскизов. имя +_КЕ.

6. Заполняю обозначение для карты эскизов (oboznachenie+" КЭ")

Как правильно такое сорганизовать на тулките? Макросами + xStarter сделал, но на разных деталях(по сложности) нужны разные задержкт скрипта и не всегда все действия отрабатываются.

Поделиться сообщением


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

михаил, это ты? В пятницу выйду наверно, сделаю. Там делов на пару часов. Только задание по подробней пожалуйста приготовь. Что за тех и с чем его едят.

Поделиться сообщением


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

В WF3 пишу такую строку:

ProMessageDisplay(MSGFIL,"-Zakaz_msg");

 

При компиляции выходит ошибка:

1>d:\project_vs2005\ex1\ex1\ex1.cpp(2568) : error C2660: 'ProMessageDisplay' : function does not take 2 arguments

 

На WF5 все нормально откомпилилось и выполнилось.

 

Подводишь на функцию мышь, выходит:

ProError ProMessageDisplay(void).

 

Почему?

 

Поделиться сообщением


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

Сам разобрался.

 

Use the preprocessor definition PRO_USE_VAR_ARGS and PRO_USE_VAR_ARG.

Поделиться сообщением


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

Допустим я в чертеже выделил несколько размеров.

Что-то не могу разобратся как в Тулките записать их в массив   ProDimension *p_dims;

Ковыряю ProSelection.h, не могу понять как их закинуть в этот массив.

Вроде как, ларчик просто должен открываться.

Может кто сталкивался и есть кусок готового кода?

 

 


С вариантом когда выходит запрос на выделение вроде разобрался.

Этот вариант не очень устраивает.

Хочется заранее выделить, нажать кнопку макроса и кое-что сделать с текстом в этих размерах.

Поделиться сообщением


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

Приветствую.

Подскажите, пожалуйста, как добавить кнопки в ленту Creo 2.0? Желательно для VB. NET.

Поделиться сообщением


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

Я тут на досуге набросал пару функций :smile: (на C) :

 

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

post-1614-0-59509800-1392316752.jpg

post-1614-0-16691500-1392316759.jpg

drawing_date.txt

Поделиться сообщением


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

Приветствую.

Подскажите, пожалуйста, как добавить кнопки в ленту Creo 2.0? Желательно для VB. NET.

C:\Program Files\PTC\Creo 2.0\Common Files\M080\vbapi\vbug.pdf

C:\Program Files\PTC\Creo 2.0\Common Files\M080\vbapi\vbapi_examples\pfcCommandExamples.vb

Ищите в примере

'Add menu button
    '======================================================================
    'Function   :   addInputButton
    'Purpose    :   This function demonstrates the usage of UI functions to
    '               add a new button to ProE Windows Menu. This is 
    '               accessible to user only if part is present
    '======================================================================
    Public Sub addInputButton()
 
Почему то в примере не используется метод IpfcUICommand.Designate(), а он нужен. Обратите на это внимание в user's guide.

Поделиться сообщением


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

Добрый день, гуру Pro/TOOLKIT!

 

Подскажите, пожалуйста, как уменьшить размер получаемой DLL, написанной на С/С++ в Visual Studio.

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

 

Установка опции /MD в настройках проекта не помогает.

Поделиться сообщением


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

У меня так же на 64 битах получается, где-то 16 Мб.

На 32 битном по божески, где-то 1 Мб, тот же код.

На 64-х битном по любому код больше будет, чем на 32-х.

Но заметил, что размер dll в дальнейшем практически не растет, сколько кода там не пиши.

Мне кажется 17Мб это не критично для памяти  несколько Гб.

Поделиться сообщением


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

Возможно, будет разница в размере в зависимости от конфигурации Debug и Release.

Поделиться сообщением


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

Возможно, будет разница в размере в зависимости от конфигурации Debug и Release.

Конфигурация Relase и на 32 и на 64.

Поделиться сообщением


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

Да, забыл сказать что dll для 64 бит.

 

 

конфигурации Debug и Release.

 

Опции в любой конфигурации настраиваются. Те просто так переключаться с одной на другую, думаю, нет смысла. Нужно знать какую конкретно опцию изменить.

 

Насколько я понимаю, библиотека TOOLKIT линкуется статически к конечной dll. Те содержимое библиотеки TOOLKIT включается в dll.

 

У меня есть пример готовой dll, написанной для Pro/e. Ее размер всего 1,5 Мб. Правда она для 32 бит.

Поделиться сообщением


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

Еще раз обдумал свой вопрос. Похоже, что уменьшить размер для 64 бит DLL не возможно.

Те чтобы уменьшить размер, нужно подключать библиотеку TOOLKIT динамически. А для этого нужно, чтобы у TOOLKIT была динамически подключаемая библиотека - DLL.

 

Поскольку библиотеки TOOLKIT существует только в виде LIB (файлов) - для статической линковки, то и уменьшить размер не получится.

 

Вот такие выводы.

Поделиться сообщением


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

Разница в конфигурациях Release и Debug есть, я несколько раз встречал в литературе и здесь на форуме.

 

Вот, цитата с первого найденного источника:

объяснить пожалуйста разница между Debug И Release?
и почему после компиляции Debug->Dll fail 460kb а Release->17кб.

 

http://www.cyberforum.ru/cpp-beginners/thread663282.html

Изменено пользователем VIKT0R

Поделиться сообщением


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

Я согласен что разница есть. Но, теоретически, можно изменить настройки в этих конфигурациях так, что они будут абсолютно одинаковыми.

Для "стандартных" десктопны приложений и dll эти конфигурации настроены так, что в Release отключен вывод различной информации для отладки. По этому при компиляции на Release происходит уменьшение размера.

К сожалению, для TOOLKIT простой смены кофигурации оказалось недостаточно.

Разница в конфигурациях Release и Debug есть, я несколько раз встречал в литературе и здесь на форуме.

 

Вот, цитата с первого найденного источника:

объяснить пожалуйста разница между Debug И Release?
и почему после компиляции Debug->Dll fail 460kb а Release->17кб.

 

http://www.cyberforum.ru/cpp-beginners/thread663282.html

Поделиться сообщением


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

Делаю приложение по типу как у Solvera для вставки технических требований.

Текстовый блок получилось вставить и даже менять свойства текста.

                             //ProDtlnotetextSlantSet(note_text,15);
                            //ProDtlnotetextThicknessSet(note_text,1.0);
                            //ProDtlnotetextWidthSet(note_text,2.0);
                            //ProDtlnotetextHeightSet(note_text,14.20454545);
                           //ProDtlnotetextFontSet(note_text,L"Arial");
                          //ProDtlnotetextUlineSet (note_text,PRO_B_TRUE);
       //err = ProDtlnotedataAngleSet(note_data, 15.0);
        //ProDtlnotedataJustifSet(note_data, PRO_HORZJUST_CENTER, PRO_VERTJUST_MIDDLE);         
        //ProDtlnotedataReadonlySet(note_data,PRO_B_TRUE);

 

 

Только вот с одним свойством разобратся не могу, "Шаг строк" называется.

По умолчанию стоит 0,5. Хочу принудительно назначить ему значение 1,0.

Может поможет кто?

Поделиться сообщением


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

Делаю приложение по типу как у Solvera для вставки технических требований.

Текстовый блок получилось вставить и даже менять свойства текста.

                             //ProDtlnotetextSlantSet(note_text,15);

                            //ProDtlnotetextThicknessSet(note_text,1.0);

                            //ProDtlnotetextWidthSet(note_text,2.0);

                            //ProDtlnotetextHeightSet(note_text,14.20454545);

                           //ProDtlnotetextFontSet(note_text,L"Arial");

                          //ProDtlnotetextUlineSet (note_text,PRO_B_TRUE);

       //err = ProDtlnotedataAngleSet(note_data, 15.0);

        //ProDtlnotedataJustifSet(note_data, PRO_HORZJUST_CENTER, PRO_VERTJUST_MIDDLE);         

        //ProDtlnotedataReadonlySet(note_data,PRO_B_TRUE);

 

 

Только вот с одним свойством разобратся не могу, "Шаг строк" называется.

По умолчанию стоит 0,5. Хочу принудительно назначить ему значение 1,0.

Может поможет кто?

Попробуйте использовать опции чертежа.

Перед создание задать нужную опцию.

Создать заметку.

Затем вернуть обратно.

Поделиться сообщением


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

Спасибо. Я тоже подумал про опции. После праздников буду пробовать.

Поделиться сообщением


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

Чо-то не могу найти я этой опции в опциях чертежа.

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

Поделиться сообщением


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

Сделай макрос для задания опции.

Создай заметку.

Затем макрос обратно.

 

Toolkit

 

Drawing Setup
 
ProInputFileRead()
ProOutputFileWrite()
ProDrawingSetupOptionGet()
ProDrawingSetupOptionSet()
ProMdlDetailOptionGet()
ProMdlDetailOptionSet()

Поделиться сообщением


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

Таких функций у меня вообще нет:

ProMdlDetailOptionGet()
ProMdlDetailOptionSet()

WF5.

 

Мне не понятно какой параметр в настройках чертежа отвечает за опцию "Шаг строк", не вижу я его там.

Поделиться сообщением


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

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

Думаю, что нужно добавить заметку в буфер выделения (Selection Buffer), а затем запускать макрос.

 

PS: У вас случайно нет парочки картинок, как сделано у Solvera? Хотелось бы посмотреть.

Поделиться сообщением


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

Вот скриншот проги.


Там все просто, пользователь формирует тестовый блок из занесенных в базу шаблонов.

У них там сделана возможность вставлять заметку прямо в модель, а в чертеже показывать ее в виде например &TT в текстовой заметке. Можно напрямую в чертеж, как я хочу сейчас сделать.


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

 

 

//Вставить ТТ
int Insert_tt()
{
  ProMdl mdl1;
  ProModelitem p_modelitem1;
  ProMdldata mdldata1;
  ProError status;
  //берем данные текущей открытой модели
  status=ProMdlCurrentGet(&mdl1); 
  if (status!=PRO_TK_NO_ERROR) {return (status);} //выход из функции, если нет модели
  //берем данные модели
  p_modelitem1.owner=mdl1;
  ProMdlDataGet(mdl1,&mdldata1);
  if (mdldata1.type[0]=='D')
  {

    //чтение файла c техническими требованиями
    FILE *TT_file;
    wchar_t TT_filename[255];
    ProLine TT_text[100];
    ProLine wstr1;
    char str1[255];
    int i1;
    wcscpy(TT_filename,L"D:\\temp\\tt.txt");
    TT_file=fopen(ProWstringToString(str1,TT_filename),"rt");
    i1=0;
    while(!feof(TT_file))
    {
      fgetws(wstr1,255,TT_file);
      wcscpy(TT_text[i1],wstr1);
      i1++;
    }
    fclose(TT_file);

    ProDrawing drawing;
    ProDtlnote note; 
    ProDtlnoteline *note_lines;
    ProDtlnotedata note_data;
    ProError err;
    ProDtlattach location, *leaders = NULL;
    int status = 0, i, sheet, n_leaders;

    ProMdlCurrentGet((ProMdl*)&drawing);
    err = ProDtlnotedataAlloc (drawing, &note_data);

    //Позиция, куда вставлять ТТ
    ProVector location1;
    ProMouseButton mouse_button;
    err = ProMousePickGet (PRO_LEFT_BUTTON, &mouse_button,location1);
    err = ProDtlattachAlloc (PRO_DTLATTACHTYPE_FREE, NULL, location1, NULL, &location);
    err = ProDtlnotedataAttachmentSet (note_data, location);
    err = ProDtlattachFree (location);

    //Перенос строк в специальную структуру
    ProDtlnoteline note_line;
    int j, line_count = 0, n_texts;
    double widht;
    ProDtlnotetext *texts, note_text;
    err = ProArrayAlloc (0, sizeof (ProDtlnoteline), 1, (ProArray*)&note_lines);
    for (j = 0; j < i1; j++)
    {
      err = ProDtlnotelineAlloc (&note_line);
      err = ProDtlnotetextAlloc (&note_text);
      err = ProDtlnotetextStringSet (note_text, TT_text[j]);
      err = ProDtlnotelineTextAdd (note_line, note_text);
      err = ProDtlnotetextFree (note_text);
      err = ProArrayObjectAdd ((ProArray*)&note_lines, PRO_VALUE_UNUSED, 1, &note_line);
      err = ProDtlnotelineTextsCollect (note_line, &texts);
      err = ProDtlnotelineTextsSet (note_lines[line_count], texts);
      err = ProArraySizeGet ((ProArray)texts, &n_texts);
      for (i = 0; i < n_texts; i++)
        err = ProDtlnotetextFree (texts);
     err = ProArrayFree ((ProArray*)&texts);
     line_count++;
    }
    err = ProDtlnoteldataLinesSet (note_data, note_lines); 
    err = ProArrayFree ((ProArray*)&note_lines);

    err = ProDtlnotedataLeadersSet (note_data, NULL);
    ProDtlnotedataElbowlengthSet(note_data,PRO_B_TRUE,2.0);
    err = ProDtlnoteCreate (drawing, NULL, note_data, &note);
    err = ProDtlnoteShow (&note);



int id1=0;
ProDtlnoteDataGet (&note, NULL, PRODISPMODE_NUMERIC, &note_data);
ProDtlnotedataIdGet(note_data, &id1);

 

 

//---------------------------------------------------------------------------------------------

//А дальше ступор с выделением заметки, чо-то не могу допереть что делать?

//Я так понимаю надо получить modelitem этой заметки, дальнейшие действия в смутном представлении.

//---------------------------------------------------------------------------------------------

 

err = ProDtlnotedataFree (note_data);


//запуск макроса, который меняет шаг строк
ProMacroLoad(L"~ Command `ProCmdEditProperties` ;~ Select `note_text_asynch` `tab_main`1 `lay_style`;~ Activate `note_text_asynch` `chk_usedeflinespc`0 ;~ Update `note_text_asynch` `inp_linespc` `1`;~ Activate `note_text_asynch` `psh_ok`;");
}
return(0);
}

post-26163-0-00052500-1399365781_thumb.jpg

Поделиться сообщением


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

Терпение и труд все перетрут:

 

 

ProModelitem modelitem2;
err = ProModelitemInit(drawing, id1, PRO_NOTE, &modelitem2);
ProSelection p_selection1;
ProSelectionAlloc(NULL,&modelitem2,&p_selection1);
ProSelbufferSelectionAdd (p_selection1);

 

Вопрос исчерпан.

Поделиться сообщением


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

Терпение и труд все перетрут:

 

 

ProModelitem modelitem2;

err = ProModelitemInit(drawing, id1, PRO_NOTE, &modelitem2);

ProSelection p_selection1;

ProSelectionAlloc(NULL,&modelitem2,&p_selection1);

ProSelbufferSelectionAdd (p_selection1);

 

Вопрос исчерпан.

Мне кажется, можно в ProSelectionAlloc использовать переменную note (типа ProDtlnote) в качестве modelitem, так как по сути ProModelitem и ProDtlnote одна и та же структура

 

typedef struct pro_model_item

{

ProType type;

int id;

ProMdl owner;

} ProModelitem, ProGeomitem, ProExtobj, ProFeature, ProProcstep,

ProSimprep, ProExpldstate, ProLayer, ProDimension, ProDtlnote,

 

ps: Спасибо за картинку. У Солвера есть еще какие-нибудь интересные/полезные приложения?

Поделиться сообщением


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

извини. если что лишнего наваял. просто Я не прогер. а всего лишь конструктор. спасибо за буфер подсказал.

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

интерфейс примитивный у этой проги был. не дружественный. потому и пришлось свою делать.

Поделиться сообщением


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

извини. если что лишнего наваял.

Ну что вы! Я же так для общего развития своими мыслями поделился. Ни в коем случае не хотел "носом тыкать". Разобраться в TOOLKIT на С достойно большого уважения, на мой взгляд.

Удачи!

Поделиться сообщением


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

Хочу вычленить все аннотации в  корне дерева модели в отдельный массив аннотаций, получилось следующее.

Не пойму как отсеять все внутренние и оставить только те которые в корне, не нашел нужного примера или может плохо искал.

Может подскажет кто?

 

//Действие функции, вызываемое при посещении фичеров
ProError UsrNoteAction(ProNote *note,ProError filter_status,ProAppData data)
{

    //сюда вот надо вставить какой-то фильтр

   
    ProArrayObjectAdd((ProArray*)data, -1, 1, note);
    return(PRO_TK_NO_ERROR);
}

//Функция для сканирования дерева и формирования массива аннотаций 

int UsrNotesCollect(ProMdl mdl1,ProNote **notes)
{
    //Выделяем память
    ProArrayAlloc(0, sizeof(ProNote), 1, (ProArray*)notes);
    //Все аннотации в дереве
   if (ProMdlNoteVisit(mdl1,UsrNoteAction,NULL,notes)!=PRO_TK_NO_ERROR)
   {
      ProArrayFree((ProArray*)notes);
      return(0);
   }
   return(1);
}

//Все аннотации в модели (в корне дерева)

int all_note()
{
    ProMdl mdl1;
    ProError status;
    ProNote *notes;
    UsrNotesCollect(mdl1,&notes);
    int n_notes;
    ProArraySizeGet(notes,&n_notes);
    MessageInt(n_notes);

 

    return(0);

}

Поделиться сообщением


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

Вопрос снимаю, и так только с корня берет ноты.

Поделиться сообщением


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

Пытаюсь через тулкит просканировать все заметки в чертеже и найти ту в которой есть запись {0:&tt}.

 

wchar_t wstr1[255;

ProDtlnotetextStringGet(dtltexts[0],wstr1);

 

Почему он записывает в строковую переменную wstr1 не {0:&tt}, а реальное значение первой строки в ТТ.

Как уйти от этого, чо-то не могу допереть?

Поделиться сообщением


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

Полный текст подпрограммы:

 

//сканруем все заметки в чертеже и определяем наличие заметки {0:&tt}
ProDtlnote *dtlnotes;
ProArrayAlloc(0,sizeof(ProDtlnote),1,(ProArray*)&dtlnotes);
ProDrawingDtlnoteVisit(drawing1,NULL,1,UsrDtlnoteAction,NULL,&dtlnotes);
int n_dtlnotes,nomer_dtlnote=255;
int flag_dtlnote=0;
ProDtlnotedata dtlnote_data;
ProDtlnoteline *dtllines;
ProDtlnotetext *dtltexts;
wchar_t wstr1[255];
status=ProDtlnotedataAlloc(drawing1,&dtlnote_data);
ProArraySizeGet(dtlnotes,&n_dtlnotes);
for (int i=0;i<n_dtlnotes;i++)
{
ProDtlnoteDataGet(&dtlnotes,NULL,PRODISPMODE_NUMERIC,&dtlnote_data);
ProDtlnotedataLinesCollect(dtlnote_data,&dtllines);
ProDtlnotelineTextsCollect(dtllines[0],&dtltexts);
ProDtlnotetextStringGet(dtltexts[0],wstr1);
if (wstr1[0]=='{') {MessageWstr(wstr1);}
}



ProArrayFree((ProArray*)&notes);
ProArrayFree((ProArray*)&dtlnotes);
ProDtlnotedataFree(dtlnote_data);
ProArrayFree((ProArray*)&dtllines);
ProArrayFree((ProArray*)&dtltexts);
ProDwgSheetRegenerate(drawing1,1);
}

Поделиться сообщением


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

Сам кажись разобрался

 

ProDtlnoteDataGet(&dtlnotes,NULL,PRODISPMODE_NUMERIC,&dtlnote_data);

 

PRODISPMODE_SYMBOLIC

Поделиться сообщением


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

Пытаюсь написать макрос на тулките, который изменяет имена выносных видов и сечений по ЕСКД.

Добустим было:

&xsec_name

{1:&view_scale}

 

Надо: &xsec_name (&view_scale)

 

Написал следующее:

//Имя вида по ЕСКД

int View_name1()

{

ProMdl mdl1;

ProModelitem p_modelitem1;

ProMdldata mdldata1;

ProError status;

//берем данные текущей открытой модели

status=ProMdlCurrentGet(&mdl1);

if (status!=PRO_TK_NO_ERROR) {return (status);} //выход из функции, если нет модели

//берем данные модели

p_modelitem1.owner=mdl1;

ProMdlDataGet(mdl1,&mdldata1);

if (mdldata1.type[0]=='D') {

ProDrawing drawing1;

ProMdlCurrentGet((ProMdl*)&drawing1);

p_modelitem1.type=PRO_DRAWING;

//сканруем все заметки в чертеже и определяем наличие заметок с именами видов, котрые надо привести к виду по ЕСКД

ProDtlnote *dtlnotes;

ProArrayAlloc(0,sizeof(ProDtlnote),1,(ProArray*)&dtlnotes);

ProDrawingDtlnoteVisit(drawing1,NULL,1,UsrDtlnoteAction,NULL,&dtlnotes);

int n_dtlnotes,n_dtllines,nomer_dtlnote;

ProDtlnotedata dtlnote_data;

ProDtlnoteline *dtllines; ProDtlnotetext *dtltexts;

wchar_t wstr1[255];

char str1[255];

status=ProDtlnotedataAlloc(drawing1,&dtlnote_data);

ProArraySizeGet(dtlnotes,&n_dtlnotes);

for (int i=0;i<n_dtlnotes;i++)

{

ProDtlnoteDataGet(&dtlnotes,NULL,PRODISPMODE_SYMBOLIC,&dtlnote_data);

ProDtlnotedataLinesCollect(dtlnote_data,&dtllines);

ProArraySizeGet(dtllines,&n_dtllines);

ProDtlnotelineTextsCollect(dtllines[0],&dtltexts);

ProDtlnotetextStringGet(dtltexts[0],wstr1);

if ((wcsstr(wstr1,L"xsec_name")!=NULL)&&(n_dtllines>1))

{

int n_texts;

ProDtlnotetext *texts,dtlnote_text2;

ProDtlnoteline *dtllines2;

ProDtlnoteline note_line;

ProArrayAlloc(0,sizeof(ProDtlnoteline),1,(ProArray*)&dtllines2);

ProDtlnotelineAlloc(&note_line);

ProDtlnotetextAlloc(&dtlnote_text2);

ProDtlnotetextStringSet(dtlnote_text2,L"&xsec_name (&view_scale)");

ProDtlnotelineTextAdd(note_line,dtlnote_text2);

ProDtlnotetextFree(dtlnote_text2);

ProArrayObjectAdd((ProArray*)&dtllines2,PRO_VALUE_UNUSED,1,&note_line);

ProDtlnotelineTextsCollect(note_line,&texts);

ProDtlnotelineTextsSet(dtllines2[0],texts);

ProArraySizeGet((ProArray)texts,&n_texts);

for (int j=0;j<n_texts;j++) ProDtlnotetextFree(texts[j]);

ProArrayFree((ProArray*)&texts);

ProDtlnoteldataLinesSet(dtlnote_data,dtllines2);

ProDtlnoteErase(&dtlnotes);

ProDtlnoteModify(&dtlnotes,NULL,dtlnote_data);

ProDtlnoteShow(&dtlnotes);

}

}

}

return(0);

}

 

 

Чо-то ничего не изменяется. Когда делаешь с обычными заметками похожие махинации все нормально прокатывает, а с заметкой с именем вида никак чо-то не получается.

Может кто что посоветует?

Поделиться сообщением


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

Я так понимаю, что данным кодом Вы меняете текст в заметки на &xsec_name (&view_scale)?

Мне кажется, что этого не достаточно.

Насколько я помню, у заметок с именем вида нужно отключить опцию  Перенос текста и изменить ее размер, чтобы текст влазил в одну строку. Думаю, что это и надо пытаться делать в программе/макросе.

Поделиться сообщением


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

Для начала, я бы попробовал добавить обратные слэши:

ProDtlnotetextStringSet(dtlnote_text2,L"\&xsec_name \(\&view_scale\)");

Поделиться сообщением


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

Для начала, я бы попробовал добавить обратные слэши:

ProDtlnotetextStringSet(dtlnote_text2,L"\&xsec_name \(\&view_scale\)");

Что-то это не проканало.

Поделиться сообщением


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

Вот что написано про эти параметры:

 

&view_name
Displays a drawing label indicating the name of the view. You
cannot use this parameter in a drawing note. Pro/ENGINEER
creates it with a view and places it in notes automatically. You can
modify its value, but you cannot call it out in another note.

 

Говорят что изменить можно, но нельзя использовать в других заметках.

Но я же получается хочу изменить в той же заметке.

Поиск в гуголе тоже чо-то пока ничего не дал.

 

Попробую покопать в этом направлении пока:

Насколько я помню, у заметок с именем вида нужно отключить опцию Перенос текста и изменить ее размер, чтобы текст влазил в одну строку. Думаю, что это и надо пытаться делать в программе/макросе.

Но что-то мне подсказывает, что это тоже тупиковый вариант. Так и придется похоже делать стандартными макросами через ProMacroLoad, но таким макаром не удасться заменить все заметки по всему черетжу одновременно и без предварительного выделения их. Команда ProMacroLoad почему то срабатывает в самом конце тулкитовской функции, в цикле не получилось ее использовать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Насколько я помню, у заметок с именем вида нужно отключить опцию Перенос текста

 

 

Что это за опция такая, где искать?

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

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

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



  • Реклама

  • Сообщения

    • BooLean
      Добрый день. Картина такова: имеется домашний ПК под Win10x64 и университетский кластер под Samba. Доступ к кластеру осуществляется посредством VPN (для прохода в универскую сеть) и SSH-клиента PuTTy, или, для большего удобства, WINSCP (для самого кластера).  Задача в следующем: использовать кластер для вычислений в ANSYS CFX на домашнем ПК посредством мощностей кластера через ANSYS RSM в реальном времени. Вопрос: как это сделать правильно? Полагаю, простой установкой RSM на кластер и связкой оного с домашним клиентом дело не кончится?
    • muxa13
      Всё так, Компас не учитывает, что материал подвергся деформации, и заготовка нужна больше... 
    • Ветерок
      Вообще для получения разверток  заготовок всяких сложных штампованных вещей, есть FastBlank и его приложения для разных CADов. На приведенных картинках поверхности, а не листовые детали. Поверхности Крео тоже развернет какие угодно. Двоякой кривизны может даже развернуть по-разному.
    • Борман
      @hr4d Не хмурьтесь.. Я тоже задавался этим же вопросом. Это перечень не пользователей программы, а заказчиков расчетов. Ну типа такая шутка разработчика. А самой программой, видимо, никто не пользуется.  
    • Skinwalker
      Ой, да ладно, кто-то тут не так давно истерики закатывал по неправильному отображению линий перехода и что "не по ЕСКД"...тоже бедный простой ференги? Просто если почитать whatsnews любого года за 5 лет последних, какие-то свистоперделки в микроскопических дозах 
    • SAPRonOff
      конкретно этот пример не развернулся, материал тоже пока не учитывается, ТСистемы рассказывали, что это только в перспективе. Единственный вариант готовить минисапр, как на видео выше. Если все линейчатое - то там площадь развертки будет точно такая же как до развертки. Если что-то мягко говоря посложнее, то уже используется итерационный алгоритм вычисления разверток
    • Skinwalker
      Минус в другом, КМК: при не слишком качественном копировании или отправке по факсу вся серая заливка превратится в черную кляксу на поле чертежа.
    • Ветерок
      Крео "развернет", но по-своему. Он просто игнорирует штампованые элементы, оставляя вместо них плоскую грань. Вероятно, Крео считает, что выштамповки получаются путем пластической деформации (когда изменение длины идет с утоньшением материала) и на форму заготовки не влияют. Как это реализуется физически на самом деле я не знаю. С такими вещами не работал.   А как это реализовано во Флексе? Он делает развертку, отличающуюся по габаритам от плоской части детали?
    • Skinwalker
    • ws256
      Да на любой опытный завод можно. Нас научный руководитель распределял, дальше приходишь в конструкторский отдел, повезет если дадут материалов на диплом. Мне досталось несколько листов чертежей лопастной мешалки кристаллизатора, а дальше сам, на модернизацию. А обучать должны были Вас в вузе.