Задать материал из МиС для деталей в сборке

Автор once, 26.09.18, 18:10:24

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

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

once

26.09.18, 18:10:24 Последнее редактирование: 26.09.18, 18:58:51 от once
Как установить материал для детали, выбрав его из справочника? Я видел метод SetMaterial, но там можно задать любое наименование материала и любую плотность, а требуется выбрать материал из МиСа. Тем более после такой установки (SetMaterial) этот материал при получении информации не попадет в Лоцман, что необходимо. Какие есть методы API Компаса для установки материала из справочника?

Вират Лакх

SetMaterial - нужен API Компас, а материал из МиС - нужен API МиС (см. вложение).
Сначала надо, подключившись к Материалам, получить от МиС значения интересующих вас атрибутов выбранного объекта, а потом это вносить в СетМатериал, не забывая после этого сделать iPart7.Update()
Как на питоне подключаться к МиС и получать ClassID и ObjectID объекта:
http://forum.ascon.ru/index.php/topic,30432.0.html « Ответ #4 : 20.09.18, 14:17:40 »
Вот получение наименования, плотности и стиля штриховки материала:
http://forum.ascon.ru/index.php/topic,28147.0.html « Ответ #2 : 21.09.18, 08:36:19 »
Это подключение и получение свойств материала есть в питонной программе Обозначение компонентов v2.5, функция def mis():
http://forum.ascon.ru/index.php/topic,30640.280.html « Ответ #285 : 24.09.18, 12:25:29 »
Потом в процедуре def past_prop() происходит SetMaterial(material, density) с последующим Update()
+ Благодарностей: 1

once

Вы все правильно описываете, да, есть одно, про которое я написал. После установки материала методом SetMaterial, это материал потом не приходит в Лоцман, когда получаешь информацию из модели, а это необходимо. Проверьте сами.

Вират Лакх

Лоцман я никак не проверю, т.к. у меня его нет. Вы пробовали после этого перестроить модель и/или сохранить её?

once


once

Так это реально или нет? Кто-нибудь знает?

plscomeback


once

Это Вы читайте внимательнее, что спрашивают. Я задавал вопрос по API компаса.

Когда Вы используете SetMaterial, то материал меняется у модели, а Лоцман возможно читает из свойств документа.
PS. Это так догадка, т.к. Лоцмана у меня нет и как он работает понятия не имею.

once

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

once

if (prt.SetMaterial(designation, density) && prt.Update())
                    {
                        IPropertyMng pmng = _kompasApi7 as IPropertyMng;
                        _Property materialProp = null;                       
                        foreach (_Property prop in pmng.GetProperties(null))
                        {
                            if (prop.Name == "Материал")
                            {
                                materialProp = prop;
                                break;                               
                            }                           
                        }
                        bool fromSource;
                        IPropertyKeeper propertyKeeper = prt as IPropertyKeeper;
                        // если материал ни разу не выбирали, то дополнительное хранилище свойств нужно создавать
                        IUserDataStorage dataStorage = propertyKeeper.GetPropertyAdditionalStorage(materialProp, true, out fromSource);                       
                        // после задания материала методом SetMaterial своойство "Location" в дополнительном хранилище свойств нужно создавать заново
                        dataStorage.AddObject("", location, "Location");
                    }
+ Благодарностей: 1

once

Образовался еще один вопрос. Если получать материал через свойство IPart7.Material, то в его названии могут присутствовать спецсимволы. Как получить название материала без этих спецсимволов, такое как отображает сам Компас в свойствах модели в параметрах МЦХ?

Вират Лакх

17.10.18, 03:28:05 #12 Последнее редактирование: 17.10.18, 06:04:20 от Вират Лакх
От этого мцх или другого свойства без спецсимволов его и получать. По API компаса ищите, через что можно получить Material, тот же мцх. Мне он попадался раньше. Или на худой конец из полученной строки вырезать ненужное.

При присвоении материала из МиС компас сам не создает Location (Материал ID) в IPropertyMng / IPropertyKeeper.

once

IMassInertialParam7.Material тоже со спецзнаками :(. Походу придется самому их вырезать.

ТрындецЪ

Если материал прописывается с дробью, то в каком виде Вы желаете его получать?

once