PellaCAD 发表于 2022-7-6 12:56:34

在视口中循环

我有一个有趣的项目。。。(这是VB.NET)。。。
 
我需要在图形中每个布局选项卡上的每个视口中移动,并在每个视口中进行最大化显示。
 
我知道这将需要几个循环,但我总是在所有的视口中移动。
 
以下是一些代码。。。
****************************************
对于我身上的每一项。lbSelectAnAutoCADLayout。选定项
 
objAcad。ActiveDocument。ActiveLayout=objAcad。ActiveDocument。布局。项目(Item)
原始空间=objAcad。ActiveDocument。活动空间
 
objAcad。ActiveDocument。SendCommand(“pspace”和vbCr)
objAcad。ActiveDocument。SendCommand(“最大化显示”)对象。ActiveDocument。SendCommand(“mspace”和vbCr)
objAcad。ActiveDocument。SendCommand(“最大化显示”)
objAcad。ActiveDocument。活动空间=原始空间
 
下一个
****************************************
 
最后,我需要找到并激活布局上的特定视口(基于视口宽度)。但现在,只需在图形中每个选项卡上的每个视口中移动就足够了。
 
提前感谢您的专家帮助!
 
加油!

VVA 发表于 2022-7-6 13:47:43

lisp中的函数

(defun vpactivate ( width/ ss avp)
;;; width - viewport width for activate
;;; Usage
;;; (VPACTIVATE 199)
;;; Activate VIEWPORT with width 199
;;; Return number (for CVPORT command) VIEWPORT in layout or nil
(vl-load-com)
(if (setq SS (ssget "_X" (list '(0 . "VIEWPORT") '(-4 . "/=") '(68 . 1)(cons 410 (getvar "ctab")))))
(progn
    (foreach vp (vl-remove-if (function listp)
       (mapcar (function cadr) (ssnamex ss)))
      (if (equal (cdr(assoc 40 ;_Width code. Height code - 41
                            (entget vp)
                            )
                     )
               width
               1e-6
               )
      (progn
          (setq avp (cdr(assoc 68 (entget vp))))
          (command "_MSPACE" "_CVPORT" avp "_PSPACE")
         
          )
          )
      )
    )
)
avp
)

加载此函数并使用
objAcad.ActiveDocument.SendCommand("(VPACTIVATE 199)" & vbCr)
199-宽度特定视口

PellaCAD 发表于 2022-7-6 13:57:04

谢谢VVA!!做得好!
 
(我想我可以用这个作为临时解决方案。)
 
我仍然需要一个VB的点网络解决方案。。。
 
(再次感谢VVA…您的LISP解决方案干净优雅…并且有效!)
页: [1]
查看完整版本: 在视口中循环