Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: KrissKross от 15.02.17, 14:15:43

Название: Переменные - не обновляется поле "Комментарий"
Отправлено: KrissKross от 15.02.17, 14:15:43
Странное дело
меняю поле "Комментарий"
как   через API7 - Variable7
так и через API5 - ksVariable

1. Отладчик видит изменение
2. Повторный запуск чтения переменных видит изменения

а в окне Компас - старое значение
(сохранение и повторное открытие файла - не помогает)

Мистика
черт побери
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Sabahs от 21.04.17, 14:02:04
Ответ тут http://forum.ascon.ru/index.php/topic,29283.msg237274.html#msg237274
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: ded_yagyn от 26.01.18, 12:30:26
А как работать с переменными в 2D документе?
Программно добавлять новые, удалять и менять комментарий.
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Mary от 13.04.18, 12:01:11
В итоге по программному изменению переменных - я правильно понимаю, что  для компаса V16 нет никакой возможности работать с не-внешними переменными?
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: ТрындецЪ от 13.04.18, 12:04:14
Цитата: Mary от 13.04.18, 12:01:11
В итоге по программному изменению переменных - я правильно понимаю, что  для компаса V16 нет никакой возможности работать с не-внешними переменными?
Работать с пользовательскими переменными можно через IFeature7.
Чтобы добраться до переменных эскизов, операций и т.п., нужно "подлазить" через интерфейс IModelObject конкретного объекта модели (эскиза, операции и т.п.)
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Sabahs от 13.04.18, 12:08:29
Интерфейс IVariable7.
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Mary от 13.04.18, 13:18:36
IVariable7 - в справке нахожу только для 2D, как к сборке применить?

с  IFeature7 добраться-то до переменных получилось -  и даже с записью ок, не ругается и даже куда-то записывает... только в приложении не отображается(

def SetNewLeng(event):
ind = int(COUNT.get()) #индекс компонента в выборке
i = listOfIndex[ind]    #индекс компонента в дереве сборки

NewLeng = float(EntryL.get())
objForSelect = topPart.Parts.Part(listOfIndex[ind])
print objForSelect

IFeature7 = objForSelect._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IFeature7'], pythoncom.IID_IDispatch)
IFeature7 = KAPI7.IFeature7 (IFeature7)
Variable = IFeature7.Variable(True, True, 0)
Variable.Value = NewLeng
print Variable

doc3D.RebuildDocument


IVariable7 -
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: ТрындецЪ от 13.04.18, 13:25:39
objForSelect.Update()
objForSelect.RebuildModel(True)
doc3D.RebuildDocument()
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Mary от 13.04.18, 14:13:01
не работает( - так же записывается куда-то.
у меня правда была очень высока вероятность накосячить по дороге..  буду признательна за ревизию - файлы во вложении
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: ТрындецЪ от 13.04.18, 14:32:41
Цитата: Mary от 13.04.18, 14:13:01
...буду признательна за ревизию - файлы во вложении
Алгоритм работы опишите, не пойму что Вы пытаетесь получить.
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Mary от 13.04.18, 15:13:30
Пока записывала алгоритм нашла в сдк ответ на вопрос почему не работает  -  свойство доступно только для чтения.

Так что можете посоветовать другой подход?
Как записать новое значение в переменную компонента сборки, не делая соответствующей внешней переменной?

Задача в целом: есть детали с длинной заданной внешней переменной, включаю их в сборку, соответственно редактирую длину в окне переменных. Но когда сборка становится большой, уже сложновато их откапывать и соотносить (ведь навигации в окне переменных нет), поэтому делаю формочку где списком выведены только детали с переменной длиной. Выбираю строку - деталь подсвечивается в графическом окне,  в entry на моей форме выводится значение длины для редактирования.

по алгоритму:
в основном вопрос к функции  SetNewLeng - пытаюсь  значение из  поля ввода вписать в значение переменной компонента:
- определить индекс компонента в сборке
- прочитать из поля Entry новое значение
- получаю ссылку на компонент через Parts.Part
- получаю ссылку на переменную и ... пытаюсь ее записать.  :%:

в остальном работа программки устраивает, файлик приложила - вдруг есть еще какая хитрая настройка
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: ТрындецЪ от 13.04.18, 15:19:47
Не работает, потому что Вы получали интерфейс переменной в источнике (файле детали), а не компоненте сборки.
Нужно так:
Variable = IFeature7.Variable(True, False, 0)
В источник записывалось новое значение, но т.к. Update источника не было, то изменения не сохранялись.
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: Mary от 13.04.18, 15:38:39
Заработало! теперь не понимаю что же тогда записывалось, но работает)
Спасибо, очень выручили!
Название: Re: Переменные - не обновляется поле "Комментарий"
Отправлено: ТрындецЪ от 13.04.18, 15:44:24
Цитата: Mary от 13.04.18, 15:38:39
...теперь не понимаю что же тогда записывалось...
Цитата: ТрындецЪ от 13.04.18, 15:19:47
В источник записывалось новое значение, но т.к. Update источника не было, то изменения не сохранялись.
Чтобы Update() источника провести, нужно было бы файл модели открывать, получать от его документа IPart7 = doc3D.TopPart и его обновлять и перестраивать. По-моему, как-то так.