Обозначение "По источнику"

Автор SpacePurr, 21.11.19, 10:22:30

« предыдущая - следующая »

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

SpacePurr

Здравствуйте.

Возникла проблема с переименованием параметра "Обозначение" у компонентов сборки и включением Toggle "По источнику".
Аннотация 2019-11-21 101104.png

Я реализовал переименование компонентов, но никак не получается программно "нажать" на кнопку "По источнику".

Работаю сразу через два интерфейса. Документ открываю через 5, потом активный документ получаю 7.

KompasObject kompas = Activator.CreateInstance(Type.GetTypeFromProgID("KOMPAS.Application.5")) as KompasObject;
_Application kompas7 = Activator.CreateInstance(Type.GetTypeFromProgID("KOMPAS.Application.7")) as _Application;

ksDocument3D doc3D = kompas.Document3D() as ksDocument3D;

var a3dFiles = // диалоговое окно выбора файлов

foreach (var path in a3dFiles)
{
    doc3D.Open(path, false);

    IKompasDocument kompasDocument = kompas7.ActiveDocument;
    IKompasDocument3D kompasDocument3D = kompasDocument as IKompasDocument3D;

    Parts7 parts = kompasDocument3D.TopPart.Parts; // получаем список компонентов сборки

    foreach (IPart7 item in parts)
    {
        ISourcePart7Params part7Params = item as ISourcePart7Params; // магия компаса
        item.Marking = part7Params.SourceMarking; // параметру "Обозначение" компонента присваиваем значение параметра "Обозначение" источника
        item.Update();
    }

    doc3D.Save();
    doc3D.close();
}

Файлы переименовываются. Однако кнопка рядом неактивная. В целом, она выполняет те же самые действия и, активировав ее можно получить тот же(наверное) результат. Однако каждый раз использовать программу для полного переименования всех компонентов, вместо одного активированного свойства это не тот результат, который я бы хотел видеть.

Прошу помощи.
Спасибо.


Вират Лакх

Вот почитайте отсюда https://forum.ascon.ru/index.php?msg=268693 и дальше в той теме.
У меня получилось программно включать галочки Источник на обозначении и наименовании.

SpacePurr

Спасибо большое, тоже нашел эту тему.

Честно, это какая - то лотерея :D

Получилось вот так
foreach (IPart7 item in parts)
{
    ISourcePart7Params part7Params = (ISourcePart7Params)item;
    IPropertyKeeper propertyKeeper = (IPropertyKeeper)item;
   
    IPropertyMng propertyManager = kompas7 as IPropertyMng;

    _Property marking = propertyManager.GetProperty(kompasDocument, 4.0);

    propertyKeeper.SetPropertyValue(marking, null, true);
    item.Update();
}

Пустая строка не помогла, перебрал и String.Empty, даже true/false пробовал. Засунул null - заработало.

Спасибо.

Вират Лакх

Наверное лучше не через пропертикипер, а по-простому (пример на питоне):
iPart7.Marking = '$|$|$|$|$|$|' if k14 else ''
iPart7.Name = ''
iPart7.Update()
где k14 = True if KompasVersion >= 14 else False
Работает прекрасно.

SpacePurr

Да, я точно также пытался первым делом. Безрезультатно. Попробовал море разных вариантов. Галочка в упор не ставилась.

Вират Лакх

Цитироватьitem.Marking = part7Params.SourceMarking; // параметру "Обозначение" компонента присваиваем значение параметра "Обозначение" источника
Вы неправильно поняли включение источника.
Не надо присваивать, а надо удалять. Галочка Источник - это не выбор между значением из источника и значением свойства компонента. Она, так сказать, кнопка очистки свойства компонента. Если оно пустое, то компас автоматически показывает значение источника. Т.е. свойство компонента - это свойство поверх источника.
Если вместо источника отобразить нечего, то отображается источник.