Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизAutocad &Delphi Найти похожие ветки
← →
bon © (2005-03-04 16:49) [0]Привет, господа мастера. Помогите разобраться со следующей проблемой.
Запускаю автокад из делфей, всё нормально. Закрываю автокад. Опять пытаюсь запустить - ошибка (Сервер RPC недоступен.)
Вот код
procedure TFmPRORABOTKA.DrawingVALtoAUTOCAD(Dstup: array of real;Lstup: Array of real; Lprob,Lzahv:real);
var Lfull, maxD, delX:real;
i, n:integer;
Pt1, Pt2: OleVariant;
Lr: IAcadLayer;
Line: IAcadLine;
Pl: IAcadLWPolyline;
v : OleVariant;
Cr: IAcadCircle;
Dim: IAcadDimRotated;
begin
Try
v := GetActiveOleObject("AutoCAD.Application");
AcadDoc.ConnectTo((IDispatch(v) as IAcadApplication).ActiveDocument);
Except
AcadDoc.Connect
end;
LastDoc:= AcadDoc.Path+"\"+AcadDoc.Name;
// создание необходимых слоёв
AcadDoc.Linetypes.Add("CENTER");
Lr:= AcadDoc.Layers.Add("Основные");
Lr.color:= acWhite;
Lr.Linetype:= "Continuous";
Lr.Lineweight:= LineW("0,50");
Lr:= AcadDoc.Layers.Add("Осевые");
Lr.Linetype:= "CENTER";
Lr.color:= acBlue;
Lr.Lineweight:= LineW("0,15");
Lr:= AcadDoc.Layers.Add("Размерные");
Lr.Linetype:= "Continuous";
Lr.color:= acRed;
Lr.Lineweight:= LineW("0,18");
if AcadDoc.ActiveSpace = acPaperspace then AcadDoc.ActiveSpace:= acModelspace;
// активируем нужный нам слой по названию
AcadDoc.ActiveLayer:= ActivateLayer("Основные");
// точка вставки объекта в начале координат
InsertPoint:= GetFloatPoint(0, 0, 0);
n:=high(Dstup)+1;
Pt1:= VarArrayCreate([0, (8*n + 1)], VarDouble);
// Pt1:= VarArrayCreate([0, 9], VarDouble);
// начальная точка
Pt1[0]:= InsertPoint[0];
Pt1[1]:= InsertPoint[1];
delX:=InsertPoint[0];
maxD:=0;
Lfull:=0;
// задание массива координат контура вала
for i :=low(Dstup) to high(Dstup) do
begin
// 1-ая точка
Pt1[((4*i)+2)]:= delX;
Pt1[((4*i)+3)]:= InsertPoint[1]+Dstup[i]/2;
// 2-aя точка
Pt1[((4*i)+4)]:= delX+Lstup[i];
Pt1[((4*i)+5)]:= InsertPoint[1]+Dstup[i]/2;
// 3-я точка
Pt1[((4*((2*n)-i))-2)]:= delX+Lstup[i];
Pt1[((4*((2*n)-i))-1)]:= InsertPoint[1]-Dstup[i]/2;
// 4-aя точка
Pt1[(4*(2*n-i))]:= delX;
Pt1[((4*(2*n-i))+1)]:= InsertPoint[1]-Dstup[i]/2;
if (Dstup[i]<=Dstup[i-1]) and (i>0) then
begin
Line:=AcadDoc.ModelSpace.AddLine(
GetFloatPoint(delX, InsertPoint[1]+Dstup[i]/2, 0),
GetFloatPoint(delX, InsertPoint[1]-Dstup[i]/2, 0));
Line:=AcadDoc.ModelSpace.AddLine(
GetFloatPoint(delX, InsertPoint[1]+Dstup[i-1]/2, 0),
GetFloatPoint(delX + (Dstup[i-1]-Dstup[i])/16,
InsertPoint[1]+Dstup[i]/2, 0));
Line:=AcadDoc.ModelSpace.AddLine(
GetFloatPoint(delX, InsertPoint[1]-Dstup[i-1]/2, 0),
GetFloatPoint(delX + (Dstup[i-1]-Dstup[i])/16,
InsertPoint[1]-Dstup[i]/2, 0))
end;
if (Dstup[i]<=Dstup[i+1]) and (i<High(Dstup)) then
begin
Line:=AcadDoc.ModelSpace.AddLine(
GetFloatPoint(delX+Lstup[i], InsertPoint[1]+Dstup[i]/2, 0),
GetFloatPoint(delX+Lstup[i], InsertPoint[1]-Dstup[i]/2, 0));
Line:=AcadDoc.ModelSpace.AddLine(
GetFloatPoint(delX+Lstup[i], InsertPoint[1]+Dstup[i+1]/2, 0),
GetFloatPoint(delX+Lstup[i]-(Dstup[i+1]-Dstup[i])/16,
InsertPoint[1]+Dstup[i]/2, 0));
Line:=AcadDoc.ModelSpace.AddLine(
GetFloatPoint(delX+Lstup[i], InsertPoint[1]-Dstup[i+1]/2, 0),
GetFloatPoint(delX+Lstup[i]-(Dstup[i+1]-Dstup[i])/16,
InsertPoint[1]-Dstup[i]/2, 0));
end;
delX:=delX+Lstup[i];
Lfull:=Lfull+Lstup[i];
if Dstup[i]>maxD then maxD:=Dstup[i];
end;
Pl:= AcadDoc.ModelSpace.AddLightWeightPolyline(Pt1);
Pl.Closed:= true;
AcadDoc.ActiveSpace := acPaperspace;
end;
procedure TFmPRORABOTKA.ToolButton25Click(Sender: TObject);
begin
//DrawingVALtoAUTOCAD([820],[3320],180,0);
//Timer1.Enabled:=true;
DrawingVALtoAUTOCAD([295.00, 515.00, 640.00, 420.00],[210.00, 455.00, 860.00, 665.00],210 ,0.1);
//AcadDoc.Application.Quit;
end;
← →
olookin © (2005-03-04 16:55) [1]Может быть, в самом конце добавить VarClear(v)?
← →
bon © (2005-03-04 17:08) [2]не помогло!!! какие будут еще предложения...
← →
olookin © (2005-03-04 17:11) [3]Хорошо, а есть там у вас AcadDoc.Disconnect или что-то в таком духе?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.053 c