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

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

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

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

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

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

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

Сборка в среде компаса

Автор Elonex, 26.01.12, 16:41:04

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

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

Elonex

Помогите разобраться со сборками в компасе. Если есть какой-нибудь материал или может быть я плохо искал в SDK. Как получить сборку с нуля? Создать детали и соединить их, а не просто собрать готовые детали?

PS

Начинать нужно с IDocument3D, далее нужно создать новый IPart в нем делаете что Вам надо. Смотрите справку по API там есть достаточно примеров.

chum

///создание нового (пустого) 3D-документа типа "сборка"///////////////

procedure WorkDocument3D;

  //Создать документ-модель (деталь или сборку).
  //Create (invisible, typeDoc);
  //Входные параметры:
  //invisible
  //-   режима редактирования документа
  //(TRUE - невидимый режим,
  //FALSE - видимый режим),
  //typeDoc
  //- тип документа
   //(TRUE - деталь,
   //FALSE - сборка)
   //Возвращаемое значение:
   //TRUE - в случае успешного завершения.

   //lt_DocAssemble3D - тип документа сборка

  begin

  iDocument3D := ksDocument3D(kompas.Document3D());
  if iDocument3D.Create(false, false) then
    begin
      iDocument3D.author := 'Иванов Иван Иванович';                // Автор документа
      iDocument3D.comment := '3D-сборка'; // Комментарии к документу
      iDocument3D.fileName := 'Model/Гидроцилиндр.a3d';    // Имя файла документа и относительный путь
      iDocument3D.UpdateDocumentParam();             // Обновить параметры Документа
    end;
  end;

Это на Delphi.
Далее создаете документы типа "Деталь", ну и сами детали, какие вам нужны.
В сборку потом деталь можно вставить так:

//fileNameDet - название файла детали, которую вставляете в сборку
procedure Insertd3InAssemble(FileNameDet:string);
var
  iPart:ksPart;
  begin
   // получаем указатель на активный трехмерный документ
   iDocument3D := ksDocument3D(kompas.ActiveDocument3D());
   // если указатель nil или документ является деталью
    if (iDocument3D = nil) or (iDocument3D.IsDetail) then
    begin
    // выдаем сообщение и прекращаем работу библиотеки
    kompas.ksMessage('Текущий документ не является сборкой!');
    exit;
    end;
       // получаем интерфейс новой детали в сборке
   iPart := ksPart(iDocument3D.GetPart(pNew_Part));
   // устанавливаем имя файла компонента
   iPart.fileName := FileNameDet;
   iDocument3D.SetPartFromFile(FileNameDet, iPart, false);
   iPart.Update;
end;

Потом сопряжения остается добавить. Какие вам нужны, я не знаю, но здесь на форуме, помню, были примеры соосности и совпадения. Наверное, есть и остальные, точно не знаю.


chelkar

Чуть бы поподробнее про саму задачу понять...
Варианты могут быть такие.
1. Если все знаете и про детали про сборку, то поставьте их в нужные места с помощью IPart::SetPlacement
2. Через сопряжения, как указано выше. Но тогда надо как то "ловить" объекты для метода  iDoc3DSborka.AddMateConstraint(mc_Coincidence,Entity1,Entity2,0,0,0); Если детали программно создаете, то введите вспомогательные объекты с именами (плоскости, оси, точки), чтоб потом найти их в сборке.


Elonex

В общем хочу создать программно основную деталь, а потом,программно создавая вспомогательные детали, присоединять их к основной. Ну или создать все детали, а потом заниматься сборкой.

Спасибо  всем за помощь. Буду пробовать

Elonex

Вот так вставляю:

Dim part As ksPart
  part = docSborka.GetPart(Part_Type.pNew_Part)
  part.fileName = filenameOpora
  docSborka.SetPartFromFile(filenameOpora, part, False)
  part.Update()

Разные детали получается вставить.. А что делать, если необходимо вставить 2 одинаковые детали? Можно ли одну и ту же деталь вставить 2 раза? Или необходимо создать 2 одинаковые детали и вставлять их словно они разные??


Elonex

Ну вот допустим так
Dim part As ksPart
  part = docSborka.GetPart(Part_Type.pNew_Part)
   docSborka.SetPartFromFile(filenameOpora, part, False)
  part.Update()

Dim part1 As ksPart
  part1 = docSborka.GetPart(Part_Type.pNew_Part)
   docSborka.SetPartFromFile(filenameOpora, part1, False)
  part1.Update()

только один компонент вставляется..где ошибка??

#9
В дереве построения деталей сколько получается? Должно быть две, единственное они наложатся друг на друга.

chelkar

Правильно вроде все.
Глупый вопрос, но все же, а Вы уверены что один вставляется? Что видно в Дереве построения сборки?

Повоторил у себя, работатет.
------
iDocument3D = iKompasObject.ActiveDocument3D()

filenameOpora = 'C:/rolik.m3d'

Part = iDocument3D.GetPart (LDefin3D.pNew_Part)
iDocument3D.SetPartFromFile(filenameOpora, Part, False)
Part1.Update()

Part1 = iDocument3D.GetPart (LDefin3D.pNew_Part)
iDocument3D.SetPartFromFile(filenameOpora, Part1, False)
Part1.Update()
------


Еще немного смущает False в функции вставки компонента.
Вы действительно хотите "телом" вставлять компонент?

Elonex

Точно одна вставляется) Я созданные детали просто вообще не сохраняю перед тем как в сборку вставлять, поэтому ссылкой не имеет смысла.. Думаете не правильно? Перед тем как собирать надо каждую деталь сохранить??

Деталь сохранять надо один раз, если Вы вставляете одну и туже.

chelkar

Цитата: Elonex от 14.02.12, 18:35:13
Я созданные детали просто вообще не сохраняю перед тем как в сборку вставлять, поэтому ссылкой не имеет смысла.. Думаете не правильно?
Думаю не правильно.
iDocument3D.SetPartFromFile требует ссылку на файл. Если файла нет, то непонятно вообще, как оно сработало.