严重关切:CAD中求交点(100分)

  • 主题发起人 主题发起人 emoth
  • 开始时间 开始时间
E

emoth

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高高手,小弟我想用CAD的COM技术来自动求CAD图形中的线交点。现在我用的笨办法
是去自动捕捉交点,能不能用GetEntit方法获取两条线的实体来自动求此两条线
(曲线或多义线)的交点(也有可能是外观交点,如两条线不在一个Z坐标)呢。
谢谢帮助!!!

 
怎么没有人回应啊
 
我有二维坐标的
 
吕FW:
能发个给我吗?SHAOQINGZHONG@21CN.COM
 
你用的是不是acad2000,如果是的话当然可以了,你可以先在lisp中试验一下,通过后再
转换。因为lisp中的函数大多都有在com中对应的接口
 
//获得X1,Y1,X2,Y2的交点,无交点时返回FALSE,Flag为1时交点必须位于两个矩形交叉区域内,Flag为2时交点为广义交点,即直线的延长线有效
//注意:Flag为2时前四个参数一定为剪切线}
function GetIntersectedPoint(X1,Y1,X2,Y2,X3,Y3,X4,Y4 : Double;var XX,YY : double;Flag : integer):Boolean;
var
K1,K2,B1,B2 : double; {二条直线的斜率}
V1,V2 : Boolean; {有斜率为无穷大的线存在}
// V1,V2 : integer; {1 :初始值,2:TRUE, 3 : FALSE}
begin
//X1,Y1,X2,Y2 为第一条直线,X3,Y3,X4,Y4 为第二条直线}
V1 := FALSE;
V2 := FALSE;

K1 := MaxDouble;
K2 := 5 * 10 - 324;
B1 := K1;
B2 := K2;
if Abs(X2-X1)>0.00000000001 then begin
K1 := (Y2-Y1)/(X2-X1);
B1 := Y1-K1*X1;
end
else begin
XX := X1;
V1 := TRUE;
end;

if Abs(X4-X3)>0.00000000001 then begin
K2 := (Y4-Y3)/(X4-X3);
B2 := Y3-K2*X3;
end
else begin
XX := X3;
V2 := TRUE;
end;


if (Abs(K1 - K2) < 0.000000000000001) or (V1 and V2) then begin
Result := FALSE;
Exit;
end;

if (not V1) and (not V2) then begin
XX := (B1-B2)/(K2-K1);
YY := K1*XX+B1;
end
else if V2 then begin
YY := K1*XX+B1;
end else begin
YY := K2*XX+B2;
end;

if Flag = 1 then begin
//如果计算出来的交点位于两个矩形的公共区域,则为真交点}
if (IsPtInRect(XX,YY,X1,Y1,X2,Y2)) and (IsPtInRect(XX,YY,X3,Y3,X4,Y4)) then
result := TRUE
else
result := FALSE;
end
else
if Flag = 2 then begin
if (IsPtInRect(XX,YY,X3,Y3,X4,Y4)) then
result := TRUE
else
result := FALSE;
end;
end;
 
不知你已经解决没有啊?
求交点,是AutoCAD自带有的啊,你看过AutoCAD的帮助文件的 ActiveX 部份的帮助没有?

RetVal = object.IntersectWith(IntersectObject, ExtendOption)

Object

All Drawing Objects (Except Pviewport and PolygonMesh)
The object or objects this method applies to.

IntersectObject

Object, input-only;
The object can be one of All Drawing Objects.


ExtendOption

AcExtendOption enum; input-only
This option specifies if one or the other, both,
or none of the entities are to be extended in order to
attempt an intersection.

acExtendNone
Does not extend either object.

acExtendThisEntity
Extends the base object.

acExtendOtherEntity
Extends the object passed as an argument.

acExtendBoth
Extends both objects.


RetVal

Variant (array of doubles)
The array of points where one object intersects another object
in the drawing.

 
俺接受答案了!
 
后退
顶部