转,求交点
<p>;;;get inters from <br/><br/>(defun c:j (/ osm)<br/> (setvar "cmdecho" 0)<br/> (setq osm (getvar "osmode"))<br/> (setvar "osmode" 0)<br/><br/> (defun getinter (s1 s2 / name dxf_nub long1<br/> long2 long3 x lst lst1 lst2 lst3<br/> lst4 lst5 lst6 lst7 lst8 pt<br/> )<br/><br/><br/><br/><br/>;;;获取图元组码<br/> (defun getdxf (name dxf_nub /)<br/> (cdr (assoc dxf_nub (entget name)))<br/> )<br/><br/><br/>;;;海伦公式,知道三边长求面积再求某高<br/> ;传进三边长,传出第一边的高<br/> (defun geth (long1 long2 long3 / s)<br/> (setq s (/ (+ long1 long2 long3) 2.))<br/> (setq<br/> dis_l2c (* 2.<br/> (/ (sqrt (* s (- s long1) (- s long2) (- s long3)))<br/> long1<br/> )<br/> )<br/> )<br/> )<br/>;;;返回表过滤,去除重复和空的表素<br/> ;传进表x,传出表lst<br/> (defun filters (x / len i j a b notin)<br/> (setq len (length x))<br/> (setq lst (list '()))<br/> (setq i 0)<br/> (setq notin nil)<br/> (if (> len 1)<br/> (progn<br/> (repeat len<br/> (setq a (nth i x))<br/> (if a<br/> (progn<br/> (setq j i)<br/> (setq notin nil)<br/> (repeat (- len j 1)<br/> (setq b (nth (1+ j) x))<br/> (if (and b<br/> (= (rtos (car a) 2 4) (rtos (car b) 2 4))<br/> (= (rtos (cadr a) 2 4) (rtos (cadr b) 2 4))<br/> (= (rtos (last a) 2 4) (rtos (last b) 2 4))<br/> )<br/> (setq notin t)<br/> )<br/> (setq j (1+ j))<br/> )<br/> (if (not notin)<br/> (setq lst (cons a lst))<br/> )<br/> )<br/> )<br/> (setq i (1+ i))<br/> )<br/> (setq lst (cdr (reverse lst)))<br/> )<br/> (car x)<br/> )<br/> )<br/><br/><br/><br/><br/>;;;点和点重合的断<br/> ;<br/> (defun POINT2POINT (x /)<br/> ;(print "p2p")<br/> (if<br/> (= 0<br/> (distance (getdxf s1 10)<br/> (getdxf s2 10)<br/> )<br/> )<br/> (getdxf s1 10)<br/> nil<br/> )<br/> )<br/><br/><br/>;;;点和线的判断,<a name="baidusnap0"></a><b style="COLOR: black; BACKGROUND-COLOR: #ffff66;">点到</b>两端点长度等于线长<br/> (defun POINT2LINE (x / pt pt1 pt2 s3)<br/> ;(print "pt2l")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq pt (getdxf s1 10)<br/> pt1 (getdxf s2 10)<br/> pt2 (getdxf s2 11)<br/> )<br/> (if (= (rtos (+ (distance pt pt1)<br/> (distance pt pt2)<br/> )<br/> 2<br/> 4<br/> )<br/> (rtos (distance pt1 pt2) 2 4)<br/> )<br/> (getdxf s1 10)<br/> nil<br/> )<br/> )<br/><br/><br/>;;;点和圆弧的判断,判断出圆弧中点,利用inters函数知道点是不是在圆弧上<br/> (defun POINT2ARC (x / s3 pt6 c r anga angb angmax angmin ac cen)<br/> ;(print "pt2arc")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq pt6 (getdxf s1 10))<br/> (setq c (getdxf s2 10))<br/> (setq r (getdxf s2 40))<br/> (if (= (rtos (distance c pt6) 2 4)<br/> (rtos r 2 4)<br/> )<br/> (progn<br/> (setq anga (getdxf s2 50))<br/> (setq angb (getdxf s2 51))<br/> (setq angmax (max anga angb))<br/> (setq angmin (min anga angb))<br/> (if (= angmax angb)<br/>;;;判断圆弧的中点<br/> (progn<br/> (setq ac (* (- angmax angmin) r))<br/> (setq cen (polar c (+ angmin (/ (- angmax angmin) 2.)) r))<br/> )<br/> (progn<br/> (setq angc (- (* 2. pi) (- angmax angmin)))<br/> (setq ac (* angc r))<br/> (setq cen (polar c (+ angmax (/ angc 2.)) r))<br/> )<br/> )<br/> (if (or (= 0 (distance pt6 cen))<br/> (inters (polar c (getdxf s2 50) r) cen c pt6)<br/> (inters (polar c (getdxf s2 51) r) cen c pt6)<br/> )<br/> (getdxf s1 10)<br/> nil<br/> )<br/> )<br/> )<br/> )<br/><br/>;;;点和圆的判断,<b style="COLOR: black; BACKGROUND-COLOR: #ffff66;">点到</b>边的距离等于半径长<br/> (defun POINT2CIRCLE (x / s3)<br/> ;(print "pt2c")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (if (= (rtos (distance (getdxf s2 10) (getdxf s1 10)) 2 4)<br/> (rtos (getdxf s2 40) 2 4)<br/> )<br/> (getdxf s1 10)<br/> nil<br/> )<br/> )<br/><br/>;;;点和多线判断,把多线打散,循环调用点线函数<br/> (defun POINT2LWPOLYLINE (x / temp ntemp sstemp s9 pt)<br/> ;(print "pt2pl")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq temp (entget s2))<br/> (entmake temp)<br/> (setq ntemp (entlast))<br/> (command "explode" s2 "")<br/> (setq s2 (entnext ntemp))<br/> (setq sstemp (ssadd))<br/> (while s2<br/> (setq s9 s2)<br/> (cond ((= (getdxf s2 0) "LINE")<br/> (if (POINT2LINE 0)<br/> (setq pt t)<br/> (setq pt nil)<br/> )<br/> )<br/> ((= (getdxf s2 0) "ARC")<br/><br/> (if (POINT2ARC 0)<br/> (setq pt t)<br/> (setq pt nil)<br/> )<br/> )<br/> )<br/> (ssadd s9 sstemp)<br/> (setq s2 (entnext s9))<br/> )<br/> (command "erase" sstemp "")<br/> (if pt<br/> (getdxf s1 10)<br/> nil<br/> )<br/> )<br/><br/>;;;线和线判断<br/> (defun LINE2LINE (x /)<br/> (inters (getdxf s1 10)<br/> (getdxf s1 11)<br/> (getdxf s2 10)<br/> (getdxf s2 11)<br/> )<br/> )<br/>;;;线和圆的判断,先判断圆心<a name="baidusnap1"></a><b style="COLOR: black; BACKGROUND-COLOR: #a0ffff;">到线的距离</b>,再判断圆心到线的垂足点,再判断圆线交点是否在线上<br/> (defun LINE2CIRCLE (x / long1 long2 long3 s s3 r<br/> c pt1 pt2 ang dis_l2c ang inter<br/> s4<br/> )<br/> ;(print "l2c")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq s4 s1)<br/> (setq r (getdxf s2 40))<br/> (setq c (getdxf s2 10))<br/> (setq pt1 (getdxf s1 10)<br/> pt2 (getdxf s1 11)<br/> )<br/> (setq longa (distance pt1 pt2)) ;线长<br/> (setq longb (distance pt1 c))<br/> ;圆心端点一距离<br/> (setq longc (distance pt2 c))<br/> ;圆心端点二距离<br/> (setq dis_l2c (geth longa longb longc)) ;圆心到直线距离<br/> (setq ang (angle pt1 pt2)) ;直线的一个角度<br/>;;;判断垂足---><br/> (setq inter (polar c (+ ang (/ pi 2.)) dis_l2c))<br/> (setq pt nil)<br/> (while (not pt)<br/> (command "point" inter "")<br/> (setq s2 (entlast))<br/> (if (or (= (rtos (angle inter pt1) 2 5)<br/> (rtos (angle inter pt2) 2 5)<br/> )<br/> (POINT2LINE 1)<br/> )<br/> (setq pt inter)<br/> (progn (setq pt t)<br/> (setq inter (polar c (- ang (/ pi 2.)) dis_l2c))<br/> )<br/> )<br/> (entdel (entlast))<br/> )<br/><br/>;;;<---判断垂足<br/> (setq lst (list '()))<br/> (cond<br/> ((= r dis_l2c) ;相切情况<br/> pt<br/> )<br/><br/> ((> r dis_l2c) ;相交情况<br/> (setq s2 (polar inter<br/> (+ pi ang)<br/> (sqrt (- (expt r 2.) (expt dis_l2c 2.)))<br/> )<br/> )<br/> (repeat 2<br/> (command "point" s2 "")<br/> (setq s2 (entlast))<br/> (setq s1 s4)<br/> (if (setq pt (POINT2LINE 1))<br/> (setq lst (cons pt lst))<br/> )<br/> (entdel (entlast))<br/> (setq s2 (polar inter<br/> ang<br/> (sqrt (- (expt r 2.) (expt dis_l2c 2.)))<br/> )<br/> )<br/> )<br/> (filters lst)<br/> )<br/> )<br/> )<br/><br/><br/>;;;线和圆弧,线和圆的交点(已经判断交点是否在线上)是否在圆弧上<br/> (defun LINE2ARC (x / s3 s5 pt3 pta pt1)<br/> ;(print "l2a")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq s5 s2)<br/> (setq pt3 (LINE2CIRCLE 0))<br/> (setq lst2 (list '()))<br/> (setq s2 s5)<br/> (if (setq pta (car pt3))<br/> (cond<br/> ((car (cdr pt3))<br/> (repeat 2<br/> (command "point" pta "")<br/> (setq s2 s5)<br/> (setq s1 (entlast))<br/> (if (setq pt1 (POINT2ARC 0))<br/> (setq lst2 (cons pt1 lst2))<br/> )<br/> (entdel (entlast))<br/> (setq pta (cadr pt3))<br/> )<br/> (filters lst2)<br/> )<br/><br/> ((not (car (cdr pt3)))<br/> (command "point" pta "")<br/> (setq s1 (entlast))<br/> (setq s2 s5)<br/> (if (setq pt1 (POINT2ARC 0))<br/> (setq lst2 (cons pt1 lst2))<br/> )<br/> (entdel (entlast))<br/> (setq pta (cadr pt3))<br/> (filters lst2)<br/> )<br/> )<br/> )<br/> )<br/><br/><br/><br/>;;;线和多线,打散后判断线和线的交点<br/> (defun LINE2LWPOLYLINE (x / s3 temp ntemp sstemp s11 pt)<br/> ;(print "l2pl")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/><br/> (setq temp (entget s2))<br/> (entmake temp)<br/> (setq ntemp (entlast))<br/> (command "explode" s2 "")<br/> (setq s2 (entnext ntemp))<br/> (setq sstemp (ssadd))<br/> (setq lst7 (list '()))<br/> (setq s10 s1)<br/> (while s2<br/> (setq s11 s2)<br/> (setq s1 s10)<br/> (cond ((= (getdxf s2 0) "LINE")<br/> (if (setq pt (LINE2LINE 0))<br/> (setq lst7 (cons pt lst7))<br/> )<br/> )<br/> ((= (getdxf s2 0) "ARC")<br/> (if (setq pt (LINE2ARC 0))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst7 (cons (car pt) (cons (cadr pt) lst7)))<br/> (setq lst7 (cons (car pt) lst7))<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (ssadd s11 sstemp)<br/> (setq s2 (entnext s11))<br/> )<br/> (command "erase" sstemp "")<br/> (if (cdr lst7)<br/> (filters lst7)<br/> (setq pt nil)<br/> )<br/> )<br/><br/><br/>;;;圆和圆,算出弦长,弦中心点,得到两个交点<br/> (defun CIRCLE2CIRCLE<br/> (x / r1 r2 c1 c2 dis ang chord2 ptc pt1 pt2 pta ptb ptc)<br/> ;(print "c2c")<br/> (setq r1 (getdxf s1 40))<br/> (setq r2 (getdxf s2 40))<br/> (setq c1 (getdxf s1 10))<br/> (setq c2 (getdxf s2 10))<br/> (setq dis (distance c1 c2))<br/> (setq ang (angle c1 c2))<br/> (cond<br/> ((< (+ dis (min r1 r2)) (max r1 r2))<br/> nil<br/> )<br/> ((= (rtos (+ r1 r2) 2 4) (rtos dis 2 4))<br/>;;;一个交点的情况<br/> (setq pt (polar c1 ang r1))<br/> (command "point" pt "")<br/> (setq s1 (entlast))<br/> (if (POINT2CIRCLE 0)<br/> (progn<br/> (entdel (entlast))<br/> pt<br/> )<br/> (progn<br/> (entdel (entlast))<br/> (setq pt (polar c1 (+ pi ang) r1))<br/> )<br/> )<br/> )<br/> ((> (+ r1 r2) dis)<br/>;;;两个交点的情况<br/> (setq chord2 (geth dis r1 r2))<br/>;;;弦长的一半<br/> (setq lst (list '()))<br/> (setq<br/> ptc (polar c1 ang (sqrt (- (expt r1 2) (expt chord2 2))))<br/> )<br/> (setq pt1 (polar ptc (+ ang (/ pi 2.)) chord2))<br/> (setq pt2 (polar ptc (- ang (/ pi 2.)) chord2))<br/> (command "point" pt1 "")<br/> (setq s1 (entlast))<br/> (if (POINT2CIRCLE 0)<br/> (setq pta t)<br/> (setq pta nil)<br/> )<br/> (entdel (entlast))<br/> (command "point" pt2 "")<br/> (setq s1 (entlast))<br/> (if (POINT2CIRCLE 0)<br/> (setq ptb t)<br/> (setq ptb nil)<br/> )<br/> (entdel (entlast))<br/> (if (or (= pta t) (= ptb t))<br/> (progn<br/> (setq lst (filters (cons pt1 (cons pt2 lst))))<br/> )<br/> (progn<br/> (setq ptc (polar c1<br/> (+ pi ang)<br/> (sqrt (- (expt r1 2) (expt chord2 2)))<br/> )<br/> )<br/> (setq pt1 (polar ptc (+ ang (/ pi 2.)) chord2))<br/> (setq pt2 (polar ptc (- ang (/ pi 2.)) chord2))<br/> (setq lst (filters (cons pt1 (cons pt2 lst))))<br/> )<br/> )<br/> )<br/> )<br/><br/><br/> )<br/>;;;圆和圆弧,获取两圆交点,判断交点是否在圆弧上<br/> (defun CIRCLE2ARC (x / s3 pt1 pt2)<br/> ;(print "c2a")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (if (setq lst (CIRCLE2CIRCLE 0))<br/> (cond<br/> ((car (cdr lst))<br/><br/> (setq pt1 (car lst))<br/> (setq pt2 (cadr lst))<br/> (setq lst (list '()))<br/> (repeat 2<br/> (command "point" pt1 "")<br/> (setq s1 (entlast))<br/> (if (POINT2ARC 0)<br/> (setq lst (cons pt1 lst))<br/> )<br/> (entdel (entlast))<br/> (setq pt1 pt2)<br/> )<br/> (filters lst)<br/> )<br/> ((not (car (cdr lst)))<br/> (setq pt1 (car lst))<br/> (setq lst (list '()))<br/><br/> (command "point" pt1 "")<br/> (setq s1 (entlast))<br/> (if (POINT2ARC 0)<br/> (setq lst (cons pt1 lst))<br/> )<br/> (entdel (entlast))<br/><br/> (setq pt1 pt2)<br/> (filters lst)<br/> )<br/> )<br/> nil<br/> )<br/> )<br/><br/>;;;圆和多线,打散后调用线和圆相交函数<br/> (defun CIRCLE2LWPOLYLINE (x / s3 s8 temp ntemp sstemp pt i2)<br/> ;(print "c2pl")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq s8 s1)<br/> (setq temp (entget s2))<br/> (entmake temp)<br/> (setq ntemp (entlast))<br/> (command "explode" s2 "")<br/> (setq s2 (entnext ntemp))<br/> (setq sstemp (ssadd))<br/> (setq lst6 (list '()))<br/> (while s2<br/> (ssadd s2 sstemp)<br/> (setq s2 (entnext s2))<br/> )<br/> (setq i2 0)<br/> (setq len (sslength sstemp))<br/> (repeat len<br/> (setq s2 s8)<br/> (setq s1 (ssname sstemp i2))<br/> (cond ((= "LINE" (getdxf s1 0))<br/> (if (setq pt (LINE2CIRCLE 0))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst6 (cons (car pt) (cons (cadr pt) lst6)))<br/> (setq lst6 (cons (car pt) lst6))<br/> )<br/> )<br/> )<br/> )<br/> ((= "ARC" (getdxf s1 0))<br/> (if (setq pt (CIRCLE2ARC 1))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst6 (cons (car pt) (cons (cadr pt) lst6)))<br/> (setq lst6 (cons (car pt) lst6))<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (setq i2 (1+ i2))<br/> )<br/> (command "erase" sstemp "")<br/> (if (cdr lst6)<br/> (filters lst6)<br/> nil<br/> )<br/> )<br/><br/>;;;圆弧和圆弧,获取两圆交点,判断该点是否在圆弧上<br/> (defun ARC2ARC (x / s13 s14 pt pta pt1)<br/> ;(print "a2a")<br/> (setq s13 s1)<br/> (setq s14 s2)<br/> (setq pt (CIRCLE2ARC 0))<br/> (setq lst2 (list '()))<br/> (if (setq pta (car pt))<br/> (cond<br/> ((car (cdr pt))<br/> (repeat 2<br/> (command "point" pta "")<br/> (setq s1 (entlast))<br/> (setq s2 s13)<br/> (if (setq pt1 (POINT2ARC 0))<br/> (setq lst2 (cons pt1 lst2))<br/> )<br/> (entdel (entlast))<br/> (setq pta (cadr pt))<br/> )<br/> (filters lst2)<br/> )<br/><br/> ((not (car (cdr pt)))<br/> (command "point" pta "")<br/> (setq s1 (entlast))<br/> (setq s2 s13)<br/> (if (setq pt1 (POINT2ARC 0))<br/> (setq lst2 (cons pt1 lst2))<br/> )<br/> (entdel (entlast))<br/> (setq pta (cadr pt))<br/> (filters lst2)<br/> )<br/> (nil t)<br/> )<br/> nil<br/> )<br/> )<br/>;;;圆弧和多线,打散调用线和圆弧判断函数<br/> (defun ARC2LWPOLYLINE (x / s3 temp ntemp sstemp s6 i len pt)<br/> ;(print "a2lw")<br/> (if (= x 1)<br/> (progn<br/> (setq s3 s1)<br/> (setq s1 s2)<br/> (setq s2 s3)<br/> )<br/> )<br/> (setq temp (entget s2))<br/> (entmake temp)<br/> (setq ntemp (entlast))<br/> (command "explode" s2 "")<br/> (setq s2 (entnext ntemp))<br/> (setq sstemp (ssadd))<br/> (setq lst4 (list '()))<br/> (while s2<br/> (ssadd s2 sstemp)<br/> (setq s2 (entnext s2))<br/> )<br/> (setq i 0)<br/> (setq len (sslength sstemp))<br/> (setq s6 s1)<br/> (repeat len<br/> (setq s2 (ssname sstemp i))<br/> (cond ((= "LINE" (getdxf s2 0))<br/> (if (setq pt (LINE2ARC 1))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst4 (cons (car pt) (cons (cadr pt) lst4)))<br/> (setq lst4 (cons (car pt) lst4))<br/> )<br/> )<br/> )<br/> )<br/> ((= "ARC" (getdxf s2 0))<br/> (if (setq pt (ARC2ARC 0))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst4 (cons (car pt) (cons (cadr pt) lst4)))<br/> (setq lst4 (cons (car pt) lst4))<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (setq s1 s6)<br/> (setq i (1+ i))<br/> )<br/> (command "erase" sstemp "")<br/> (if (cdr lst4)<br/> (filters lst4)<br/> nil<br/> )<br/> )<br/><br/>;;;多线和多线判断<br/> (defun LWPOLYLINE2LWPOLYLINE<br/> (x / temp1 ntemp1 temp2<br/> ntemp1 ntemp2 sstemp1 sstemp2<br/> len1 len2 i j pta<br/> ptb ptc ptd s15<br/> )<br/> ;(print "pl2pl")<br/> (setq temp1 (entget s1))<br/> (entmake temp1)<br/> (setq ntemp1 (entlast))<br/> (command "explode" s1 "")<br/> (setq s1 (entnext ntemp1))<br/> (setq sstemp1 (ssadd))<br/> (setq lst5 (list '()))<br/> (while s1<br/> (ssadd s1 sstemp1)<br/> (setq s1 (entnext s1))<br/> )<br/> (setq temp2 (entget s2))<br/> (entmake temp2)<br/> (setq ntemp2 (entlast))<br/> (command "explode" s2 "")<br/> (setq s2 (entnext ntemp2))<br/> (setq sstemp2 (ssadd))<br/> (while s2<br/> (ssadd s2 sstemp2)<br/> (setq s2 (entnext s2))<br/> )<br/> (setq i 0)<br/> (setq len1 (sslength sstemp1))<br/> (setq len2 (sslength sstemp2))<br/> (repeat len1<br/> (setq s1 (ssname sstemp1 i))<br/> (setq s15 s1)<br/> (setq j 0)<br/> (cond<br/> ((= "LINE" (getdxf s1 0))<br/> (repeat len2<br/> (setq s2 (ssname sstemp2 j))<br/> (cond<br/> ((= "LINE" (getdxf s2 0))<br/> (setq s1 s15)<br/> (setq pta (getdxf s1 10)<br/> ptb (getdxf s1 11)<br/> ptc (getdxf s2 10)<br/> ptd (getdxf s2 11)<br/> )<br/> (if (setq pt (inters pta ptb ptc ptd))<br/> (setq lst5 (cons pt lst5))<br/> )<br/> )<br/> ((= "ARC" (getdxf s2 0))<br/> (setq s1 s15)<br/> (if (setq pt (LINE2ARC 0))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst5 (cons (car pt) (cons (cadr pt) lst5)))<br/> (setq lst5 (cons (car pt) lst5))<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (setq j (1+ j))<br/> )<br/> (setq i (1+ i))<br/> )<br/> ((= "ARC" (getdxf s1 0))<br/> (repeat len2<br/> (setq s2 (ssname sstemp2 j))<br/> (cond<br/> ((= "LINE" (getdxf s2 0))<br/> (setq s1 s15)<br/> (if (setq pt (LINE2ARC 1))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst5 (cons (car pt) (cons (cadr pt) lst5)))<br/> (setq lst5 (cons (car pt) lst5))<br/> )<br/> )<br/> )<br/> )<br/> ((= "ARC" (getdxf s2 0))<br/> (setq s1 s15)<br/> (if (setq pt (ARC2ARC 0))<br/> (progn<br/> (if (cdr pt)<br/> (setq lst5 (cons (car pt) (cons (cadr pt) lst5)))<br/> (setq lst5 (cons (car pt) lst5))<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (setq j (1+ j))<br/> )<br/> (setq i (1+ i))<br/> )<br/> )<br/> )<br/><br/> (command "erase" sstemp1 sstemp2 "")<br/> (if (cdr lst5)<br/> (filters lst5)<br/> nil<br/> )<br/> )<br/><br/><br/><br/><br/><br/><br/> (setq dxf_name1 (getdxf s1 0))<br/> (setq dxf_name2 (getdxf s2 0))<br/><br/><br/><br/><br/>;;;图元类型判断<br/> (cond<br/>;;;点类型判断<br/> ((= dxf_name1 "POINT")<br/> (cond<br/> ((= dxf_name2 "POINT")<br/> (POINT2POINT 0)<br/> )<br/> ((= dxf_name2 "LINE")<br/> (POINT2LINE 0)<br/> )<br/> ((= dxf_name2 "ARC")<br/> (POINT2ARC 0)<br/> )<br/> ((= dxf_name2 "CIRCLE")<br/> (POINT2CIRCLE 0)<br/> )<br/> ((= dxf_name2 "POLYLLINE")<br/> (POINT2LWPOLYLINE 0)<br/> )<br/> ((= dxf_name2 "LWPOLYLINE")<br/> (POINT2LWPOLYLINE 0)<br/> )<br/> (T nil)<br/> )<br/> )<br/>;;;线类型判断<br/> ((= dxf_name1 "LINE")<br/> (cond<br/> ((= dxf_name2 "LINE")<br/> (LINE2LINE 0)<br/> )<br/> ((= dxf_name2 "POINT")<br/> (POINT2LINE 1)<br/> )<br/> ((= dxf_name2 "ARC")<br/> (LINE2ARC 0)<br/> )<br/> ((= dxf_name2 "CIRCLE")<br/> (LINE2CIRCLE 0)<br/> )<br/> ((= dxf_name2 "POLYLLINE")<br/> (LINE2LWPOLYLINE 0)<br/> )<br/> ((= dxf_name2 "LWPOLYLINE")<br/> (LINE2LWPOLYLINE 0)<br/> )<br/> (T nil)<br/> )<br/> )<br/>;;;圆类型判断<br/> ((= dxf_name1 "CIRCLE")<br/> (cond<br/> ((= dxf_name2 "POINT")<br/> (POINT2CIRCLE 1)<br/> )<br/> ((= dxf_name2 "LINE")<br/> (LINE2CIRCLE 1)<br/> )<br/> ((= dxf_name2 "CIRCLE")<br/> (CIRCLE2CIRCLE 0)<br/> )<br/> ((= dxf_name2 "ARC")<br/> (CIRCLE2ARC 0)<br/> )<br/> ((= dxf_name2 "POLYLLINE")<br/> (CIRCLE2LWPOLYLINE 0)<br/> )<br/> ((= dxf_name2 "LWPOLYLINE")<br/> (CIRCLE2LWPOLYLINE 0)<br/> )<br/> (T nil)<br/> )<br/> )<br/><br/>;;;圆弧断<br/> ((= dxf_name1 "ARC")<br/> (cond<br/> ((= dxf_name2 "POINT")<br/> (POINT2ARC 1)<br/> )<br/> ((= dxf_name2 "LINE")<br/> (LINE2ARC 1)<br/> )<br/> ((= dxf_name2 "CIRCLE")<br/> (CIRCLE2ARC 1)<br/> )<br/> ((= dxf_name2 "ARC")<br/> (ARC2ARC 0)<br/> )<br/> ((= dxf_name2 "POLYLLINE")<br/> (ARC2LWPOLYLINE 0)<br/> )<br/> ((= dxf_name2 "LWPOLYLINE")<br/> (ARC2LWPOLYLINE 0)<br/> )<br/> (T nil)<br/> )<br/> )<br/><br/>;;;多线判断<br/> ((= dxf_name1 "LWPOLYLINE")<br/> (cond<br/> ((= dxf_name2 "POINT")<br/> (POINT2LWPOLYLINE 1)<br/> )<br/> ((= dxf_name2 "LINE")<br/> (LINE2LWPOLYLINE 1)<br/> )<br/> ((= dxf_name2 "CIRCLE")<br/> (CIRCLE2LWPOLYLINE 1)<br/> )<br/> ((= dxf_name2 "ARC")<br/> (ARC2LWPOLYLINE 1)<br/> )<br/> ((= dxf_name2 "POLYLLINE")<br/> (LWPOLYLINE2LWPOLYLINE 0)<br/> )<br/> ((= dxf_name2 "LWPOLYLINE")<br/> (LWPOLYLINE2LWPOLYLINE 0)<br/> )<br/> (T nil)<br/> )<br/> )<br/><br/> (T nil)<br/> )<br/> )<br/> ;(if (= dxf_name1 "LINE"))<br/><br/>;;;临时<br/> (setq a (car (entsel "选取一个图元(POINT/LINE/ARC/PLINE/CIRCLE)")))<br/> (print "---->")<br/> (print "------->")<br/> (print "---------->")<br/> (setq b (car<br/> (entsel "选取另外一个图元(POINT/LINE/ARC/PLINE/CIRCLE)")<br/> )<br/> )<br/> (setq return (getinter a b))<br/> (setvar "osmode" osm)<br/> (if return<br/> return<br/> (print "没有交点")<br/> )<br/>)</p> <p>感觉楼主的这个程序有点麻烦。。。维护起来也有点麻烦,发个前辈写的(部分修改)</p> 回复 kmust_tang 的帖子这个确实不错,很好 谢谢分享啦,总是在需要的时候,能找到所需的内容,楼主程序包含较多的元素,很适合学习与借鉴。 谢谢正需要求交点
页:
[1]