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

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

Autocad &Delphi [D7, WinXP]


bon ©   (2005-03-04 16:49:00) 

Привет, господа мастера. Помогите разобраться со следующей проблемой.

Запускаю автокад из делфей, всё нормально. Закрываю автокад. Опять пытаюсь запустить - ошибка (Сервер 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 17:11:00) [1]

Хорошо, а есть там у вас AcadDoc.Disconnect или что-то в таком духе?


bon   (2005-03-04 17:08:00) [2]

не помогло!!! какие будут еще предложения...


olookin   (2005-03-04 16:55:00) [3]

Может быть, в самом конце добавить VarClear(v)?


Наверх

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