Тема: Как выдавить region через Delphi ?
Как выдавить region через Delphi ?
Region - входные данные
3D - выходные
Есть проблемы с OleVariant !
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Как выдавить region через Delphi ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как выдавить region через Delphi ?
Region - входные данные
3D - выходные
Есть проблемы с OleVariant !
Сталкнулся с такой же проблемой.
Если разобрались, не подскажите как?
Попытаюсь поставить вопрос по-другому:
var Oleregion: OleVariant; region: IAcadRegion; Solid: IAcad3DSolid; region:= ModelSpace.AddRegion(Contur);
... здесь, по-видимому, как то надо преобразовать OleVariant в тип IAcadRegion ...
Solid:= ModelSpace.AddExtrudedSolid(region, 200, 0);
Если кто знает, как правильно преобразовывать тип OleVariant, подскажите пожалуйста. Заранее спасибо.
var
Oleregion: OleVariant; // OleVariant - это большой геморрой
region: IAcadRegion;
...
Oleregion:= ...;
{ Это конечно по хамски, но иногда такое преобразование типов проходит: }
region:= IAcadRegion(Oleregion);
Напиши о результатах. Если не получится, то нужно выкручиваться через интерфейс IUnknown, где-то был реальный пример, пока не могу его найти.
Спасибо за ответ.
Преобразовать вариант таким макаром я пытался - без результатно (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;
Всем привет!
Народ с выдавливанием PolyLine получается, а как например выдавить (построить 3D модель), например, дуги или линии? Подскажите пожайлуста! Заранее спасибо!
Пример предложенный Алексеем верен. Спасибо.
В свое время я решал эту проблему 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);
А как при выдавливании по контуру задать закручвание и масштаб? В AddExtrudedSolidAlongPath нет таких параметров как закручивание и масштаб.
Schesternya:=Acad_s.ActiveDocument.ModelSpace.AddExtrudedSolidAlongPath(Reg, line1);
Или они как то указываются параметре Path?
Попытался выдавить через командную строку, не получатеся... при вводе любой команды после "Сдвиг" программа ругается так "Вызов был отклонен"
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 тело с закручиванием?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Как выдавить region через Delphi ?
Форум работает на PunBB, при поддержке Informer Technologies, Inc