Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
6-1101368472
Жуков
2004-11-25 10:41
2005.03.20
Сообщения по локальной сети


1-1109954622
muhan
2005-03-04 19:43
2005.03.20
Как создать кнопку


1-1109921070
Оля
2005-03-04 10:24
2005.03.20
Чтение строки из TMemorystream


14-1109835918
syte_ser78
2005-03-03 10:45
2005.03.20
QuickRep


1-1109945259
Lakshmy
2005-03-04 17:07
2005.03.20
Комбинация клавиш на компоненте