Small Fish 发表于 2022-7-6 12:12:01

entsel过滤器

你好
我想使用:
 
(setqenaPline (car (entsel "\nSelect paperspace Viewport: ")))
(setq VpScaleRatio(vla-get-customscale (vlax-ename->vla-object enaPline)))
然而,为了找到视口的自定义比例,如果我创建视口,我不能使用上面的代码
“mview”然后“object”(换句话说,从pline生成视口)
我认为这是因为视口也是“多段线”和“视口”。
所以我想解决这个问题的方法是使用entsel制作一个过滤器,
因此,仅选择视口而不是多段线。
 
有没有一种方法可以使用entsel制作一个过滤器(仅用于“视口”)呢?
 
谢谢

rkmcswain 发表于 2022-7-6 12:16:49

某种程度上。仍然有两个实体,但它们有点“联系”在一起。通过使用LIST命令可以看到这一点。 
 
你可以这样做。
 

(if (setq ss (ssget '((0 . "VIEWPORT"))))
(setq obj (ssname ss 0))
(setq obj nil)
)

alanjt 发表于 2022-7-6 12:23:04

您应该查看我的AT:Entsel子例程。它提供了ssget中dxf过滤的几乎所有功能,可以忽略锁定层,转换为vla对象,选择主对象或嵌套对象,并接受关键字。
 
链接:http://www.cadtutor.net/forum/showpost.php?p=271389&postcount=26

rkmcswain 发表于 2022-7-6 12:27:34

 
这有什么帮助?
我试着这样使用它:

(AT:Entsel nil nil '("LV" (0 . "VIEWPORT")) nil)

...我一直在说“不,继续努力!”
 
谢谢

alanjt 发表于 2022-7-6 12:31:28

它是锁定的还是多段线(剪裁的视口)?对我来说很好:
 
Command: (AT:Entsel nil nil '("LV" (0 . "VIEWPORT")) nil)
Select object: #<VLA-OBJECT IAcadPViewport2 21612944>
 
我一直在使用这个程序,我无法想象为什么它不适合你。

fixo 发表于 2022-7-6 12:36:41

 
还有一种方法
 

(while (not (and (setq entVport (entsel "\nSelect paperspace Viewport: "))
       (eq "VIEWPORT" (cdr (assoc 0 (entget (setqenaPline (car entVport))))))))
         (princ "\n\t\t>>>\tSelected is not a Viewport, try again\t<<<"))

rkmcswain 发表于 2022-7-6 12:40:47

在:Entsel:
 
(and (setq ent (car (entsel)))
    (setq vp (cdr (assoc 330 (entget ent))))
    )
 
 
不完美,我仍然会检查assoc 330是否匹配(0。“视口”)

alanjt 发表于 2022-7-6 12:44:27

尤里卡-我现在有了非常感谢
 
 
(and (setq ent (car (at:entsel nil nil '((0 . "LWPOLYLINE")(102 . "{ACAD_REACTORS")) nil)))
    (setq vp (cdr (assoc 330 (entget ent))))
    )

rkmcswain 发表于 2022-7-6 12:48:56

 
 

 
(if (setq ss (ssget ":s" '((0 . "viewport"))))
(setq enname (ssname ss 0))
(setq enname nil)
)
(setq VptObj (vlax-ename->vla-object enname ))
(setq VpScaleRatio(vla-get-customscale VptObj))
 
 
顺便说一句,如果您的对象不是视口,那么在尝试将nil转换为vla对象时会出错。

alanjt 发表于 2022-7-6 12:53:33

页: [1] 2
查看完整版本: entsel过滤器