Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Кто работает или работал с Autocad отзовитесь

1.9K
14 января 2014 года
George22
91 / / 09.12.2007
Изучаю программирование AutoCad из среды Builder C++ 6.
Изучать ObjectARX для VisualStudio принципиально не хочется.
Все получается, пока не дошел до функции AddRegion.
Из справки автокада:
RetVal = object.AddRegion(ObjectList) - это на VisualBasic.
Как сформировать этот самый ObjectList на С++?
Пробовал по разному и так тоже:

 
Код:
int bounds[2]={0,1};
   Variant Arr =VarArrayCreate(bounds,1,varVariant);
   Arr.PutElement(Arc,0);
   Arr.PutElement(Line,1);

   ModelSpace.OleFunction("AddRegion",Arr);
компилируется, но во время исполнения выдает ошибки.
Кто работал с Autocad, отзовитесь, please
327
14 января 2014 года
UserNet2008
748 / / 03.04.2010
Я думаю, нельзя связать C++ BUILDER с ObjectARX. Нужно смотреть в сторону технологии COM.

Как вариант or concept code, но думаю не прокатит .
Нужно импортировать N-DLL
~Выбрать "import type library" из меню Project , потом select "AutoCAD... Type Library" , потом install...

теперь, типа такого
 
Код:
#include "AutoCAD_TLB.h"  

IAcadApplicationDisp IAcad;
IAcad.BindDefault();
IAcad.Visible=True;
теперь может так
Код:
Variant vCAD,vObj1,vObj2;

int bounds[2]={0,1};
   Variant Arr =VarArrayCreate(bounds,1,varVariant);
   Arr.PutElement(Arc,0);
   Arr.PutElement(Line,1);

vCAD=GetActiveOleObject("AutoCAD.Application");

vObj1=vCAD.OleFunction("ActiveDocument");

vObj2=vObj1.OleFunction("ModelSpace");

vObj2.OleFunction("AddRegion",Arr);
// or
vObj2.OleProcedure("AddRegion",Arr);
Цитата:
компилируется, но во время исполнения выдает ошибки.


Code error много может сказать т.ч нужно их печатать.

1.9K
15 января 2014 года
George22
91 / / 09.12.2007
Вот так прокатило и создался регион:

 
Код:
int bounds[] = {0,1};
 Arr = VarArrayCreate(bounds,1,varDispatch);
 Arr.PutElement(Arc,0);
 Arr.PutElement(Line,1);

 Variant Region = ModelSpace.OleFunction("AddRegion",Arr);
Ура, буду дальше пружину выдавливать!
1.9K
15 января 2014 года
George22
91 / / 09.12.2007
Теперь другая ошибка - при попытке выдавить регион по полилинии c помощью
функции:
Код:
Variant Region = ModelSpace.OleFunction("AddRegion",Arr);

 //Создаем массив типа Variant из N 3D точек
  int BoundsA[2]={0,N-1};//массив с индексами 0,1,2 ... N-1
  A = VarArrayCreate(BoundsA,1,varDouble);
  double dAngle = 4*3*2*M_PI/N;//шаг по углу поворота
  dZ =H/N;//шаг по Z
  for(int i =0;i<(N-2);i=i+3)
  {
   X=cos(Angle)*Radius;
   Y=sin(Angle)*Radius;

   A.PutElement(X,i);
   A.PutElement(Y,i+1);
   A.PutElement(Z,i+2);
   
   Z=Z+dZ;
   Angle+=dAngle;
  }  

 //рисуем полилинию, как основу для будущей пружины
  PolyLine3d = ModelSpace.OleFunction("Add3Dpoly",A);

//здесь выскакивает ошибка - "Несоответствие типов!"
  ModelSpace.OleFunction("AddExtrudedSolidAlongPath",Region,PolyLine3d);
Ясно, что надо делать приведение типов, но как? Что к чему приводить?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог