思路是:先将已知点加入一个列表1中,再将选择集里面所有线(包括直线,线段,圆弧)的端点加入一个列表2中,将列表3赋值等于列表2。遍历列表2中的元素,判断是否属于列表1,如属于,将列表3中该元素删除。遍历完成后,最后得到的列表3就是选择集里面所有线(包括直线,线段,圆弧)的端点没有已知点的列表。 下面是一个类似的例子,可参考 ;;; ================================================================= ;;; 优化中心线点X坐标 (defun TT-10 (ss xxx / ent ent1 i ptzhongxinx ptzhongxiny ssguol2 x1 x2 y1 y2) (setq ssguol2 '("ACAD_ISO04W100" "ACAD_ISO08W100" "CENTER" "CENTER2" "CENTERX2" "DASHDOT" "DASHDOT2" "DASHDOTX2" ) ) ; 下面程序将中心线图层加入一个列表 (setq ssguol2 (append SSguol2 (TT-01 "ACAD_ISO04W100") (TT-01 "ACAD_ISO08W100") (TT-01 "CENTER") (TT-01 "CENTER2") (TT-01 "CENTERX2") (TT-01 "DASHDOT") (TT-01 "DASHDOT2") (TT-01 "DASHDOTX2") ) ) ; 下面程序将选择集中随层的中心线加入一个列表 (SETQ i 0 PTzhongxinX '() PTzhongxinY '() ) (while (< i (sslength ss)) (setq ent (ssname ss i)) (setq ent1 (entget ent)) (if (or (and (member (cdr (assoc 8 ent1)) ssguol2) (/= (cdr (assoc 0 ent1)) "INSERT") (= (assoc 6 ent1) nil) ) (member (cdr (assoc 6 ent1)) ssguol2) ) (progn (setq X1 (car (cdr (assoc 10 ent1))) Y1 (cadr (cdr (assoc 10 ent1))) X2 (car (cdr (assoc 11 ent1))) Y2 (cadr (cdr (assoc 11 ent1))) ) (if (= Y1 Y2) (progn (setq PTzhongxinX (cons (list X1 Y1 0.0) PTzhongxinX)) (setq PTzhongxinX (cons (list X2 Y2 0.0) PTzhongxinX)) ) ) (if (= X1 X2) (progn (setq PTzhongxinY (cons (list X1 Y1 0.0) PTzhongxinY)) (setq PTzhongxinY (cons (list X2 Y2 0.0) PTzhongxinY)) ) ) ) ) (SETQ i (+ 1 i)) ) (SETQ i 0) (while (< i (length PTzhongxinX)) (if (member (nth i PTzhongxinX) xxx) (SETQ xxx (vl-remove (nth i PTzhongxinX) xxx)) ) (SETQ i (+ 1 i)) ) xxx ) |