Переменные в сопряжении

Автор Mary, 13.06.18, 13:53:52

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

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

Mary

13.06.18, 13:53:52 Последнее редактирование: 13.06.18, 14:43:04 от Mary
День добрый.

Программно создаю файл сборки, заполняю деталями, создаю сопряжения, внешнюю переменную

Как  задать для  сопряжения  выражение с участием моей внешней переменной (см. вложение)? upd: программно
Подскажите пожалуйста, никак не могу найти  подход

KiDim

В поле выражение для переменной v18 вставьте имя Вашей переменной t. Все должно получиться.

Mary


Mary

Цитата: KiDim от 13.06.18, 14:36:16
В поле выражение для переменной v18 вставьте имя Вашей переменной t. Все должно получиться.

как же получить указатель на это поле? какой интерфейс использовать?

KiDim

Извините, я не понял, что Вам нужно это сделать программно. :-) Тут я пас, ничего подсказать не могу.

ТрындецЪ

Цитата: Mary от 13.06.18, 14:46:31
как же получить указатель на это поле? какой интерфейс использовать?
IVariable7.Expression - свойство позволяет устанавливать и получать выражение
IVariable7 получить через свойство Variable(...) интерфейса IFeature7, приведя к последнему интерфейс конкретного сопряжения.
Думаю, как-то так нужно подлазить.

Mary

ЦитироватьIVariable7 получить через свойство Variable(...) интерфейса IFeature7

Variables от IFeature7 у меня собирает только переменные собственно по деталям (там фиксировать и исключить из расчета судя по описанию)
для TopPart - только  созданную внешнюю

        #получение переменных для деталей в сборке   
        parts = topPart.Parts
        for part in parts:
            print part.Name
            IFeature7 = part._oleobj_.QueryInterface(KAPI7.NamesToIIDMap['IFeature7'], pythoncom.IID_IDispatch)
            IFeature7 = KAPI7.IFeature7 (IFeature7)
            Variables = IFeature7.Variables(False, False)
            for var in Variables:
                var.Note= 'komment'
                print var.Name
            part.Update()


Цитировать
приведя к последнему интерфейс конкретного сопряжения.

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

ТрындецЪ

Преобразовать интерфейс объекта из API5 в API7 через метод ksTransferInterface.
Привести интерфейс сопряжения к IFeature7:
IFeature7 = KAPI7.IFeature7 (интерфейс_сопряжения_в_API7)


Mary

как применить ksTransferInterface?
нужно еще что-то подключить?

MateConstraintCollection7 = ksTransferInterface(MateConstraintCollection5,2,0)
получаю ошибку
NameError: name 'ksTransferInterface' is not defined

Или от какого типа?

        MateConstraintCollection5 = iDoc3D_sb.GetRequestInfo(iDoc3D_sb.GetPart(1) ).GetMateConstraintCollection()
        MateConstraintCollection7 = ???.ksTransferInterface(MateConstraintCollection5,2,0)

перебор разных вариантов (KompasObject, IApplication,...) результата не дал, только ошибку
AttributeError: '<Kompas10API5.KompasObject instance at 0x100564552>' object has no attribute 'ksTransferInterface'

ТрындецЪ

MateConstraintCollection7 = KompasObject.TransferInterface( MateConstraintCollection5, 2, 0 )

Mary

запускается, но  возвращает None

В API7, есть сопряжения, IMateConstraints3D - контейнер, IMateConstraint3D - сопряжение, есть дочерние интерфейсы по типу сопряжения.

Mary

А где про них можно посмотреть? в  справке сдк  ни поиском не нахожу, ни в содержании

В SDK.
PS. Раньше, SDK была лучше, ниже картинка из V9.
+ Благодарностей: 1

Mary

у меня 16 компас, есть ли шанс, что IMateConstraints3D  будет работать? есть ли смысл описание от 18 искать?

ТрындецЪ


В V16, работать не будет, т.к. появился в v17.

Mary

Итого - в V16 мою задачку не решить? =(
В любом случае спасибо за участие

ТрындецЪ

Цитата: Sabahs от 14.06.18, 11:56:31
В V16, работать не будет, т.к. появился в v17.
В dll К16.1 есть коллекция.
Не пойму, как применить.
iMateConstraints3D получаю от компонента сборки iPart7
iMateConstraint3D = iMateConstraints3D.Add(constants.mc_Distance) - возврaщает "None"