乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 38|回复: 8

[编程交流] Can#039;获取vi的垂直度

[复制链接]

1

主题

9

帖子

11

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:21:48 | 显示全部楼层 |阅读模式
所以,这是一个奇怪的问题。
 
我无法获取组成非矩形视口的多段线的顶点。要复制我的问题,请从一个矩形视口开始,在图纸空间中旋转它,然后移动其中一个顶点。由于某些原因,属性编号340不是构成视口的多段线。
 
我最初使用李的“vpoutline”lisp脚本(因为我是新手,所以无法添加链接)绘制视口的轮廓,但这甚至不起作用(如果李的脚本不能解决这个问题,那么一定是出了问题!!)
 
正如您可以在左侧看到的那样,是视口。第340号支柱应为柱脚。进入pline,它没有顶点(中间)!
 
在右侧和底部,我以不同的方式(非编程方式)找到了正确的pline,顶点都在那里,而且确实正确。
 

                               
登录/注册后可看大图

很清楚,如果你从头开始画一个多边形视口,一切都很好,这不是我的问题。这仅适用于旋转和移动其中一个顶点的矩形视口。
 
那么,如何获得构成视口的柱网的顶点呢?
 
 
 
 
182153oysdpjzvbjjuxuxp.jpg
回复

使用道具 举报

1

主题

9

帖子

11

银币

初来乍到

Rank: 1

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

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:39:05 | 显示全部楼层
出于某种奇怪的原因,多段线是“AcDb2dPolyline”,而不是“AcDbPolyline”。“AcDb2dPolyline”的顶点存储为单独的实体,这就是为什么在实体列表中看不到它们的原因。
对于第一个顶点:
  1. (entget (entnext (car (entsel))))
回复

使用道具 举报

1

主题

9

帖子

11

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:49:53 | 显示全部楼层
令人惊叹的这是可行的。谢谢你的帮助。
 
检查它是“AcDb2dPolyline”还是正常的“AcDbPolyline”也很容易。
 
这让我头疼了一段时间。再次感谢。
回复

使用道具 举报

1

主题

9

帖子

11

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:57:14 | 显示全部楼层
对于任何想制作李·麦克的vpoutline的人来说。lsp为这些奇怪的视口工作,从李的网页下载李的脚本,然后更改此功能:
 
  1. (defun c:vpo ( / *error* _lwvertices cen ent lst ocs vpe vpt vpt2)
  2.    (defun *error* ( msg )
  3.        (LM:endundo (LM:acdoc))
  4.        (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
  5.            (princ (strcat "\nError: " msg))
  6.        )
  7.        (princ)
  8.    )
  9.    (LM:startundo (LM:acdoc))
  10.    (cond
  11.        (   (/= 1 (getvar 'cvport))
  12.            (princ "\nCommand not available in Modelspace.")
  13.        )
  14.        (   (setq vpt (LM:ssget "\nSelect viewport: " '("_+.:E:S" ((0 . "VIEWPORT")))))
  15.            
  16.        (setq vpt2 (ssname vpt 0))
  17.        (setq vpt (entget vpt2))
  18.            (if (setq ent (cdr (assoc 340 vpt)))
  19.          (progn
  20.        (if (member '(100 . "AcDb2dPolyline") (entget ent))
  21.          (progn
  22.                        (setq lst (vpo:lw2dvertices (entnext vpt2)))
  23.            )
  24.          (progn
  25.                    (setq lst (vpo:lwvertices (entget ent)))
  26.            )
  27.          )
  28.          )
  29.          (progn
  30.        (setq cen (mapcar 'list (cdr (assoc 10 vpt))
  31.                              (list
  32.                                  (/ (cdr (assoc 40 vpt)) 2.0)
  33.                                  (/ (cdr (assoc 41 vpt)) 2.0)
  34.                              )
  35.                          )
  36.                      lst (mapcar
  37.                             '(lambda ( a ) (cons (mapcar 'apply a cen) '(42 . 0.0)))
  38.                             '((- -) (+ -) (+ +) (- +))
  39.                          )
  40.        )
  41.          )
  42.            )
  43.            (setq vpe (cdr (assoc -1 vpt))
  44.                  ocs (cdr (assoc 16 vpt))
  45.            )
  46.            (entmake
  47.                (append
  48.                    (list
  49.                       '(000 . "LWPOLYLINE")
  50.                       '(100 . "AcDbEntity")
  51.                       '(100 . "AcDbPolyline")
  52.                        (cons 90 (length lst))
  53.                       '(070 . 1)
  54.                       '(410 . "Model")
  55.                    )
  56.                    (apply 'append
  57.                        (mapcar
  58.                           '(lambda ( x )
  59.                                (list (cons 10 (trans (pcs2wcs (car x) vpe) 0 ocs)) (cdr x))
  60.                            )
  61.                            lst
  62.                        )
  63.                    )
  64.                    (list (cons 210 ocs))
  65.                )
  66.            )
  67.        )
  68.    )
  69.    (LM:endundo (LM:acdoc))
  70.    (princ)
  71. )

 
... 并添加此额外功能:
 
  1. (defun vpo:lw2dvertices ( e / ent)
  2. (setq ent e)
  3. (setq e (entget e))
  4. (if (eq (assoc 42 e) nil)
  5.       (progn
  6.     ;;For whatever reason the first vertex is not to be used
  7.        (if (setq e (member (assoc 10 e) e))
  8.        (vpo:lw2dvertices (entnext ent))
  9.        )
  10.     )
  11.    (progn
  12.        (if (setq e (member (assoc 10 e) e))
  13.            (cons
  14.                (cons (cdr (assoc 10 e)) (assoc 42 e))
  15.                (vpo:lw2dvertices (entnext ent))
  16.            )
  17.        )
  18.      )
  19. )
  20. )

 
这是一个丑陋的黑客,但工作。谢谢lee mac提供的原始示例。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:02:52 | 显示全部楼层
还有一种已经存在很长时间了-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:12:49 | 显示全部楼层
谢谢你提醒我注意这个问题-我现在已经更新了我的Viewport Outline程序来解决这个问题。
回复

使用道具 举报

1

主题

9

帖子

11

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 18:18:06 | 显示全部楼层
谢谢李。
 
你的网页上有一些非常令人印象深刻的样本!他们确实帮助我在Autolisp中学习了很多东西。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:26:56 | 显示全部楼层
非常感谢。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 05:04 , Processed in 0.459193 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表