Тема: Чтение DWG и DXF в исходниках Delphi без акада

CAD import VCL от
www.cadsofttools.com позволяет работать с DWG/DXF версий с 12 по 2006 без установленного автокада.
Демы на delphi и c++builder:
http://www.cadsofttools.com/download/CADImportVCL.zip

Re: Чтение DWG и DXF в исходниках Delphi без акада

Это просто замечательно, а вот как бы бесплатные компоненты найти???

Re: Чтение DWG и DXF в исходниках Delphi без акада

Народ, кто-нибудь в курсе, как их купить можно???

Re: Чтение DWG и DXF в исходниках Delphi без акада

Вот тут написал небольшую процедурку для перевода участка LWPolyline к виду арки с известным радиусом, центром арки и углами начала и конца скругления, учитывая знак "выпуклости"
b - значение за строкой " 42"
procedure Calc_LWPoly_Otr(x1,y1,x2,y2,b:extended;var x0,y0,r,a1,a2:extended);
var  x,y:extended;
     d,a0,h:Extended;
begin
   d:=sqrt(sqr(x2-x1)+sqr(y2-y1));  // Длина хорды
   h:=Abs(0.5*b*d);                 // Максимальная высота дуги над хордой
   r:=Abs(d*(1+b*b)/(4*b));         // Радиус скругления
   if x2-x1=0 then a0:=pi/2
    else a0:=abs(arctan((y2-y1)/(x2-x1)));
   if x2-x1<0 then a0:=pi-a0;
   if y2-y1<0 then a0:=2*pi-a0;     // Угол наклона хорды к оси OX
   a0:=a0-Pi/2*b/abs(b);            // Угол наклона перпендикуляра к хорде НА КОТОРОМ ЛЕЖИТ ЦЕНТР ОКРУЖНОСТИ
   x:=x1+(x2-x1)/2;                 // Абсцисса центра хорды
   y:=y1+(y2-y1)/2;                 // Ордината центра хорды
   x0:=x+(r-h)*cos(a0);             // Координаты центра окружности
   y0:=y+(r-h)*sin(a0);             //
   if x1-x0=0 then a1:=pi/2
     else a1:=abs(arctan((y1-y0)/(x1-x0)));
   if x1-x0<0 then a1:=pi-a1;
   if y1-y0<0 then a1:=-a1;     // Начальный угол дуги к оси ОХ
   if x2-x0=0 then a2:=pi/2
     else a2:=abs(arctan((y2-y0)/(x2-x0)));
   if x2-x0<0 then a2:=pi-a2;
   if y2-y0<0 then a2:=-a2;
   if b<0 then a2:=2*pi-abs(a2);  // Конечный угол дуги к оси ОХ
   a1:=a1*180/pi;          // Перевели углы к градусной мере...
   a2:=a2*180/pi;
end;
!!! Процедура выдаст ошибку при b=0 !!!

Re: Чтение DWG и DXF в исходниках Delphi без акада

r:=Abs(d*(1+b*b)/(4*b));
Гыыы... неужели не помнишь что на 0 делить нельзя