求程序,将选择的封闭pl线(能多选)内长度大于100的line线改到“临时图层5”
本帖最后由 lengliqun 于 2011-5-9 23:46 编辑;感谢诸位分享源码程序
;网上找到求各顶点列表的程序
;引用yshf 的源码程序
;AUTOCAD 2008 下测试O.K.
;将封闭pl线内长度大于100的line置“临时图层5”。
;en各顶点列表自己去弄,网上多得是。
(defun c:ccc ()
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (setq ssa (ssget '((0 . "LWPOLYLINE") (70 . 1))))
(progn
(setq i 0n (sslength ssa))
(repeat n
(setq en (ssname ssa i)
i(1+ i)
)
(setq ptb (vertexs en))
(if (setq ssb (ssget "wp" ptb '((0 . "LINE"))))
(progn
(setq j 0m (sslength ssb))
(repeat m
(setq obj (ssname ssb j)
j (1+ j)
)
(command "_lengthen" obj "")
(if (> (getvar "PERIMETER") 100.0)
(command ".chprop" obj "" "layer" "临时图层5" "")
)
)
)
)
)
)
)
(setvar "cmdecho" cm)
(princ)
)
;;;返回多段线的各顶点
;语法:
;(vertexs ename)
;说明:
;返回多段线的各顶点
; 函数内容:
(defun vertexs (ename / plist pp n)
(setq obj (vlax-ename->vla-object ename))
(setq plist (vlax-safearray->list
(vlax-variant-value
(vla-get-coordinates obj))))
(setq n 0)
(repeat (/ (length plist) 2)
(setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
(setq n (+ n 2))
)
pp
)
;参数:
;ename:图元名
;返回值: 各顶点形成的列表 请大家帮帮忙,谢谢。
;;; for test only
(Defun C:test ()
(cond
((not (setq ss (ssget '((0 . "LINE"))))))
(T
(setq i 0
SS5 (ssadd)
)
(while (setq ee (ssname ss i))
(setq dat (entget ee)
pa (cdr (assoc 10 dat))
pb (cdr (assoc 11 dat))
i (1+ i)
)
(if (> (distance pa pb) 100)
(ssadd ee ss5)
)
)
(command "chprop" ss5 "" "La" "Temp5" "")
))
)
三楼的程序好像达不要我的目的,我的意思是框选多个封闭的PL线,自动将封闭PL线内的物体改图层。 本帖最后由 ZZXXQQ 于 2011-5-17 20:07 编辑
是这样吗?
;封闭线中长度大于500的直线置入“临时图层5” 明经 ZZXXQQ 2011.5.17
(defun c:tt ()
(setvar "CMDECHO" 0)
(if (setq ss (ssget "X" '((0 . "*POLYLINE") (70 . 1)))) (progn
(setq i 0 ss1 (ssadd))
(repeat (sslength ss)
(setq en (ssname ss i))
(setq ent (entget en))
(setq plst (list))
(foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))
(if (setq ss2 (ssget "WP" plst '((0 . "LINE")))) (progn
(setq j 0)
(repeat (sslength ss2)
(setq en (ssname ss j))
(command ".LENGTHEN" en "")
(if (> (getvar "PERIMETER") 500) (setq ss1 (ssadd en ss1)))
(setq j (1+ j))
)
))
(setq i (1+ i))
)
(command ".CHPROP" ss1 "" "LA" "临时图层5" "")
))
(setvar "CMDECHO" 1)
(princ)
)
本帖最后由 lengliqun 于 2011-5-10 11:40 编辑
ZZXXQQ改的是PL线。我的意思不是改PL线,是改PL线内的物体,以封闭PL线的内外为条件过虑。
这个好像不是这么简单。 回复 lengliqun 的帖子
Sorry !
错会了题意 (..大于100的line线改...)
;将封闭pl线内长度大于100的line置“临时图层5”。
;en各顶点列表自己去弄,网上多得是。
(defun c:ccc ()
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (setq ssa (ssget '((0 . "LWPOLYLINE") (70 . 1))))
(progn
(setq i 0n (sslength ssa))
(repeat n
(setq en (ssname ssa i)
i(1+ i)
)
(setq ptb en各顶点列表)
(if (setq ssb (ssget "wp" ptb (0 . "LINE")))
(progn
(setq j 0m (sslength ssb))
(repeat m
(setq obj (ssname ssb j)
j (1+ j)
)
(command "_lengthen" obj "")
(if (> (getvar "PERIMETER") 100.0)
(command ".chprop" obj "" "layer" "临时图层5" "")
)
)
)
)
)
)
)
(setvar "cmdecho" cm)
(princ)
)
我搞不定啊,网上找了个求各顶点列表的程序,可不知放哪里啊。
大侠高抬贵手一并弄个完整的可直接执行的程序吧。
页:
[1]
2