Разработка Сборки

Автор poslegg, 25.07.11, 16:53:22

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

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

poslegg

Люди подскажите как в Delphi загружать детали и делать из них сборку, не загружать готовую сборку и изменять её переменные а создавать сборку из деталей программно. С параметрическим созданием деталей всё ясно, а вот как делать сборку грубо говоря из 2 деталей+ сопряжения. Если кто может помогите примерами статьями по этой тематике.

Вы пожалуйста код накидайте, а там поглядим, что не понятно.

poslegg

procedure TFormDetali.CreateAssemblyClick(Sender: TObject);
var
  doc3: ksDocument3D;
  rInfo: ksRequestInfo3D;
  iPart: ksPart;
begin
  if Kompas = nil then
  begin
    Kompas := KompasObject(CreateOleObject('Kompas.Application.5'));
    if Kompas <> nil then
      Kompas.Visible := true;
  end;

  doc3 := ksDocument3D(Kompas.Document3D);
  Doc3.Create(false, FALSE);
  iPart := ksPart(doc3.GetPart(pNew_Part));
  // устанавливаем имя файла компонента
  iPart.fileName := PathModel.Text;
  rInfo := ksRequestInfo3D(doc3.GetRequestInfo(iPart));
  // создаем фантом детали
  rInfo.CreatePhantom;
  // если пользователь установил компонент
  if doc3.UserGetPlacementAndEntity(0) then
  begin
  // размещаем его
    iPart.SetPlacement(rInfo.GetPlacement);
    doc3.SetPartFromFile(PathModel.Text, iPart, true);
    iPart.UpdatePlacement;
  end
  else kompas.ksEnableTaskAccess(1);

end;

3 вопроса:
1.) Как программно задать координаты вставки детали??
2.) Как сделать деталь фиксированной в сборке???
3.) Как сделать сопряжение между 2 деталями ????


poslegg

ok спасибо с координатами то же более менее понял, остался только вопрос как сделать деталь фиксированной, полазаю ещё по SDK, но пока не нашёл./

Про фиксацию почитайте в SDK про следующие интерфейсы и их методы:

ksDocument3D::GetMateConstraint
ksMateConstraint::fixed
MateConstraintFixed Типы фиксации
0 - нет фиксации,
1 - фиксировать деталь 1,
2 - фиксировать деталь 2.


poslegg

Sabahs   спасибо огромное))))))))))))))))))))))))))

JJ

poslegg, а как вы решили вопрос с координатами? поделитесь секретом)  Вопрос в принципе адресован ко всем

poslegg

JJ   c координатами всё довольно просто на самом деле
//---------------------------------------------------------------------------------------
Placement2 := ksPlacement(iPart2.GetPlacement);
Placement2.SetOrigin(100, 100, 100);
//---------------------------------------------------------------------------------------
а вот с сопряжение на подобии совпадения всё сложно по крайне мере я не особо понял, у меня есть в прямоугольной площадке вырез круг мне надо сделать совпадение объектов детали круглой на подобии ножки из под стула в вырез под эту деталь. Как это сделать не могу вникнуть. В принципе надо как то получить ссылку на ту область которая вырезана в прямоугольнике и сделать совпадение вот это я не понял!!!!!)))) если кто соображает help)))) а в остальном давно разобрался


poslegg

Пример бы не помешал или наставление на саму суть))))))))

JJ

С координатами я так и делала, но видимо проблема в чём то другом. Либо я просто что-то делаю не так, но не пойму пока что. Вы можете поделиться со мной своим полным кодом загрузки детали в сборку??  кстати в этой теме http://forum.ascon.ru/index.php/topic,5841.40.html есть аналогичный пример,  но там какие то непонятные мне пока манипуляции с фантомом


Цитата: JJ от 14.09.11, 19:21:26
С координатами я так и делала, но видимо проблема в чём то другом. Либо я просто что-то делаю не так, но не пойму пока что. Вы можете поделиться со мной своим полным кодом загрузки детали в сборку??  кстати в этой теме http://forum.ascon.ru/index.php/topic,5841.40.html есть аналогичный пример,  но там какие то непонятные мне пока манипуляции с фантомом
А может быть Вы своим кодом сначала поделитесь?

JJ

Ура, сама разобралась. Оказывается всё действительно очень просто.Вот мой код,на питоне, вставка детали через фантом, может кому пригодится..
import Kompas6API5, LDefin3D, LDefin2D
Kompas, doc3d = start3d()
   
iPart = Kompas6API5.ksPart(doc3d.GetPart(LDefin3D.pNew_Part))
iPart.name = 'Цилиндр'
iPart.fileName = 'C:\k4.m3d'

iRequestInfo3D = Kompas6API5.ksRequestInfo3D(doc3d.GetRequestInfo(iPart))
iRequestInfo3D.CreatePhantom()

if doc3d.UserGetPlacementAndEntity(0):
    iPart.SetPlacement(iRequestInfo3D.GetPlacement())
    doc3d.SetPartFromFileEx('C:\k4.m3d', iPart, False, True);
    iPart.UpdatePlacement()
    iPart.Update()
    doc3d.RebuildDocument()


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