明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: lzy9788

这段代码有什么问题 lisp

  [复制链接]
 楼主| 发表于 2004-4-4 11:53:00 | 显示全部楼层
(defun c:dcc ()
(setvar "osmode" 0)
(setq p11 (getpoint "\n请选择起点:")
p12 (getcorner p11 "\n请选择另一角点:"))
(setq ss (ssget "c" p11 p12 '((0 . "LWPOLYLINE,LINE"))))
(setq num (sslength ss)
NN 0 NN1 0)
(while (< NN num)
(setq nam (ssname ss NN)
ent (entget nam))
(setq na_ty (cdr (assoc 0 ent))) (if (= NA_ty "LWPOLYLINE")
(progn
(pline_po)
(while (< NN1 num)
(setq nam1 (ssname ss NN)
ent1 (entget nam1))
(setq na_ty1 (cdr (assoc 0 ent1)))
(if (= NA_ty1 "LINE")
(progn
(line_p0)
(setq int1 (inters p-1 p-2 l-1 l-2)
int2 (inters p-3 p-4 l-1 l-2))
(if (/= int1 nil) (setq bb1 int1))
(if (/= int2 nil) (setq bb2 int2))
);end progn
);end if
(setq NN1 (1+ nn1))
);while
);progn
);end if
(setq NN (1+ NN))
);while
(princ (list bb1 bb2 p-1 p-2 p-3 p-4))
(princ));end defun
;求PLINE上的点
(defun pline_po ()
(load "get_pl_pot")
(setq plpot (get_pl_pot nam)) (setq plpot
(vl-sort plpot
(function (lambda (e1 e2)
(< (cadr e1) (cadr e2)) ) ) ) ;按Y坐标排序(小到大)
);;end setq (SETQ P-1 (NTH 0 plpot) p-2 (NTH 1 plpot));求点(水平) (setq lst1
(vl-sort (list p-1 p-2)
(function (lambda (e1 e2)
(< (car e1) (car e2)) ) ) ) ;按Y坐标排序(小到大)
);;end setq
(setq p-1 (nth 0 lst1) p-2 (nth 1 lst1)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq plpot1
(vl-sort plpot
(function (lambda (e1 e2)
(< (car e1) (car e2)) ) ) ) ;按X坐标排序(大到小)
);;end setq (setq p-3 (nth 2 plpot1) p-4 (nth 3 plpot1));求点(垂直)

(setq lst2
(vl-sort (list p-3 p-4)
(function (lambda (e1 e2)
(< (cadr e1) (cadr e2)) ) ) ) ;按Y坐标排序(小到大)
);;end setq
(setq p-3 (nth 0 lst2) p-4 (nth 1 lst2)) );end defun ;------------------------------------------------------ (defun line_po ()
(setq l-1 (cdr (assoc 10 ent1)) l-2 (cdr (assoc 11 ent1)))
);defun (defun GET_PL_POT (E / ED)
(defun DXF (NO)
(cdr (assoc NO ED))
)
(defun GETLWPL (ED / PL)
(while (setq ED (cdr (member (setq PL10 (assoc 10 ED))
ED
)
)
)
(setq PL (cons (cdr PL10) PL))
)
(reverse PL)
)
(defun GETPL (ED / E PL P10)
(setq E (DXF -1))
(while (setq E (entnext E))
(if (setq P10 (cdr (assoc 10 (entget E))))
(setq PL (cons P10 PL))
)
)
(reverse PL)
)
(setq ED (entget E))
(setq PLTYPE (DXF 0))
(cond
((= "POLYLINE" PLTYPE)
(GETPL ED)
)
((= "LWPOLYLINE" PLTYPE)
(GETLWPL ED)
)
)
)
 楼主| 发表于 2004-4-4 11:54:00 | 显示全部楼层
现在求出的int1 int2还是NIL
发表于 2004-4-4 12:09:00 | 显示全部楼层
知道自己粗心,就应该检查仔细点再传上来:line_p0和line_po


另外,你的l-1 l-2可能和p-1 p-2相交,也可能和p-3 p-4相交,但也可能和p-2 p-3相交(你不能确定现在判断的这条直线是水平还是垂直。。。


总之这个程序从语法、思路、实现方法等等都有很大的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 00:48 , Processed in 0.201984 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表