Построение объемной спирали в Builder C++ Ошибка: несоответствие типов
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Построение объемной спирали в Builder C++ Ошибка: несоответствие типов

Построение объемной спирали в Builder C++ Ошибка: несоответствие типов

Ответ
Поиск в этой теме
Непрочитано 15.01.2014, 15:19 #1
Построение объемной спирали в Builder C++ Ошибка: несоответствие типов
George22
 
Регистрация: 15.01.2014
Сообщений: 5

Рисую спираль путем выдавливания региона по полилинии.
Регион нарисовал, полилинию нарисовал.
Выскакивает ошибка на строчке кода:
Код:
[Выделить все]
 
ModelSpace.OleFunction("AddExtrudedSolidAlongPath",Region,PolyLine3d);
Пишет "Несоответствие типов", хотя вручную в Автокаде по команде Выдавить все получается т.е.
регион и полилинию я построил правильно.
Если надо - выложу весь код. По BuilderC++ в связке с Autocad информации практически ноль.
Изучать ObjectARX не хочу. Везде пишут: с Autocad можно работать из любого языка.
Просмотров: 3769
 
Непрочитано 15.01.2014, 15:50
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Чему равны на момент вызова Region и PolyLine3d? Это объекты или массивы объектов?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.01.2014, 16:55 Вот код нажатия на кнопку
#3
George22


 
Регистрация: 15.01.2014
Сообщений: 5


Код:
[Выделить все]
 
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonHelixClick(TObject *Sender)
{
 Variant Arr,Arc,Line,Center;
 double StartAngle = 0;
 double EndAngle = 3.14;

 const int N = 600;//построим спираль из N/3 точек
 Variant A;//массив 3D точек
 Variant PolyLine3d;//траектория-образующая для спирали

 double Radius = Edit1->Text.ToDouble();//радиус спирали
 double H = Edit3->Text.ToDouble(); //высота спирали


 double X = Radius;
 double Y =0;
 double Z =0;

 double Angle=0;//угол между двумя соседними точками спирали по XY
 double dZ;//шаг по высоте между соседними точками
 Center = GetPoint(X,Y,Z);//получим начало массива точек X Y Z
                          //и одновременно центр кружка

 Arc = ModelSpace.OleFunction("AddArc",Center,2,StartAngle,EndAngle);
 Line = ModelSpace.OleFunction("AddLine",Arc.OlePropertyGet("StartPoint"),
                                        Arc.OlePropertyGet("EndPoint"));
 int bounds[] = {0,1};
 Arr = VarArrayCreate(bounds,1,varDispatch);
 Arr.PutElement(Arc,0);
 Arr.PutElement(Line,1);

 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);
  Acad.OleFunction("ZoomExtents");
 }
//---------------------------------------------------------------------------


Код:
[Выделить все]
 
//--- Создает координатную точку в переменной типа Variant ------------------
Variant GetPoint(double X,double Y,double Z)
{
  Variant V;
  int Bounds[2]={0,2};//три элемента в массиве с индексами 0,1,2
  V = VarArrayCreate(Bounds,1,varDouble);
  V.PutElement(X,0);
  V.PutElement(Y,1);
  V.PutElement(Z,2);
  return V;
}
//---------------------------------------------------------------------------

Последний раз редактировалось George22, 15.01.2014 в 17:03.
George22 вне форума  
 
Непрочитано 15.01.2014, 17:53
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Почему в построение спирали передается Variant, когда требуется указатель на объект? Передавай Region[0] (ну или как там аналог будет)...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.01.2014, 22:44
#5
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от George22 Посмотреть сообщение
Изучать ObjectARX не хочу.
Ну-ну...
Цитата:
Сообщение от George22 Посмотреть сообщение
Везде пишут: с Autocad можно работать из любого языка.
Улыбнуло. Можно то можно, если имеются в виду только те языки, которые могут обеспечить вызов ActiveX/COM.
Но если сравнишь ActiveX модель AutoCAD и набор классов и методов доступных через ObjectARX или AutoCAD .NET API, то поймешь что практически ничего нельзя...
Александр Ривилис вне форума  
 
Непрочитано 15.01.2014, 23:16
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


То Александр Ривилис - да ладно если не "исхитряться" на тонкости ТЗ то COM'а, как правило, более чем достаточно + только им можно работать "снаружи" штатными средствами (то есть "исхитриться" можно и в другую сторону - что только COM). ИХМО задач где использование COM интерфейса более предпочтительней гораздо больше.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 15.01.2014, 23:29
#7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ИХМО задач где использование COM интерфейса более предпочтительней гораздо больше.
ИМХО - это только класс задач, когда нужно автоматически сгенерировать/подправить чертеж из какой-то программы, для которой AutoCAD что-то побочное и второстепенное...
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 16.01.2014, 15:04
#8
George22


 
Регистрация: 15.01.2014
Сообщений: 5


Не может быть, чтобы Builder не справился.
Сдаваться не хочется - уже в дизассемблер влез!
George22 вне форума  
 
Непрочитано 16.01.2014, 15:12
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


У тебя Region - это массив. Алексей тебе уже подсказал, что нужно передавать не массив, а первый элемент массива.
Александр Ривилис вне форума  
 
Непрочитано 16.01.2014, 15:56
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от George22 Посмотреть сообщение
Сдаваться не хочется - уже в дизассемблер влез!
и что Вы там надеетесь найти где je на jmp поменять??
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 17.01.2014, 08:00
#11
George22


 
Регистрация: 15.01.2014
Сообщений: 5


Дима, ты не умничай, а пальцем ткни...
Алексей, спасибо, все получилось:
я сначала написал не подумав:
Код:
[Выделить все]
 
ModelSpace.OleFunction("AddExtrudedSolidAlongPath", Region(0),PolyLine3d);
а надо то так:
Код:
[Выделить все]
 
ModelSpace.OleFunction("AddExtrudedSolidAlongPath", Region.GetElement(0),PolyLine3d);
Изображения
Тип файла: jpg 1.jpg (70.5 Кб, 135 просмотров)
George22 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Построение объемной спирали в Builder C++ Ошибка: несоответствие типов



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Расчет пространственных стержневых систем и наличие шарниров в расчетных схемах Jenec Лира / Лира-САПР 17 27.09.2013 22:23
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка Alexey_02 Программирование 3 06.03.2009 22:33
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47