求助,关于统计封闭多线段范围内圆直径及数量的lsp修改问题
请教下各位大神,关于统计封闭多线段范围内圆直径及数量的lsp修改问题多数情况下要统计圆种类、数量的范围,都是用封闭多线段或云线来划分的不规则图形,不好框选,
如果改成统计所选封闭多线段范围内各种圆直径、数量并写到指定位置,就方便很多了。
万分谢谢!谢谢!!
这是ZZXXQQ大神提供的统计封闭多线段范围内圆数量的代码
(注:选择的多线段必须全在屏幕范围内,否则出错)
(defun c:tt ()
(while (and (setq s1 (entsel "\n选择多段线: "))
(setq ent (entget(car s1)))
(= (cdr(assoc 0 ent)) "LWPOLYLINE"))
(setq ptlst (list))
(foreach x ent (if (= (car x) 10) (setq ptlst (cons (cdr x) ptlst))))
(princ (setq n (sslength(ssget "WP" ptlst '((0 . "CIRCLE"))))))
)
(princ)
)
这是fan_zh大神提供的框选统计圆种类和数量的代码
(选择范围是框选,不是选择封闭多线段)
;;;统计相同矩形边长的数量.
;;;编写日期2013-07-05
;;;编写: CADMAN
;;;子函数 (求矩形边长)
;(defun qbc (pts / b h)
;(setq b (distance (car pts) (cadddr pts)))
;(setq h (distance (car pts) (cadr pts)))
;(cons (max b h) (min b h))
;);结束qbc
(defun c:tg ( / bclst pts ss el bc_new i p2 p3 m x1 x2)
(princ "\n请框选:")
(setq ss (ssget '((0 . "circle"))))
(setq i 0 bclst nil pts nil)
(repeat (sslength ss)
(setq el (entget (ssname ss i)))
(setq pts nil)
(foreach pt el (if (= (car pt) 40) (setq pts (cons (cdr pt) pts))))
(setq bclst (cons pts bclst))
(setq i (1+ i))
);repeat
(setq bc_new nil)
(while bclst
(setq m (car bclst) x1 (length bclst))
(setq bclst (vl-remove m bclst))
(setq x2 (length bclst))
(setq n (- x1 x2))
(setq bc_new (cons (list m n) bc_new))
)
(setq p2 (getpoint "\起始位置"))
(setq p3 (polar p2 0 3000))
(command "_.TEXT" "c" (polar p2 (* pi 0.5) 800) "300" "0" "半径");指定书写标题的位置
(command "_.TEXT" "c" (polar p3 (* pi 0.5) 800) "300" "0" "数量")
(foreach bg bc_new ;设定重复次数为新表的长度
(command "_.TEXT" "c" p2 "300" "0" (strcat (rtos (car (car bg)) 2)))
(command "_.TEXT" "c" p3 "300" "0" (cadr bg))
(setq p2 (polar p2 (* pi 1.5) 800))
(setq p3 (polar p2 0 3000))
)
(princ)
)
有劳论坛大神们在百忙中抽空帮帮忙,再次对各位大神的帮助表示由衷的感谢!谢谢!!
这个做什么用啊,好像可以标注模板
;;伪源码程序
多段线简单,用ssget建立选区即可,圆弧的话需要用多段线去拟合,稍微麻烦点。 本帖最后由 1681008 于 2018-4-2 19:43 编辑
xyp1964 发表于 2018-4-1 20:52
;;伪源码程序
谢谢版主!有劳版主指教下,运行命令时提示no function definition: XYP-STARTSC,可以改成不用自定义函数的吗? yxp 发表于 2018-4-2 12:43
多段线简单,用ssget建立选区即可,圆弧的话需要用多段线去拟合,稍微麻烦点。
有劳大神抽空帮忙写个多线段的用用,谢谢! ;;统计封闭多线段范围内圆直径及数量
(defun c:cirn( / cc n dd dxf pt en)
(princ "\n选择多段线")
(setq en (entget (car (entsel))) n 0
pt (vl-remove 'nil (mapcar '(lambda(x)(if (= (car x) 10)(cdr x))) en))
cir (ssget "wp" pt '((0 . "circle"))))
(repeat (sslength cir)
(setq dxf (entget (ssname cir n)) n (1+ n)
cc (cons (cdr (assoc 40 dxf)) cc))
)
(setq n 1)
(while (progn
(setq r (car cc) cc (cdr cc))
(if (equal r (car cc) 0.001)
(setq n (1+ n))
(setq dd (cons (list r n) dd) n 1))
(car cc)
))
(foreach x dd (princ (strcat "\n半径: " (rtos (car x) 2 3) " 个数: " (itoa (cadr x)))))
(princ)
) yxp 发表于 2018-4-2 20:45
;;统计封闭多线段范围内圆直径及数量
(defun c:cirn( / cc n dd dxf pt en)
(princ "\n选择多段线")
谢谢,谢谢,这下统计起来方便多了,太感谢了!
1681008 发表于 2018-4-3 07:31
谢谢,谢谢,这下统计起来方便多了,太感谢了!
兄弟你能用吗?我的怎么用不了啊
页:
[1]