乐筑天下

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

[编程交流] 关于多面网格特性

[复制链接]

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:30:10 | 显示全部楼层 |阅读模式
你好
 
如果创建对象“PolyFaceMesh”,则需要:
-顶点列表
-人脸列表
 
  1. (setq myTinV (vla-AddPolyFaceMesh MSpace [color=blue]vertexList[/color] [color=red]FaceList[/color]))
您可以使用以下工具检索顶点列表(坐标):
如何检索FaceList列表,恢复三角形?
 
  1. (setq  [color=#ff0000]FaceList [/color](vla-Get-[color=red]XXXXXXXX [/color] myTinV) )
  1. ; [color=red]AutoCAD 2013[/color]
  2. (vlax-dump-object myTinV T)
  3. ; IAcadPolyfaceMesh: IAcadPolyfaceMesh Interface
  4. ; Property values:
  5. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 000007f73afe2308>
  6. ;   Coordinate = ...Indexed contents not shown...
  7. ;   Coordinates = (500708.0 366925.0 236.775 500731.0 366912.0 236.635 ... )
  8. ;   Document (RO) = #<VLA-OBJECT IAcadDocument 000000002bf45168>
  9. ;   EntityTransparency = "ByLayer"
  10. ;   Handle (RO) = "2FF"
  11. ;   HasExtensionDictionary (RO) = 0
  12. ;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000028d5add8>
  13. ;   Layer = "Model_3d"
  14. ;   Linetype = "ByLayer"
  15. ;   LinetypeScale = 1.0
  16. ;   Lineweight = -1
  17. ;   Material = "ByLayer"
  18. [color=blue];   NumberOfFaces (RO) = 196[/color]
  19. [color=blue];   NumberOfVertices (RO) = 114[/color]
  20. ;   ObjectID (RO) = 42
  21. ;   ObjectID32 (RO) = 42
  22. ;   ObjectName (RO) = "AcDbPolyFaceMesh"
  23. ;   OwnerID (RO) = 44
  24. ;   OwnerID32 (RO) = 44
  25. ;   PlotStyleName = "ByLayer"
  26. ;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000028d59db0>
  27. ;   Visible = -1
  28. ; Methods supported:
  29. ;   ArrayPolar (3)
  30. ;   ArrayRectangular (6)
  31. ;   Copy ()
  32. ;   Delete ()
  33. ;   GetBoundingBox (2)
  34. ;   GetExtensionDictionary ()
  35. ;   GetXData (3)
  36. ;   Highlight (1)
  37. ;   IntersectWith (2)
  38. ;   Mirror (2)
  39. ;   Mirror3D (3)
  40. ;   Move (2)
  41. ;   Rotate (2)
  42. ;   Rotate3D (3)
  43. ;   ScaleEntity (2)
  44. ;   SetXData (2)
  45. ;   TransformBy (1)
  46. ;   Update ()
  47. T
  48. _$

 
“PolyFaceMesh”三角网、DTM、三角剖分示例:
 
 
提前感谢,
Costin
明显交点。图纸
回复

使用道具 举报

56

主题

284

帖子

231

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
289
发表于 2022-7-5 23:39:12 | 显示全部楼层
你好。没有人碰到这个问题?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 23:50:34 | 显示全部楼层
这应该有效:
 
  1. [b][color=BLACK]([/color][/b]defun c:pf-faces [b][color=FUCHSIA]([/color][/b]/ ss en ed vn vd[b][color=FUCHSIA])[/color][/b]  [color=#8b4513]; vl fl cl[/color]
  2. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"POLYLINE"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]-4 . [color=#2f4f4f]"&"[/color][b][color=BLUE])[/color][/b]
  3.                                           [b][color=BLUE]([/color][/b]70 . 64[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.       [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]sslength ss[b][color=MAROON])[/color][/b] 1[b][color=NAVY])[/color][/b]
  5.       [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname ss 0[b][color=MAROON])[/color][/b]
  6.             ed [b][color=MAROON]([/color][/b]entget en[b][color=MAROON])[/color][/b]
  7.             vl nil
  8.             fl nil
  9.             cl nil
  10.             vn [b][color=MAROON]([/color][/b]entnext en[b][color=MAROON])[/color][/b]
  11.             vd [b][color=MAROON]([/color][/b]entget vn[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  12.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]= [color=#2f4f4f]"VERTEX"[/color] [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 0 vd[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  13.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]= [b][color=RED]([/color][/b]logand [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 70 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]  64[b][color=RED])[/color][/b] 64[b][color=BLUE])[/color][/b]
  14.                       [b][color=BLUE]([/color][/b]= [b][color=RED]([/color][/b]logand [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 70 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] 128[b][color=RED])[/color][/b] 128[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  15.                  [b][color=GREEN]([/color][/b]setq vl [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 10 vd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] vl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  16.                  [b][color=GREEN]([/color][/b]setq fl [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]list [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 71 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  17.                                       [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 72 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  18.                                       [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 73 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  19.                                       [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 74 vd[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] fl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  20.              [b][color=MAROON]([/color][/b]setq vn [b][color=GREEN]([/color][/b]entnext vn[b][color=GREEN])[/color][/b]
  21.                    vd [b][color=GREEN]([/color][/b]entget vn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  22. [b][color=FUCHSIA]([/color][/b]setq vl [b][color=NAVY]([/color][/b]reverse vl[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  23. [b][color=FUCHSIA]([/color][/b]foreach f fl
  24.   [b][color=NAVY]([/color][/b]setq cl [b][color=MAROON]([/color][/b]cons [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]nth [b][color=RED]([/color][/b]1- [b][color=PURPLE]([/color][/b]abs [b][color=TEAL]([/color][/b]nth 0 f[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] vl[b][color=BLUE])[/color][/b]
  25.                        [b][color=BLUE]([/color][/b]nth [b][color=RED]([/color][/b]1- [b][color=PURPLE]([/color][/b]abs [b][color=TEAL]([/color][/b]nth 1 f[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] vl[b][color=BLUE])[/color][/b]
  26.                        [b][color=BLUE]([/color][/b]nth [b][color=RED]([/color][/b]1- [b][color=PURPLE]([/color][/b]abs [b][color=TEAL]([/color][/b]nth 2 f[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] vl[b][color=BLUE])[/color][/b]
  27.                        [b][color=BLUE]([/color][/b]nth [b][color=RED]([/color][/b]1- [b][color=PURPLE]([/color][/b]abs [b][color=TEAL]([/color][/b]nth 3 f[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] vl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] cl[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  28. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
vl顶点列表
fl面列表
cl WCS每个面的对应关系
 
它们在发布的代码中是全局的。您需要将它们本地化-大卫
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:56:12 | 显示全部楼层
我走上了与大卫相似的道路。我还没有完全算出组码74,但我假设这是第四个面点?因为张贴的图纸有地形三角形,没有第四个点,我忽略了这一点。
但它似乎确实是提取人脸点的方法。在我的作品中,我在三角形上创建了多段线来展示这一点。
  1. (defun c:test ( / elist ent faces vrtcs )
  2. (while
  3.    (progn
  4.      (setvar "ERRNO" 0)
  5.      (setq ent (entsel "\nSelect Polyface Mesh: "))
  6.      (cond
  7.        ((= 7 (getvar "ERRNO"))
  8.         (princ "\nMissed, Try again.")
  9.         )
  10.        ((and (vl-consp ent)
  11.              (or (/= (cdr (assoc 0 (setq elist (entget (car ent))))) "POLYLINE")
  12.                  (not (member '(100 . "AcDbPolyFaceMesh") elist))
  13.                  )
  14.              )
  15.         (princ "\nInvalid Object Selected.")
  16.         )
  17.        )
  18.      )
  19.    )
  20. (if elist
  21.    (progn
  22.      (while (= (cdr (assoc 0 (setq elist (entget (entnext (cdar elist)))))) "VERTEX")
  23.        (cond
  24.          ((member '(100 . "AcDbVertex") elist)
  25.           (setq vrtcs (cons (cdr (assoc 10 elist)) vrtcs))
  26.           )
  27.          ((member '(100 . "AcDbFaceRecord") elist)
  28.           (setq faces (cons (list (cdr (assoc 71 elist)) (cdr (assoc 72 elist)) (cdr (assoc 73 elist))) faces))
  29.           )
  30.          )
  31.        )
  32.      (setq vrtcs (reverse vrtcs))
  33.      (mapcar
  34.        (function
  35.          (lambda ( a )
  36.            (entmakex
  37.              (append '((0 . "LWPOLYLINE")
  38.                        (100 . "AcDbEntity")
  39.                        (100 . "AcDbPolyline")
  40.                        (90 . 3)
  41.                        (70 . 1)
  42.                        )
  43.                      (mapcar
  44.                        (function
  45.                          (lambda ( b )
  46.                            (cons 10 (nth (1- b) vrtcs))
  47.                            )
  48.                          )
  49.                        a
  50.                        )
  51.                      )
  52.              )
  53.            )
  54.          )
  55.        faces
  56.        )
  57.      )
  58.    )
  59. (princ)
  60. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:01:33 | 显示全部楼层
 
 
你在74组是对的。
 
就几个笨蛋
[列表]
  • 负的面点号表示面边缘不可见,因此(abs)调用以使用(n)个列表原子
  • 长波多段线是二维实体。需要3D多边形来表示边,或为3个点面指定OCS
    [/列表]
     
     
    -大卫
  • 回复

    使用道具 举报

    1

    主题

    116

    帖子

    115

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 00:08:35 | 显示全部楼层
     
    谢谢David,我还没有解决这个问题(主要是逆向工程)。有了这些额外的知识和对组码74的确认,我必须重写我的:
     
    1. 6

     
    我把你的观点放在LWPOLYLINE和3DPOLY上;我知道这一点。我的目的更多的是证明顶点已正确匹配到面。我不确定OP在提取人脸后希望实现什么?因此,我保留了修订版中的内容。
    回复

    使用道具 举报

    56

    主题

    284

    帖子

    231

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    289
    发表于 2022-7-6 00:21:24 | 显示全部楼层
    大家好!
     
    谢谢你的回复。奇怪的是,虽然您可以使用Visual Lisp看到对象的某些属性,但您无法更改它。
     
    我的目的是获取“PolyFaceMesh”对象的三角形,而不是分解它并收集结果。
    回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-6 00:24:27 | 显示全部楼层
    虽然有一些(很少)事情只能用VisualLisp来做,但普通autolisp仍然是一个非常(更)强大(更友好)(我的0.02美元)-David
     
    如果您添加DosLIB(VL基本上偷了它(oops借用了它)),它同样对文件友好。
    回复

    使用道具 举报

    56

    主题

    284

    帖子

    231

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    289
    发表于 2022-7-6 00:33:14 | 显示全部楼层
    好的,大卫。根据你发布的内容,我可以修复我想要的(CL=坐标列表)。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-11 01:13 , Processed in 0.610392 second(s), 81 queries .

    © 2020-2025 乐筑天下

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