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

Профессиональные вопросы => Программирование приложений => Тема начата: once от 26.09.18, 18:10:24

Название: Задать материал из МиС для деталей в сборке
Отправлено: once от 26.09.18, 18:10:24
Как установить материал для детали, выбрав его из справочника? Я видел метод SetMaterial, но там можно задать любое наименование материала и любую плотность, а требуется выбрать материал из МиСа. Тем более после такой установки (SetMaterial) этот материал при получении информации не попадет в Лоцман, что необходимо. Какие есть методы API Компаса для установки материала из справочника?
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: Вират Лакх от 26.09.18, 21:19:54
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()
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 27.09.18, 21:07:32
Вы все правильно описываете, да, есть одно, про которое я написал. После установки материала методом SetMaterial, это материал потом не приходит в Лоцман, когда получаешь информацию из модели, а это необходимо. Проверьте сами.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: Вират Лакх от 28.09.18, 03:19:12
Лоцман я никак не проверю, т.к. у меня его нет. Вы пробовали после этого перестроить модель и/или сохранить её?
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 28.09.18, 06:11:10
Конечно, и update делал, и сохранял.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 28.09.18, 18:19:45
Так это реально или нет? Кто-нибудь знает?
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: plscomeback от 30.09.18, 16:14:46
читайте api мис, там все должно быть
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 05.10.18, 14:00:52
Это Вы читайте внимательнее, что спрашивают. Я задавал вопрос по API компаса.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: Sabahs от 05.10.18, 14:20:12
Когда Вы используете SetMaterial, то материал меняется у модели, а Лоцман возможно читает из свойств документа.
PS. Это так догадка, т.к. Лоцмана у меня нет и как он работает понятия не имею.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 05.10.18, 16:25:39
Спасибо, я примерно понял куда копать, как докопаюсь выложу код.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 08.10.18, 14:07:17
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");
                    }
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 16.10.18, 21:22:15
Образовался еще один вопрос. Если получать материал через свойство IPart7.Material, то в его названии могут присутствовать спецсимволы. Как получить название материала без этих спецсимволов, такое как отображает сам Компас в свойствах модели в параметрах МЦХ?
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: Вират Лакх от 17.10.18, 03:28:05
От этого мцх или другого свойства без спецсимволов его и получать. По API компаса ищите, через что можно получить Material, тот же мцх. Мне он попадался раньше. Или на худой конец из полученной строки вырезать ненужное.

При присвоении материала из МиС компас сам не создает Location (Материал ID) в IPropertyMng / IPropertyKeeper.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 17.10.18, 08:48:14
IMassInertialParam7.Material тоже со спецзнаками :(. Походу придется самому их вырезать.
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: ТрындецЪ от 17.10.18, 08:52:46
Если материал прописывается с дробью, то в каком виде Вы желаете его получать?
Название: Re: Задать материал из МиС для деталей в сборке
Отправлено: once от 17.10.18, 19:59:12
Ставится знак деления "/"