Свой САПР на базе Компас

Автор Mihonius, 14.03.13, 14:21:15

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

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

Mihonius

Добрый день!
Есть необходимость в создании своего САПР на базе КОМПАС для типовых деталей - железнодорожные колеса.
Задумка следующая по чертежу заказчика в созданную оболочку вводятся основные параметры детали, а Компас отстраивает деталь в середине поля допуска. Реализация на Borland C++ и Компас 13 home.
Подскажите как окно Компаса использовать в своем окне?
Какие функции использовать для сопряжения двух кривых и как сделать выбор сопрягать прямые углом или закруглять радиусом?
Буду очень признателен светлым мыслям!
Спасибо!

Не проще начертить параметризованную 3D модель? В Компас V14 можно перестраивать с учётом поля допуска, также есть исполнения, какой смысл делать свой САПР, если это можно реализовать непосредственно в Компасе.

Ознакомится с новинками Компас V14 можно здесь http://kompas.ru/webinar/
+ Благодарностей: 1

Mihonius

Во первых это дипломный проект. Во вторых смысл есть, далее будет писаться модуль для формирования УП для станков с ЧПУ.
Указываешь мышкой элементы которые обрабатывать соотносишь к инструменту. Просчитается время на обработку этого участка и прочее все еще не продумал. На выходе готовая программа. Ну вот так как-то планирую.
Поработать с параметрической моделью тоже хороший вариант, попробую отстроить вручную посмотрю что получиться.

Цитата: Mihonius от 14.03.13, 14:21:15
...
Подскажите как окно Компаса использовать в своем окне?
...
Есть несколько вариантов:
- использовать ActiveX компонент KGAX,
- или функции о которых можете почитать в SDK.
+ Благодарностей: 1

Mihonius

Помогите найти пересечение контуров, уже почти все заново отстроил и результата ноль! (
И критика параметризации модели приветствуется, что улучшить, что добавить!
Благодарю!

Boriss

два разрыва было
+ Благодарностей: 1

Mihonius

Кто знает как подключить форму к обычной библиотеке вот только на С++. На Делфи есть примеры там все понятно, а вот под С++ Builder нет ничего. Пример в SDK гайка вообще не помогла, так такое накручено.


Mihonius

18.03.13, 18:05:06 #8 Последнее редактирование: 18.03.13, 18:54:40 от Mihonius
При компиляции примера из SDK ksActivex появляется ошибка:

[C++ Fatal Error] KGAXLib_OCX.h(43): F1003 Error directive: "This file requires a newer version of the header UTILCLS.H"
"You need to apply an update/patch to your copy of C++Builder"

Обновление устанавливал Update 4, KGAX библиотеку импортировал. Подскажите?
Ошибка связана с проверкой версии UTILCLS.H.
В  KGAXLib_OCX.h написано так  #if !defined(__UTILCLS_H_VERSION) || (__UTILCLS_H_VERSION < 0x0700)
то есть версия 0x0700, а в распоряжении Borland только 0x0600
Как быть?

Mihonius

20.03.13, 18:15:30 #9 Последнее редактирование: 20.03.13, 19:39:27 от Mihonius
Подскажите? Не пойму причину?
Пишу так, язык Delphi, среда Embarcadero XE2:

procedure TMainForm.MakeDrawingClick(Sender: TObject);
var
    iKompas              : KompasObject;
    iDoc                 : ksDocument2D;
    iMathematic2D        : ksMathematic2D;
    vpx   : LongInt;
    vpy   : LongInt;
    D_otv_st : Extended;
    Vil : Extended;
    L_st : Extended;
    D_st_vs : Extended;
    pol_h_oboda : Extended;
    l_osi : Extended;
    b_disk_st : Extended;
    Ugol_st_vs : Extended;
    R_st_vs :  Double;
    D_st_ns : Extended;
    Ugol_st_ns : Extended;
    R_st_ns :  Extended;
    iCON: ksCON;
    i: Integer;
begin
Vil:=StrToFloat(List_Detal.Cells[1, 1]);
L_st:=StrToFloat(List_Detal.Cells[1, 2]);
D_otv_st:= StrToFloat(List_Detal.Cells[1, 3]);
pol_h_oboda:= StrToFloat(List_Detal.Cells[1, 4]);
l_osi:= StrToFloat(List_Detal.Cells[1, 5]);
b_disk_st:= StrToFloat(List_Detal.Cells[1, 6]);
D_st_vs:=StrToFloat(List_Detal.Cells[1, 7]);
Ugol_st_vs:=StrToFloat(List_Detal.Cells[1, 8]);
R_st_vs:=StrToFloat(List_Detal.Cells[1, 9]);
D_st_ns:=StrToFloat(List_Detal.Cells[1, 10]);
Ugol_st_ns:=StrToFloat(List_Detal.Cells[1, 11]);
R_st_ns:=StrToFloat(List_Detal.Cells[1, 12]);
iKompas := KompasObject(KGAX1.GetKompasObject);
iDoc    := ksDocument2D( iKompas.ActiveDocument2D );
  vpx := idoc.ksLine( 0, 0, 0 );
  vpy := idoc.ksLine( 0, 0, 90 );

  iCON := ksCON(iKompas.GetParamStruct( ko_CON ));
  if iCON <> nil then
  begin
    iMathematic2D.ksCouplingLineLine( D_st_vs/2, -Vil, 90-Ugol_st_vs, 0, pol_h_oboda+l_osi-b_disk_st/2, 0, R_st_vs, iCON );
    idoc.ksLine(D_st_vs/2, -Vil, 90-Ugol_st_vs); ..Точно не ноль исключая сопряжение все рисует!
    idoc.ksLine(0, pol_h_oboda+l_osi-b_disk_st/2, 0);

    for i := 0 to 3 do
    begin
      idoc.ksCircle( iCON.GetXc(i), iCON.GetYc(i), R_st_vs, 2 );
      idoc.ksPoint(  iCON.GetX1(i), iCON.GetY1(i), i );
      idoc.ksPoint(  iCON.GetX2(i), iCON.GetY2(i), i );
    end;
  end;

  iDoc.ksZoomPrevNextOrAll(2);
end;

end.

Ругается на ko_CON, [DCC Error] WForm.pas(102): E2003 Undeclared identifier: 'ko_CON'
В примере Step2 DelphiAUTO точно так же но ошибку не выдает. Что может быть?

20.03.13, 18:20:34 #10 Последнее редактирование: 20.03.13, 19:38:18 от Sabahs
Ещё и вылет будет на этой строчке:
iMathematic2D.ksCouplingLineLine( D_st_vs/2, -Vil, 90-Ugol_st_vs, 0, pol_h_oboda+l_osi-b_disk_st/2, 0, R_st_vs, iCON );
Где Вы указатель получили на  iMathematic2D?
Возможен вылет здесь vpx := idoc.ksLine( 0, 0, 0 );
idoc - может оказаться nil.
ЦитироватьРугается на ko_CON, [DCC Error] WForm.pas(102): E2003 Undeclared identifier: 'ko_CON'
Объявите модуль ksTLB.

Mihonius

в коде пометил где взялся  iMathematic2D
Без сопряжения все рисует!

Сделайте активным 3D документ и обратитесь к процедуре - это я о idoc.
iMathematic2D объявить мало, со временем Ваш САПР ляжет.

Mihonius

 iMathematic2D := ksMathematic2D(iKompas.GetMathematic2D()); добавил
   iDoc    := ksDocument2D( iKompas.ActiveDocument2D ); объявлен!
Иначе сопряжение двух прямых радиусом можно выполнить?

iDoc    := ksDocument2D( iKompas.ActiveDocument2D ); объявлен!
Но не проверен.
ЦитироватьИначе сопряжение двух прямых радиусом можно выполнить?
Можно используя математику LibTool.pas.

Mihonius

 if (iDoc <> nil) and (iMathematic2D <> nil) then
  begin
.......
end;
проверен )
эффект тотже

А теперь, в отладчике смотрите сколько массивов координат точек сопряжения Вы получили и какие конкретно нужны Вам.

Mihonius

Похоже iMathematic2D дает ноль

20.03.13, 20:20:28 #18 Последнее редактирование: 20.03.13, 20:39:47 от Sabahs
Смотрите условия, что Вы посылаете в функцию ksCouplingLineLine, с этим я разбираться не буду, а ещё лучше постройте руками и найдите возможные варианты, тогда легче будет ошибку найти.
Для переменных нужно использовать тип  Double - 8 байт, а  Extended - 10 байт, надеюсь разницу понимаете.
+ Благодарностей: 1

Mihonius

Все стало работать без проблем после установки lidtool.pas и libtool.h из 14 Компаса! ))) Нашел на форуме Ваш совет на счет них! ) Спасибо!