Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Acad2000 [D5]


Lord Warlock ©   (2002-12-02 10:06:00) 

var pl: variant;
APL: AcadPolyline;
AHT: AcadHatch;
lop: Variant;
begin


pl:=VarArrayCreate([1,9],varDouble);
pl[1]:=10;
pl[2]:=10;
pl[3]:=0;
pl[4]:=20;
pl[5]:=20;
pl[6]:=0;
pl[7]:=20;
pl[8]:=0;
pl[9]:=0;
APL:=AcDoc.ModelSpace.AddPolyline(pl);
APL.Color:=acRed;
APL.Closed:=True;
Lop:=VarArrayCreate([1,1],varVariant);
Lop[1]:=APL as AcadEntity;
AHT:=AcDoc.ModelSpace.AddHatch(acHatchPatternTypePreDefined,"SOLID",True);
AHT.AppendOuterLoop(lop);//Собственно тут возникает ошибка Invalid Object Array.

Вопрос - как нужно передавать параметр


k2   (2002-12-04 10:21:00) [1]

Или так, кому как удобнее

var
Acad : AcadApplication;
AcadDoc : AcadDocument;
MS : AcadModelSpace;

procedure TForm1.Button1Click(Sender: TObject);
type TEntType=array of AcadEntity;
var pl: OleVariant;
Apoly: AcadPolyline;
Ahatch: AcadHatch;
Autil:AcadUtility;
ent: TEntType;
begin
try
Acad:=GetActiveOleObject("AutoCAD.Application") as AcadApplication;
AcadDoc:=Acad.ActiveDocument as AcadDocument;
MS:=AcadDoc.ModelSpace as AcadModelSpace;
except
showmessage("Не удалось связалься с автокадом!");
exit;
end;

autil:=AcadDoc.Utility;
autil.Prompt("Hi!");

try
pl:=VarArrayCreate([0,8],varDouble);
pl[0]:=10; pl[1]:=10; pl[2]:=0;
pl[3]:=20; pl[4]:=20; pl[5]:=0;
pl[6]:=20; pl[7]:=0; pl[8]:=0;
Apoly:=MS.AddPolyline(pl);
Apoly.Color:=acRed;
Apoly.Closed:=True;
SetLength(ent,1);
ent[0]:=Apoly;

Ahatch:=MS.AddHatch(acHatchPatternTypePreDefined,"SOLID",True);
Ahatch.AppendOuterLoop(ent);
Ahatch.Evaluate;
Acad.Update;
except
on E: Exception do showmessage(E.Message);
end;
close;
end;


Lord Warlock   (2002-12-04 09:25:00) [2]

Благодарю!


Milz   (2002-12-03 12:55:00) [3]

Cорри за опоздание, срочная работа подкинулась...
У меня Д6 и акад 2002, по идее для разных версий должны быть только разные .tlb, работаем с автокадом посредством ActiveX-автоматизации, поэтому всё через IDispatch, если делать как ты напрямую то где/когда работает, а где/когда нет ...
"высвобождение" ссылок не привожу...




var
Acad : IAcadApplicationDisp;
AcadDoc : IAcadDocumentDisp;
MS : IAcadModelSpaceDisp;

procedure TForm1.Button1Click(Sender: TObject);

var pl: variant;
APL: IAcadPolylineDisp;
AHT: IAcadHatchDisp;
lop: Variant;
begin
try
Acad:=GetActiveOleObject("AutoCAD.Application") as IAcadApplicationDisp;
AcadDoc:=Acad.ActiveDocument as IAcadDocumentDisp;
MS:=AcadDoc.ModelSpace as IAcadModelSpaceDisp;
except
showmessage("Не удалось связалься с автокадом!");
exit;
end;

(AcadDoc.Utility as IAcadUtilityDisp).Prompt("Hi!");

try
pl:=VarArrayCreate([0,8],varDouble);
pl[0]:=10;
pl[1]:=10;
pl[2]:=0;
pl[3]:=20;
pl[4]:=20;
pl[5]:=0;
pl[6]:=20;
pl[7]:=0;
pl[8]:=0;
APL:=MS.AddPolyline(pl) as IAcadPolylineDisp;
APL.Color:=acRed;
APL.Closed:=True;

Lop:=VarArrayCreate([0,0],varDispatch); // т.к. передаём COM-объект
Lop[0]:=APL;
AHT:=MS.AddHatch(acHatchPatternTypePreDefined,"SOLID",True) as IAcadHatchDisp;
AHT.AppendOuterLoop(lop);
AHT.Evaluate;

Acad.Update;

except
on E: Exception do showmessage(E.Message);
end;

end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо