Обновление материала в основной надписи

Автор freestyler, 14.04.26, 11:54:52

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

freestyler

Коллеги, нужна помощь!

Сделал плагин, заполняющий материал в модели. При этом при первом заполнении материал в основной надписи чертежа обновляется, а при последующих (допустим, понял что выбрал не тот материал и перевыбираю) - не обновляется пока в Компасе не переключусь на модель и обратно на чертеж. Что не так делаю?
     IKompasDocument3D doc3d7 = application7.Documents.Open("C:\Doc.m3d", true, false) as IKompasDocument3D; //Открываю модель
     IKompasDocument2D doc2d7 = application7.Documents.Open("C:\Doc.cdw", true, false) as IKompasDocument2D; //Открываю чертеж
     
     //Где-то в другой части кода выбрал материал "Сталь1" и вношу его в модель
     doc3d7.TopPart.SetMaterial("Сталь1", 1000); //Вношу материал в модель
     doc3d7.TopPart.Update(); //Обновляю модель
     doc3d7.Save(); //Сохраняю модель

     doc2d7.LayoutSheets[0]?.Stamp?.Update(); //Получаю штамп на нулевом листе (если таковой не null) и обновляю его
     ((IKompasDocument2D1)doc2d7).RebuildDocument(); //Перестраиваю чертеж
     doc2d7.Save(); //Сохраняю чертеж
     //Сейчас основная надпись сама обновилась и там отображается "Сталь1"

     //Понял, что выбрал не то, перевыбрал материал "Сталь2" и вношу его в модель
     doc3d7.TopPart.SetMaterial("Сталь2", 1000); //Вношу материал в модель
     doc3d7.TopPart.Update(); //Обновляю модель
     doc3d7.Save(); //Сохраняю модель

     doc2d7.LayoutSheets[0]?.Stamp?.Update();//Получаю штамп на нулевом листе (если таковой не null) и обновляю его
     ((IKompasDocument2D1)doc2d7).RebuildDocument(); //Перестраиваю чертеж
     doc2d7.Save(); //Сохраняю чертеж
     //В основной надписи осталось "Сталь1" и будет там пока в Компасе не переключусь на модель и обратно на чертеж, после этого Компас выдаст запрос "Модель обновлена, обновить ли чертеж?" и появится "Сталь2"

Gruden

Так Вы напротив каждой строчки кода напишите, что она делает и в ручную сделайте в Компасе, всё встанет на свои места.

freestyler

Цитата: Gruden от 14.04.26, 12:06:29Так Вы напротив каждой строчки кода напишите, что она делает
Добавил в первом посте

Цитата: Gruden от 14.04.26, 12:06:29в ручную сделайте в Компасе, всё встанет на свои места.
В ручную не повторить, я же вручную материал из модели задаю, т.е. окно модели активно. А здесь проблема именно в том что пока туда-сюда не переключишься, чертеж не обновится. Причем первый раз срабатывает, а последующие - нет

lavgirb

Цитата: freestyler от 14.04.26, 11:54:52doc3d7.TopPart.Update(); //Обновляю модель
После назначения материала перестроить модель с помощью RebuildDocument не пробовали?

freestyler

Цитата: lavgirb от 14.04.26, 12:22:48После назначения материала перестроить модель с помощью RebuildDocument не пробовали?

Попробовал, не помогло (

freestyler

Разобрался. В модели чертеж не был указан в "Управление связанными чертежами".
Что загадочно: первый раз срабатывало, а последующие - нет. Как так..

И что самое обидное, программно исправить это не могу: именно в моём 22-м компасе не работает ObjectAttachedDocuments :-(

lavgirb


freestyler

Цитата: lavgirb от 14.04.26, 12:45:31Можете код привести?


     doc3d7.TopPart.SetMaterial("Сталь1", 1000); //Вношу материал в модель
     doc3d7.TopPart.Update(); //Обновляю модель
     doc3d7.RebuildDocument(); //Перестраиваю
     doc3d7.Save(); //Сохраняю модель


Gruden

Цитата: freestyler от 14.04.26, 12:42:12Разобрался. В модели чертеж не был указан в "Управление связанными чертежами".
Что загадочно: первый раз срабатывало, а последующие - нет. Как так..

И что самое обидное, программно исправить это не могу: именно в моём 22-м компасе не работает ObjectAttachedDocuments :-(
https://forum.ascon.ru/index.php?topic=39534.msg336534#msg336534

freestyler

Цитата: Gruden от 14.04.26, 12:48:17https://forum.ascon.ru/index.php?topic=39534.msg336534#msg336534

Да, буквально вчера в данном вопросе разбирался и до дыр зачитал эту тему.
Вот оттуда резюме:

Цитата: KrissKross от 04.01.25, 10:58:27UU
Благодарю за участие

Значит сделаем заключение - для потомков

Привязывание чертежа к 3Д модели через

productDataManager.ObjectAttachedDocuments[propertyKeeper] = "Чертеж.cdw"
В 22 версии Компаса - не работает

в 23 - работает

Gruden

Ошибка API.
Можно в СТП написать, может поправят, последний шанс пока версия ещё на ТП.

freestyler

Цитата: Gruden от 14.04.26, 12:54:38Ошибка API.
Можно в СТП написать, может поправят, последний шанс пока версия ещё на ТП.
Ох, с трудом верится. Если бы не работало в 22 и выше, то да. А раз в 23 уже исправлено никто не будет заморачиваться...

Gruden

Цитата: freestyler от 14.04.26, 12:57:45Ох, с трудом верится. Если бы не работало в 22 и выше, то да. А раз в 23 уже исправлено никто не будет заморачиваться...
А это не важно, Вы клиент, Вы деньги заплатили и обновляться на 23 версию, Вас заставлять не должны.
Можете потребовать лицензию на 23 версию в качестве компенсации, за нанесённый моральный ущерб, либо исправление версии, либо возврат денег за неработающий функционал.

lavgirb

TopPart беру не от IKompasDocument3D, а от PartDocument
После назначения материала и перестроения активирую чертеж. Он требует перестроения.
Разрешаю. Материал в основной надписи меняется.

Связанность чертежа не имеет значения для назначения и отображения материала в основной надписи.
+ Благодарностей: 1

freestyler

Цитата: lavgirb от 14.04.26, 13:07:05TopPart беру не от IKompasDocument3D, а от PartDocument

Попробовал, не помогло (

Цитата: lavgirb от 14.04.26, 13:07:05После назначения материала и перестроения активирую чертеж. Он требует перестроения.
Разрешаю. Материал в основной надписи меняется.

А вот тут Вы меня навели на верную мысль, благодарю!
Рабочий код в итоге получился такой. Отключаем уведомления, активируем модель, активируем чертеж, всё обновляем и сохраняем. Корявенько, но пусть это на совести Аскона окажется))
                        application7.HideMessage = ksHideMessageEnum.ksHideMessageYes;
                        doc3d7.Active = true;
                        doc2d7.Active = true;
                        doc2d7.LayoutSheets[0]?.Stamp?.Update();
                        ((IKompasDocument2D1)doc2d7).RebuildDocument();
                        doc2d7.Save();
                        application7.HideMessage = ksHideMessageEnum.ksShowMessage;

freestyler

Цитата: Gruden от 14.04.26, 13:06:11А это не важно, Вы клиент, Вы деньги заплатили и обновляться на 23 версию, Вас заставлять не должны.
Можете потребовать лицензию на 23 версию в качестве компенсации, за нанесённый моральный ущерб, либо исправление версии, либо возврат денег за неработающий функционал.

Убедили, написал обращение, посмотрим что ответят )

lavgirb

Цитата: freestyler от 14.04.26, 15:07:21Рабочий код в итоге получился такой.
doc2d7.LayoutSheets[0]?.Stamp?.Update();
Думаю, что штамп специально можно не обновлять.
Вы же не штамп редактируете. RebuildDocument должно быть достаточно.

А КОМПАС какой версии?

Gruden


lavgirb

Цитата: Gruden от 14.04.26, 16:34:27Читать, нужно.
Ну так и читайте. Не запрещено.
Указаны две версии и обе в постах не про материал.
Общественный модератор? )

freestyler

Цитата: lavgirb от 14.04.26, 16:27:26Думаю, что штамп специально можно не обновлять.
Вы же не штамп редактируете. RebuildDocument должно быть достаточно.

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

Цитата: lavgirb от 14.04.26, 16:27:26А КОМПАС какой версии?

22.0.10.1463