mike99 发表于 2011-1-16 16:41:01

怎样剔除viewport选择集多出的一个图纸空间

各位大侠帮帮忙,这个程序折腾我好几天了!我想写一个lisp程序列出所有用户自己建立的view port的一些属性,比如layer和scale,但是运行结果却外加了一个AutoCAD自己建立的图纸空间本身。怎样才能判断一个view port是用户自己建立的还是AutoCAD建立的图纸空间本身啊?
以下是程序:

(defun c:listvp (/
)
(vl-load-com)
(if (setq i-1
   ss (ssget "_X" '((0 . "VIEWPORT")))
      )
    (while (setq ent (ssname ss (setq i (1+ i))))
      (vla-put-displaylocked
(vlax-ename->vla-object ent)
:vlax-true
      )
      (setq thelayer (vla-get-layer (vlax-ename->vla-object ent)))
      (setq thecustomscale
      (vla-get-customscale
      (vlax-ename->vla-object ent)
      )
      )
      (prompt (strcat "\nLayer: " thelayer))
      (prompt (strcat "\nCustomScale: " (rtos thecustomscale)))
    )
)
(princ)
)

运行结果:
Command: listvp
Layer: Layer1
CustomScale: 0.0100
Layer: Layer1
CustomScale: 0.0133
Layer: Layer1
CustomScale: 2.0693

运行完一次程序,zoom一下paper space,然后再运行一次,大家可以看到最后一个view port的scale发生改变。最后一个view port就是图纸空间本身。可我在程序中怎样才能剔除掉这个view port呢?
Command: listvp
Layer: Layer1
CustomScale: 0.0100
Layer: Layer1
CustomScale: 0.0133
Layer: Layer1
CustomScale: 0.5055

mike99 发表于 2011-1-18 12:23:42

ok, i got it. If the dxf group 69 of a viewport is equal to 1, it's paper space itself.

自贡黄明儒 发表于 2013-9-3 16:27:50

(SETQ        SS
       (SSGET        "_x"
                (LIST '(0 . "VIEWPORT")
                      '(67 . 1)
                      '(69 . 1)
                      (CONS 410 (GETVAR "ctab"))
                )
       )
)
页: [1]
查看完整版本: 怎样剔除viewport选择集多出的一个图纸空间