求用CAD查找一种图形,相同的图形,查找后显示个数。求一个LISP程序。
我的意思是输入一个命令后,然后选择一个图形,一个范围,就能查找出该范围内相同的个数。求高手们帮忙编一个LISP程序。感激不尽。2楼那位大侠,你的程序我用了,怎么统计的数量...
我的意思是输入一个命令后,然后选择一个图形,一个范围,就能查找出该范围内相同的个数。求高手们帮忙编一个LISP程序。感激不尽。
2楼那位大侠,你的程序我用了,怎么统计的数量不对啊,而且不用选区域吗?它是在整个图中找?
那这程序可不可以加选区啊? 还是要该程序?我QQ554165119 展开
2楼那位大侠,你的程序我用了,怎么统计的数量不对啊,而且不用选区域吗?它是在整个图中找?
那这程序可不可以加选区啊? 还是要该程序?我QQ554165119 展开
4个回答
展开全部
这个要求太高了,
一个直线?
一个圆?
一个点?
一个块?
一个多线?
一个图层?
一个颜色?
一个文字?
要知道,要达到这些要求,以上每项都要一个代码,全部下来是很要时间的
一个直线?
一个圆?
一个点?
一个块?
一个多线?
一个图层?
一个颜色?
一个文字?
要知道,要达到这些要求,以上每项都要一个代码,全部下来是很要时间的
更多追问追答
追问
麻烦大侠了~ 如果大侠能帮忙,感激不尽,我会加分的
追答
你肯定是有目标的,比如说你具体这个“图形”可能是什么?
我看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(defun c:aq () ;同长、同图层曲线
(if (setq s1 (car (entsel "\n选择查找相同类型的圆,线,多段线的个数: ")))
(progn
(setq ll (getCurveLength s1)
la (xyp-DXF 8 s1)
i -1
qf (list '(0 . "*LINE,ARC,CIRCLE,ELLIPSE") (cons 8 la))
ss (ssget "x" qf)
ss1 (ssadd)
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(if (equal (getCurveLength s1) ll 1e-3)(ssadd s1 ss1))
)
(sssetfirst nil ss1)
(princ (strcat "\n找到 " (itoa (sslength ss1)) " 个对象"))
)
)
(princ)
)
(defun GetCurveLength (curve / )
(setq curve (vlax-ename->vla-object curve))
(vlax-curve-getDistAtParam curve
(vlax-curve-getEndParam curve)
)
)
(defun xyp-DXF (code s1 / ent lst a)
(if (= (type code) 'LIST)
(progn
(setq ent (entget s1)
lst '()
)
(foreach a code
(setq lst (cons (list a (cdr (assoc a ent))) lst))
)
(reverse lst)
)
(if (= code -3)
(cdr (assoc code (entget s1 '("*"))))
(cdr (assoc code (entget s1)))
)
)
)
;-------------end
(if (setq s1 (car (entsel "\n选择查找相同类型的圆,线,多段线的个数: ")))
(progn
(setq ll (getCurveLength s1)
la (xyp-DXF 8 s1)
i -1
qf (list '(0 . "*LINE,ARC,CIRCLE,ELLIPSE") (cons 8 la))
ss (ssget "x" qf)
ss1 (ssadd)
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(if (equal (getCurveLength s1) ll 1e-3)(ssadd s1 ss1))
)
(sssetfirst nil ss1)
(princ (strcat "\n找到 " (itoa (sslength ss1)) " 个对象"))
)
)
(princ)
)
(defun GetCurveLength (curve / )
(setq curve (vlax-ename->vla-object curve))
(vlax-curve-getDistAtParam curve
(vlax-curve-getEndParam curve)
)
)
(defun xyp-DXF (code s1 / ent lst a)
(if (= (type code) 'LIST)
(progn
(setq ent (entget s1)
lst '()
)
(foreach a code
(setq lst (cons (list a (cdr (assoc a ent))) lst))
)
(reverse lst)
)
(if (= code -3)
(cdr (assoc code (entget s1 '("*"))))
(cdr (assoc code (entget s1)))
)
)
)
;-------------end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你还不如用快速选择
更多追问追答
追问
快速选择只能选择分好的类啊,怎么选比如一个矩形长20宽10的相同的啊?或者一个由矩形园加图案填充的。
追答
你的要求太高了,比如说矩形,它可能是个多段线,选中后要判断它是否闭合?是不是四个顶点?四个角是不是直角?然后还要判断边长是否满足要求?
这还只是矩形,你还要加上填充,编程太复杂了.
你可以把这些形状作成块,比如画一个10*10的矩形,也可以加上填充,作成块,以后你需要20*10的矩形就把X比例改成2就行了,需要20*30的矩形就把X比例改成2,Y比例改成3.
这样就可以使用快速选择了,就算要编程,也会容易很多.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询