Создать новый чертеж из модели

Автор mr. Tim, 23.11.20, 15:52:20

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

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

mr. Tim

Добрый день.
По задумке пользователь загружает модель a3d, нажимает кнопку и в другом окне видит полученный с модели чертеж.
Посмотрели тут на форуме уже примеры. На основе их собрали нечто похожее на то, что нам нужно  :w: :
function TForm1.ConvertA3DtoCDWformat(A3Dfile_path: string): string;
  var
    KGAX3   : TKGAX;
    iKompas               : KompasObject;
    iDoc2D                : ksDocument2D;
ViewParam   : ksViewParam;
ViewNumber   : Integer;
iAssociationViewParam : ksAssociationViewParam;

begin

  KGAX3.AddNewDocument(vt_SheetUser);

  iKompas := KompasObject(KGAX3.GetKompasObject);

  iDoc2D := ksDocument2D(iKompas.ActiveDocument2D);

  iAssociationViewParam := ksAssociationViewParam(iKompas.GetParamStruct(ko_AssociationViewParam));
  iAssociationViewParam.Init();
  iAssociationViewParam.disassembly := false;
  iAssociationViewParam.fileName := A3Dfile_path;
  iAssociationViewParam.projectionName := '#Снизу';
  iAssociationViewParam.projBodies := true;
  iAssociationViewParam.projSurfaces := false;

  ViewParam := ksViewParam(iAssociationViewParam.GetViewParam());
  ViewParam.Init();
  ViewParam.x:=100;
  ViewParam.y:=150;
  ViewNumber := 0;
  ViewParam.state := stACTIVE;
  ViewParam.name := 'User view';
  ViewParam.scale_ := 1;   // 1:1

  iDoc2D.ksCreateSheetArbitraryView(iAssociationViewParam, ViewNumber);
  iDoc2D.ksSaveDocument('D:\save.cdw');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  ConvertA3DtoCDWformat('D:\Сборка.a3d');
end;

В итоге конечный файл появляется на диске. Но этот вариант не очень удобен для работы, т.к. при нажатии на кнопку в окошке KGAX3 появляется чистый бланк чертежа, но не появляется сам чертеж и не видно его фантомного представления, для того, чтобы можно было указать место в которое разместить будущий чертеж(как это сделано в самом компасе при нажатии на кнопку "Создать новый чертеж из модели"). В данном примере расставляли вручную координаты для будущего чертежа(X и Y), но чертежи могут быть разные, в т.ч. планируется на выбор сделать виды, а для этого необходимо контролировать текущие размеры и положение.
Поможете с реализацией предварительного отображения?  :shu:

Sabahs

Координаты можно по габаритам видов рассчитать.
Тут сделал отображение созданного чертежа, проверял на КОМПАС-3D v19, как будет работать на версиях ниже, без понятия.
KGAX.png
Project6.rar

mr. Tim

Цитата: Sabahs от 24.11.20, 12:50:35Координаты можно по габаритам видов рассчитать.
Тут сделал отображение созданного чертежа.
у нас даже отображение предварительное не получается сделать. Просто чистый лист и готовый файлик на диске создается

п.с. пример не стартует, какие-то длл-ки рядом положить нужно?

Sabahs

КОМПАС-3D, Вам нужно обновлять.
У Вас, КОМПАС-3D V13, а он от v19 немного отличается.
Хотя, какая ОС?
Проект 64-разрядный, добавил 32-разрядный.
Project6_x86.rar

mr. Tim

Цитата: Sabahs от 24.11.20, 13:05:55Проект 64-разрядный.
винда 10ка х64, а вот компас да, 13й
на другой машине есть 18й, попробую там
но все-таки, там ведь ехе-шник, т.е. реализация остается не известной)

Sabahs

24.11.20, 13:18:25 #5 Последнее редактирование: 24.11.20, 13:37:51 от Sabahs
У меня там все сделано на API7 и в V13, много чего может не быть.
Толку показывать реализацию, если она у Вас не работает.

mr. Tim

Цитата: Sabahs от 24.11.20, 13:18:25У меня там все сделано на API7 и в V13, много чего может не быть.
теперь стала запускаться, но после выбора файла сама форма так и остается незаполненной, серой. Файлик с чертежом на диске появляется и нормально открывается.
В общем как я предполагаю, после выбора файла, как в самом компасе, на форме должно вокруг курсора появиться фантомное изображение будущего чертежа. А в нашем варианте до этого мы не добрались, а в вашем серое поле. Попробовал и там где 18й компас

Sabahs

24.11.20, 14:42:00 #7 Последнее редактирование: 24.11.20, 15:32:20 от Sabahs
Это значит, что отличие есть в TKGAX, даже между v18 и v19, т.к. пробовал на V14x86, тоже самое.
Для фантомов нужно dll писать, вид можно подвинуть в самом компоненте мышью.
Project006.mp4

mr. Tim

Цитата: Sabahs от 24.11.20, 14:42:00Для фантомов нужно dll писать, вид можно подвинуть в самом компоненте мышью.
по нашему коду даже вид этот не появляется, двигать нечего :))
У вас на видео хоть и не как в самом компасе, но очень хорошо, удобно было бы использовать такой вариант!

Sabahs

Вот полный код, ничего в нем военного нет, но разбирайтесь уже сами, т.к. у меня нет V13.
KGAX_.png

mr. Tim

Цитата: Sabahs от 25.11.20, 09:01:48Вот полный код, ничего в нем военного нет, но разбирайтесь уже сами, т.к. у меня нет V13.
вроде ничего и не пришлось исправлять, только под себя адаптировал и всё, отлично работает! Большое спасибо! ;)
Интересно, можно ли заранее, еще не отобразив на форме ассоциативный вид, определить его габаритный прямоугольник? хотя, даже если нельзя, попробуем взять координату клика по чертежу и отправить на Х Y вида, чтоб уж примерно куда надо добавлялся. в любом случае так гораздо удобнее, еще раз спасибо за помощь ;)

Sabahs

ksGetObjGabaritRect - получить габаритный прямоугольник объекта.