lengliqun 发表于 2011-5-9 23:45:53

求程序,将选择的封闭pl线(能多选)内长度大于100的line线改到“临时图层5”

本帖最后由 lengliqun 于 2011-5-9 23:46 编辑

yoyoho 发表于 2011-5-9 23:45:54

;感谢诸位分享源码程序
;网上找到求各顶点列表的程序
;引用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:图元名
;返回值: 各顶点形成的列表

lengliqun 发表于 2011-5-9 23:48:35

请大家帮帮忙,谢谢。

Andyhon 发表于 2011-5-10 09:21:38


;;; 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" "")
   ))
)

lengliqun 发表于 2011-5-10 10:48:49

三楼的程序好像达不要我的目的,我的意思是框选多个封闭的PL线,自动将封闭PL线内的物体改图层。

ZZXXQQ 发表于 2011-5-10 10:54:48

本帖最后由 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:39:24

本帖最后由 lengliqun 于 2011-5-10 11:40 编辑

ZZXXQQ改的是PL线。我的意思不是改PL线,是改PL线内的物体,以封闭PL线的内外为条件过虑。
这个好像不是这么简单。

Andyhon 发表于 2011-5-10 11:39:48

回复 lengliqun 的帖子

Sorry !
错会了题意 (..大于100的line线改...)

yshf 发表于 2011-5-11 21:57:30


;将封闭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)
)

lengliqun 发表于 2011-5-12 08:16:40

我搞不定啊,网上找了个求各顶点列表的程序,可不知放哪里啊。
大侠高抬贵手一并弄个完整的可直接执行的程序吧。
页: [1] 2
查看完整版本: 求程序,将选择的封闭pl线(能多选)内长度大于100的line线改到“临时图层5”