Can#039;获取vi的垂直度
所以,这是一个奇怪的问题。我无法获取组成非矩形视口的多段线的顶点。要复制我的问题,请从一个矩形视口开始,在图纸空间中旋转它,然后移动其中一个顶点。由于某些原因,属性编号340不是构成视口的多段线。
我最初使用李的“vpoutline”lisp脚本(因为我是新手,所以无法添加链接)绘制视口的轮廓,但这甚至不起作用(如果李的脚本不能解决这个问题,那么一定是出了问题!!)
正如您可以在左侧看到的那样,是视口。第340号支柱应为柱脚。进入pline,它没有顶点(中间)!
在右侧和底部,我以不同的方式(非编程方式)找到了正确的pline,顶点都在那里,而且确实正确。
https://www.cadtutor.net/forum/attachment.php?attachmentid=58948&cid=1&stc=1
很清楚,如果你从头开始画一个多边形视口,一切都很好,这不是我的问题。这仅适用于旋转和移动其中一个顶点的矩形视口。
那么,如何获得构成视口的柱网的顶点呢?
这是我指的一个视口示例。
在尝试获取pline细节之前,它看起来是多边形的。有些事情就是不对,我无法解决。。。我希望我在做一些愚蠢的事情,有人能指出我错过了什么。
请尝试从李的网站上的“vpoutline”lisp脚本作为起点。
(顺便说一句,与上述图纸不同,因此实体名称将不同。对不起)
图纸1.dwg 出于某种奇怪的原因,多段线是“AcDb2dPolyline”,而不是“AcDbPolyline”。“AcDb2dPolyline”的顶点存储为单独的实体,这就是为什么在实体列表中看不到它们的原因。
对于第一个顶点:
(entget (entnext (car (entsel)))) 令人惊叹的这是可行的。谢谢你的帮助。
检查它是“AcDb2dPolyline”还是正常的“AcDbPolyline”也很容易。
这让我头疼了一段时间。再次感谢。 对于任何想制作李·麦克的vpoutline的人来说。lsp为这些奇怪的视口工作,从李的网页下载李的脚本,然后更改此功能:
(defun c:vpo ( / *error* _lwvertices cen ent lst ocs vpe vpt vpt2)
(defun *error* ( msg )
(LM:endundo (LM:acdoc))
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(princ (strcat "\nError: " msg))
)
(princ)
)
(LM:startundo (LM:acdoc))
(cond
( (/= 1 (getvar 'cvport))
(princ "\nCommand not available in Modelspace.")
)
( (setq vpt (LM:ssget "\nSelect viewport: " '("_+.:E:S" ((0 . "VIEWPORT")))))
(setq vpt2 (ssname vpt 0))
(setq vpt (entget vpt2))
(if (setq ent (cdr (assoc 340 vpt)))
(progn
(if (member '(100 . "AcDb2dPolyline") (entget ent))
(progn
(setq lst (vpo:lw2dvertices (entnext vpt2)))
)
(progn
(setq lst (vpo:lwvertices (entget ent)))
)
)
)
(progn
(setq cen (mapcar 'list (cdr (assoc 10 vpt))
(list
(/ (cdr (assoc 40 vpt)) 2.0)
(/ (cdr (assoc 41 vpt)) 2.0)
)
)
lst (mapcar
'(lambda ( a ) (cons (mapcar 'apply a cen) '(42 . 0.0)))
'((- -) (+ -) (+ +) (- +))
)
)
)
)
(setq vpe (cdr (assoc -1 vpt))
ocs (cdr (assoc 16 vpt))
)
(entmake
(append
(list
'(000 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length lst))
'(070 . 1)
'(410 . "Model")
)
(apply 'append
(mapcar
'(lambda ( x )
(list (cons 10 (trans (pcs2wcs (car x) vpe) 0 ocs)) (cdr x))
)
lst
)
)
(list (cons 210 ocs))
)
)
)
)
(LM:endundo (LM:acdoc))
(princ)
)
... 并添加此额外功能:
(defun vpo:lw2dvertices ( e / ent)
(setq ent e)
(setq e (entget e))
(if (eq (assoc 42 e) nil)
(progn
;;For whatever reason the first vertex is not to be used
(if (setq e (member (assoc 10 e) e))
(vpo:lw2dvertices (entnext ent))
)
)
(progn
(if (setq e (member (assoc 10 e) e))
(cons
(cons (cdr (assoc 10 e)) (assoc 42 e))
(vpo:lw2dvertices (entnext ent))
)
)
)
)
)
这是一个丑陋的黑客,但工作。谢谢lee mac提供的原始示例。 还有一种已经存在很长时间了-大卫 谢谢你提醒我注意这个问题-我现在已经更新了我的Viewport Outline程序来解决这个问题。 谢谢李。
你的网页上有一些非常令人印象深刻的样本!他们确实帮助我在Autolisp中学习了很多东西。 非常感谢。
页:
[1]