Использование API на языке C#

Автор NikSis, 24.09.18, 15:56:42

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

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

NikSis

Начал заниматься созданием моделей деталей в C# для Компаса 3D, но ни как не могу найти как правильно описывать те или иные Компасовские операции в C#.
Перечитал весь форум, смог найти только построение линий, дуг и др. И операцию выдавливания.
Подскажите где можно найти, желательно полный список операций, с описанием как правильно их описывать.
(В SDK пытался найти, но не смог)
Как пример хотя бы операцию "Элемент вращения", "Сечение" и др.
Заранее Спасибо!


Slaviation

Советую попробовать макрорекордер (https://slaviationsoft.blogspot.com).
Руками создаете операцию и получаете ее готовый код.
Код будет на Python, но для изучения SDK это не важно.

NikSis

Автор: Sabahs  Спасибо огромное.
Но в этих файлах я к сожалению не нашел некоторые нужные мне операции. Такие как "Цилиндрическая спираль", "Булевы операции", "Элемент по траектории". Подскажите если вам не сложно, где они находятся, если они есть.
Да и не нашел примеров объединения деталей в сборку.
Заранее спасибо!

Ищите по форуму и переводите на свой язык программирования.

p3452

Подскажите новичку!
Есть ли доступ через API к Оборудование: Металлоконструкции и Оборудование: Трубопроводы?
Пересмотрел SDK и примеры - ничего не нашел.
Пробовал макросы записывать - пишутся только базовые операции и ничего не лишиться по Металлоконструкциям и Трубопроводам
Как к ним достучаться? Есть ли полноценное SDK?

DesignЯR

IProcedure - Интерфейс позволяет получить имя, идентификатор команды, ее папку в библиотеке, выполнить команду. Только смысл запускать команды других библиотек через свою?   Если бы была сформулирована конечная цель было бы проще давать советы.
+ Благодарностей: 1

p3452

Цитата: DesignЯR от 04.03.19, 10:02:36
IProcedure - Интерфейс позволяет получить имя, идентификатор команды, ее папку в библиотеке, выполнить команду. Только смысл запускать команды других библиотек через свою?   Если бы была сформулирована конечная цель было бы проще давать советы.

Не сразу дошел смысл сказанного...
Да, вариант! Все лучше, чем через object browser ковырять.
Спасибо!

p3452

Подскажите новичку!
Пробую работать с коллекцией документов:
// kompasApp -  Интерфейс KOMPAS.Application.7
...
// Доступ к коллекции документов
Documents docis = kompasApp.Documents;

Так добавляю Деталь
var doci3D = docsi.Add(DocumentTypeEnum.ksDocumentPart) as IKompasDocument3D;

Так добавляю документ Чертеж
var doci2D =  docsi.AddWithDefaultSettings(DocumentTypeEnum.ksDocumentDrawing) as IKompasDocument2D;
Так добавляю текстовый документ по заданному шаблону
const string spath = @"C:\Program Files\ASCON\KOMPAS-3D v18\Templates\";
var doci =  docsi.AddNewDocumentFromTemplate(spath+ "Мой шаблон для КМ.kdt") as IKompasDocument;

А дальше, а описании, идет метод "AddCustomDocument( BSTR DocumentTypeId );"  и с ним полный затык - где взять, или как получить DocumentTypeId?

DesignЯR

Попробуйте перебрать коллекцию документов IDocuments , где есть все типы интересующих документов, от IKompasDocument получить IKompasDocument1. У него есть свойство DocumentTypeId - Идентификатор типа документа. Записуйте в лог и потом публикуйте здесь что получилось.

+ Благодарностей: 1

p3452

А "затык" то и был вот в этом: "от IKompasDocument получить IKompasDocument1"...
Для меня было открытием, что можно непосредственно преобразовывать интерфейсы - пост от 2011 года подсказал.

Сделал так открыл все доступные мне документы и выполнил код:
// kompasApp -  Интерфейс KOMPAS.Application.7

Documents docis = kompasApp.Documents;

if (docis.Count<=0)
MessageBox.Show(this, "Нет документов в коллекции [docis]", "Сообщение");
else
{
var listDoc = new List<string>();   
IKompasDocument1 doci1;
string sd = string.Empty;

for (int i=0; i<docis.Count; i++)
{
doci1 = docis[i] as IKompasDocument1;
if (doci1 == null)
sd= " i=["+i.ToString()+ "]  Тип_док=["+docis[i].DocumentType.ToString()+ "]"+
"   DocumentTypeId=[нет]\n";
else
sd= " i=["+i.ToString()+ "]  Тип_док=["+docis[i].DocumentType.ToString()+ "]"+
"   DocumentTypeId=["+doci1.DocumentTypeId+ "]\n";
listDoc.Add(sd);
}

// Сохраняем список в текстовый файл
string sFile = @"D:\List_DocumentTypeId.txt";
using (var sw = new StreamWriter(sFile, false, System.Text.Encoding.Default))
    {
foreach(string st in listDoc)
        sw.WriteLine(st);
MessageBox.Show(this, "Файл записан...", "Сообщение");
    }

// ПРОВЕРКА
// IKompasDocument doci = docis.AddCustomDocument("Kompas.t3d");
// if (doci != null)
// MessageBox.Show(this, "Отработала AddCustomDocument(\"Kompas.t3d\")!", "Сообщение");
}


В файле List_DocumentTypeId.txt видим следующее:

i=[0]  Тип_док=[ksDocumentDrawing]   DocumentTypeId=[Kompas.cdw]
i=[1]  Тип_док=[ksDocumentFragment]   DocumentTypeId=[Kompas.frw]
i=[2]  Тип_док=[ksDocumentDrawing]   DocumentTypeId=[Kompas.spds_drawing]
i=[3]  Тип_док=[ksDocumentSpecification]   DocumentTypeId=[Kompas.spw]
i=[4]  Тип_док=[ksDocumentTextual]   DocumentTypeId=[Kompas.kdw]
i=[5]  Тип_док=[ksDocumentPart]   DocumentTypeId=[Kompas.m3d]
i=[6]  Тип_док=[ksDocumentAssembly]   DocumentTypeId=[Kompas.a3d]
i=[7]  Тип_док=[ksDocumentAssembly]   DocumentTypeId=[Kompas.EasySteel]
i=[8]  Тип_док=[ksDocumentAssembly]   DocumentTypeId=[Kompas.Pipeline]
i=[9]  Тип_док=[ksDocumentPart]   DocumentTypeId=[Kompas.sheetmetal]
i=[10]  Тип_док=[ksDocumentTechnologyAssembly]   DocumentTypeId=[Kompas.t3d]

Ответ получен - спасибо!