• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Работа с «таблицей переменных» параметризованной детали

Автор BD11, 03.03.14, 16:05:21

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

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

BD11

Здравствуйте, помогите пожалуйста решить проблему. Я не понял, как работать с «таблицей переменных» параметризованной детали.

У меня есть параметризованная деталь (приложил рисунок), которую я хочу вставить в сборку и выбрать нужную конфигурацию. Как вставить деталь в сборку и связаться с VariableTable я разобрался – могу узнать какое количество вариаций детали существует (VariableTable.RowsCount). Но не могу понять, как выбрать нужную вариацию детали по тексту комментария (например «n2»), чтобы деталь перестроилась в сборке.



// Запуск Компаса (если он не запущен)

if (kompas == null)
{
Type t = Type.GetTypeFromProgID("KOMPAS.Application.5");
kompas = (KompasObject)Activator.CreateInstance(t);             
}

if (kompas != null)
{
kompas.Visible = true;
kompas.ActivateControllerAPI();

// Создаем новую сборку
ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D();
iDocument3D.Create(false, false);

// Вставляем в сборку существующую деталь
ksPart iPart = (ksPart)iDocument3D.GetPart((short)Part_Type.pTop_Part);
iDocument3D.SetPartFromFile("Деталь.m3d", iPart, true);               
iPart = (ksPart)iDocument3D.GetPart(0);               
iDocument3D.RebuildDocument();
           
/* Далее пробуем работать с "таблицей переменных" параметризованной детали */

// Так как работать с "таблицей переменных" можно только через API7, преобразуем тип детали
Part7 iPart7 = (Part7)kompas.TransferInterface(iPart, (int)ksAPITypeEnum.ksAPI7Dual, (int)Obj3dType.o3d_part);

// Проверочка удачности преобразования
kompas.ksMessage(iPart7.Name);

// Получаем VariableTable
VariableTable iVariableTable = (VariableTable)iPart7.VariableTable;

// Узнаем количество вариантов параметризованной модели (количество строк)
kompas.ksMessage(iVariableTable.RowsCount.ToString());       
}

KrissKross

Применить параметры строки к компоненту.
IVariableTable::ApplyVars

Это если у Вас Компас v13

Если Компас v14
ИМХО
лучше использовать настоящие исполнения
Интерфейс менеджера исполнений - IEmbodimentsManager
+ Благодарностей: 1

BD11

Судя из описания API интерфейс IEmbodimentsManager мне подходит. У меня Компас 14. Но у меня не выходит подключить его – компилятор говорит, что возможно я забыл подключить библиотеку. IEmbodimentsManager вроде принадлежит KompasAPI7, если бы я забыл подключить KompasAPI7, то у меня не работал бы и IPart7. В чем мб дело? Подключал я так IEmbodimentsManager:
IEmbodimentsManager iEM = (IEmbodimentsManager)iPart7;


И все же не подскажите как пользоваться IVariableTable::Comment? Хочу прочитать комментарий к нужной вариации.
String iC = iVariableTable.Comment(1);

Ругается: Невызываемый член "KompasAPI7.IVariableTable.Comment" не может использоваться в качестве метода. (CS1955) - C:\...\MainForm.cs:254,33

И можно ли вместо BSTR использовать String? Если «нет» то как обойти?

BD11

Нет ли что-нибудь вроде IVariableTable::FindColumnIndex, но чтобы получать номер строки (номер варианта детали)  :`(
До сих пор не разобрался почему не работает IVariableTable::Comment

BD11

Может быть кому поможет, решил проблемы  :shu:

Получить комментарий к нужной вариации можно с помощью get_Comment:
iPart.VariableTable.get_Comment(0);

Чтобы получить IEmbodimentsManager, я создал новые DLL из LIB (SDK\Lib\). Не знаю почему в готовых DLL к C# не все интерфейсы.