Тема: Как выдавить region через Delphi ?

Как выдавить region через Delphi ?
Region - входные данные
3D - выходные
Есть проблемы с OleVariant !

Re: Как выдавить region через Delphi ?

Сталкнулся с такой же проблемой.
Если разобрались, не подскажите как?

Re: Как выдавить region через Delphi ?

Попытаюсь поставить вопрос по-другому:

var
Oleregion: OleVariant;
region: IAcadRegion;
Solid: IAcad3DSolid;
region:= ModelSpace.AddRegion(Contur);

... здесь, по-видимому, как то надо преобразовать OleVariant в тип IAcadRegion ...

Solid:= ModelSpace.AddExtrudedSolid(region, 200, 0);

Если кто знает, как правильно преобразовывать тип OleVariant, подскажите пожалуйста. Заранее спасибо.

Re: Как выдавить region через Delphi ?

var
  Oleregion: OleVariant; // OleVariant - это большой геморрой
  region: IAcadRegion;
...
Oleregion:= ...;
{ Это конечно по хамски, но иногда такое преобразование типов проходит: }
region:= IAcadRegion(Oleregion);
Напиши о результатах. Если не получится, то нужно выкручиваться через интерфейс IUnknown, где-то был реальный пример, пока не могу его найти.

Re: Как выдавить region через Delphi ?

Спасибо за ответ.
Преобразовать вариант таким макаром я пытался - без результатно (Invalid typecast).
Вышел из проблемы по-другому.
Может кому пригодится.
Дело в том, что выдавливать регион мне необходимо сразу после его создания. Т.е. получить доступ к этому региону можно через порядковый номер объекта в базе приметивов.

var
  Oleregion, Contur: OleVariant;
 //геморой, но небольшой (ко всему привыкаешь)
  region: IAcadRegion;
begin
Contur:= VarArrayCreate([0, 0], varDispatch);
Contur[0]:= Polyline; //IAcadPolyline
OleRegion:= ModelSpace.AddRegion(Contur);
region:= (ModelSpace.Item(ModelSpace.Count-1) as IAcadRegion);
//выдавливаем на 500 по оси Z с улом поворота 0
ModelSpace.AddExtrudedSolid(region, 500, 0);
//СОВЕТ: удаляйте всё ненужное
PolyLine.Delete;
region.Delete;
...
end;

Re: Как выдавить region через Delphi ?

Всем привет!
Народ с выдавливанием PolyLine получается, а как например выдавить (построить 3D модель), например, дуги или линии? Подскажите пожайлуста! Заранее спасибо!

Re: Как выдавить region через Delphi ?

Пример предложенный Алексеем верен. Спасибо.
В свое время я решал эту проблему SendCommand'ом
Сейчас так
var
Reg1, Reg2:Olevariant;
Kontur : OleVariant;
region: IAcadRegion;
begin
Выдавливание сложного контура из прямых и дуг:
Kontur:=VarArrayCreate([0,8], vardispatch );
Kontur[0]:=Arc2;
Kontur[1]:=Arc5;
Kontur[2]:=Line5;
Kontur[3]:=Arc7;
Kontur[4]:=Line7;
Kontur[5]:=Line8;
Kontur[6]:=Arc8;
Kontur[7]:=Line6;
Kontur[8]:=Arc6;
Reg1:=okno.ModelSpace.AddRegion(Kontur);
region:= (Okno.ModelSpace.Item(Okno.ModelSpace.Count-1) as IAcadRegion);
Okno.ModelSpace.AddExtrudedSolid(region, 120, 0);

Re: Как выдавить region через Delphi ?

А как при выдавливании по контуру задать закручвание и масштаб? В AddExtrudedSolidAlongPath нет таких параметров как закручивание и масштаб.

Schesternya:=Acad_s.ActiveDocument.ModelSpace.AddExtrudedSolidAlongPath(Reg, line1);

Или они как то указываются параметре Path?

Re: Как выдавить region через Delphi ?

Попытался выдавить через командную строку, не получатеся... при вводе любой команды после "Сдвиг" программа ругается так "Вызов был отклонен"

Acad_s.ActiveDocument.SendCommand('AI_SELALL' + #13);
   line1:=Acad_s.ActiveDocument.ModelSpace.AddLine(zero_point,tan1);
   Acad_s.ActiveDocument.SendCommand('Сдвиг'+#13);
  { Acad_s.ActiveDocument.SendCommand('Масштаб'+#13); // Вот в этой строчке возникает ошибка "Вызов был отклонен" , что с ней делать?
   Acad_s.ActiveDocument.SendCommand(floattostr(mashtab)+#13);
   Acad_s.ActiveDocument.SendCommand('Закручивание'+#13);
   Acad_s.ActiveDocument.SendCommand(floattostr(angle_solid)+#13);
   Acad_s.ActiveDocument.SectionManager.Item(Acad_s.ActiveDocument.ModelSpace.Item(Acad_s.ActiveDocument.ModelSpace.
  Count-1));
   Acad_s.ActiveDocument.SendCommand(#13);

Может есть еще другой способ построить 3D тело с закручиванием?