alm865 发表于 2022-7-5 17:21:48

Can#039;获取vi的垂直度

所以,这是一个奇怪的问题。
 
我无法获取组成非矩形视口的多段线的顶点。要复制我的问题,请从一个矩形视口开始,在图纸空间中旋转它,然后移动其中一个顶点。由于某些原因,属性编号340不是构成视口的多段线。
 
我最初使用李的“vpoutline”lisp脚本(因为我是新手,所以无法添加链接)绘制视口的轮廓,但这甚至不起作用(如果李的脚本不能解决这个问题,那么一定是出了问题!!)
 
正如您可以在左侧看到的那样,是视口。第340号支柱应为柱脚。进入pline,它没有顶点(中间)!
 
在右侧和底部,我以不同的方式(非编程方式)找到了正确的pline,顶点都在那里,而且确实正确。
 
https://www.cadtutor.net/forum/attachment.php?attachmentid=58948&cid=1&stc=1
很清楚,如果你从头开始画一个多边形视口,一切都很好,这不是我的问题。这仅适用于旋转和移动其中一个顶点的矩形视口。
 
那么,如何获得构成视口的柱网的顶点呢?
 
 
 
 

alm865 发表于 2022-7-5 17:29:52

这是我指的一个视口示例。
 
在尝试获取pline细节之前,它看起来是多边形的。有些事情就是不对,我无法解决。。。我希望我在做一些愚蠢的事情,有人能指出我错过了什么。
 
请尝试从李的网站上的“vpoutline”lisp脚本作为起点。
 
(顺便说一句,与上述图纸不同,因此实体名称将不同。对不起)
 
图纸1.dwg

Roy_043 发表于 2022-7-5 17:39:05

出于某种奇怪的原因,多段线是“AcDb2dPolyline”,而不是“AcDbPolyline”。“AcDb2dPolyline”的顶点存储为单独的实体,这就是为什么在实体列表中看不到它们的原因。
对于第一个顶点:
(entget (entnext (car (entsel))))

alm865 发表于 2022-7-5 17:49:53

令人惊叹的这是可行的。谢谢你的帮助。
 
检查它是“AcDb2dPolyline”还是正常的“AcDbPolyline”也很容易。
 
这让我头疼了一段时间。再次感谢。

alm865 发表于 2022-7-5 17:57:14

对于任何想制作李·麦克的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提供的原始示例。

David Bethel 发表于 2022-7-5 18:02:52

还有一种已经存在很长时间了-大卫

Lee Mac 发表于 2022-7-5 18:12:49

谢谢你提醒我注意这个问题-我现在已经更新了我的Viewport Outline程序来解决这个问题。

alm865 发表于 2022-7-5 18:18:06

谢谢李。
 
你的网页上有一些非常令人印象深刻的样本!他们确实帮助我在Autolisp中学习了很多东西。

Lee Mac 发表于 2022-7-5 18:26:56

非常感谢。
页: [1]
查看完整版本: Can#039;获取vi的垂直度