1681008 发表于 2018-3-31 11:30:56

求助,关于统计封闭多线段范围内圆直径及数量的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)
)


有劳论坛大神们在百忙中抽空帮帮忙,再次对各位大神的帮助表示由衷的感谢!谢谢!!





yxl88168 发表于 2018-4-1 09:40:45

这个做什么用啊,好像可以标注模板

xyp1964 发表于 2018-4-1 20:52:00


;;伪源码程序

yxp 发表于 2018-4-2 12:43:46

多段线简单,用ssget建立选区即可,圆弧的话需要用多段线去拟合,稍微麻烦点。

1681008 发表于 2018-4-2 19:17:27

本帖最后由 1681008 于 2018-4-2 19:43 编辑

xyp1964 发表于 2018-4-1 20:52
;;伪源码程序
谢谢版主!有劳版主指教下,运行命令时提示no function definition: XYP-STARTSC,可以改成不用自定义函数的吗?

1681008 发表于 2018-4-2 20:03:21

yxp 发表于 2018-4-2 12:43
多段线简单,用ssget建立选区即可,圆弧的话需要用多段线去拟合,稍微麻烦点。

有劳大神抽空帮忙写个多线段的用用,谢谢!

yxp 发表于 2018-4-2 20:45:06

;;统计封闭多线段范围内圆直径及数量
(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)
)

1681008 发表于 2018-4-3 07:31:53

yxp 发表于 2018-4-2 20:45
;;统计封闭多线段范围内圆直径及数量
(defun c:cirn( / cc n dd dxf pt en)
(princ "\n选择多段线")


谢谢,谢谢,这下统计起来方便多了,太感谢了!

czb203 发表于 2019-5-13 14:00:15

1681008 发表于 2018-4-3 07:31
谢谢,谢谢,这下统计起来方便多了,太感谢了!

兄弟你能用吗?我的怎么用不了啊
页: [1]
查看完整版本: 求助,关于统计封闭多线段范围内圆直径及数量的lsp修改问题