乐筑天下

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

[编程交流] 如何获得“IAcad”对象名称。

[复制链接]

46

主题

92

帖子

45

银币

后起之秀

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

铜币
235
发表于 2022-7-5 16:12:13 | 显示全部楼层 |阅读模式
这段代码检索对象属性。
  1. (defun c:HD (/ ent)
  2. (vl-load-com)
  3. (while
  4. (setq ent (entsel))
  5. (vlax-dump-object (vlax-Ename->Vla-Object (car ent)) T)
  6. ); while
  7. (princ)
  8. ); defun

如何从转储对象中获取红色字符串?
因为这条线是IAcadLine
  1. Select object: ; [b][color="red"]IAcadLine[/color][/b]: AutoCAD Line Interface
  2. ; Property values:
  3. ;   Angle (RO) = 0.719545
  4. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 000000013ffbc910>
  5. ;   Delta (RO) = (209.938 183.961 0.0)
  6. ;   Document (RO) = #<VLA-OBJECT IAcadDocument 0000000027cc0bc8>
  7. ;   EndPoint = (7714.05 4745.47 0.0)
  8. ;   EntityTransparency = "ByLayer"
  9. ;   Handle (RO) = "6533"
  10. ;   HasExtensionDictionary (RO) = 0
  11. ;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000040a107c8>
  12. ;   Layer = "0"
  13. ;   Length (RO) = 279.133
  14. ;   Linetype = "ByLayer"
  15. ;   LinetypeScale = 1.0
  16. ;   Lineweight = -1
  17. ;   Material = "ByLayer"
  18. ;   Normal = (0.0 0.0 1.0)
  19. ;   ObjectID (RO) = 54
  20. ;   ObjectID32 (RO) = 54
  21. ;   ObjectName (RO) = "AcDbLine"
  22. ;   OwnerID (RO) = 50
  23. ;   OwnerID32 (RO) = 50
  24. ;   PlotStyleName = "ByLayer"
  25. ;   StartPoint = (7504.11 4561.51 0.0)
  26. ;   Thickness = 0.0
  27. ;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000034cd2eb0>
  28. ;   Visible = -1
  29. ; Methods supported:
  30. ;   ArrayPolar (3)
  31. ;   ArrayRectangular (6)
  32. ;   Copy ()
  33. ;   Delete ()
  34. ;   GetBoundingBox (2)
  35. ;   GetExtensionDictionary ()
  36. ;   GetXData (3)
  37. ;   Highlight (1)
  38. ;   IntersectWith (2)
  39. ;   Mirror (2)
  40. ;   Mirror3D (3)
  41. ;   Move (2)
  42. ;   Offset (1)
  43. ;   Rotate (2)
  44. ;   Rotate3D (3)
  45. ;   ScaleEntity (2)
  46. ;   SetXData (2)
  47. ;   TransformBy (1)
  48. ;   Up
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 16:28:35 | 显示全部楼层
你想知道它是什么类型的物体吗?
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 16:34:30 | 显示全部楼层
使用此代码获取对象的DXF代码。
  1. (Entget(car(entsel)))
回复

使用道具 举报

46

主题

92

帖子

45

银币

后起之秀

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

铜币
235
发表于 2022-7-5 16:44:28 | 显示全部楼层
问题是Civil3D中有两个同名的不同对象。
这些对象是“三角网曲面”和“三角网体积曲面”。
Commandobill感谢您的回复。
使用
  1. (entget(car(entsel)))

在“锡表面”返回:
  1. (-1 . <Entity name: 7ffffb2d720>)
  2. (0 . "AECC_TIN_SURFACE")
  3. (330 . <Entity name: 7ffffb039f0>)
  4. (5 . "63B2")
  5. (100 . "AcDbEntity")
  6. (67 . 0)
  7. (410 . "Model")
  8. (8 . "C-TOPO")
  9. (100 . "AeccDbEntity")
  10. (100 . "AeccDbGeo_aec")
  11. (100 . "AeccDbGeo")
  12. (100 . "AeccDbSurface")
  13. (100 . "AeccDbSurfaceTin")

 
在“锡体积表面”返回:
 
  1. (-1 . <Entity name: 7ffffb2e9a0>)
  2. (0 . "AECC_TIN_SURFACE")
  3. (330 . <Entity name: 7ffffb039f0>)
  4. (5 . "64CA")
  5. (100 . "AcDbEntity")
  6. (67 . 0)
  7. (410 . "Model")
  8. (8 . "C-TOPO")
  9. (100 . "AeccDbEntity")
  10. (100 . "AeccDbGeo_aec")
  11. (100 . "AeccDbGeo")
  12. (100 . "AeccDbSurface")
  13. (100 . "AeccDbSurfaceTin")
回复

使用道具 举报

46

主题

92

帖子

45

银币

后起之秀

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

铜币
235
发表于 2022-7-5 16:50:56 | 显示全部楼层
如果我们使用
  1. vlax-dump-object

 
在“锡表面”返回:
  1. Select object: ; [b][color="red"]IAeccTinSurface[/color][/b]: IAeccTinSurface interface
  2. ; Property values:
  3. ;   Application (RO) = #<VLA-OBJECT IAeccApplication 00000000276536a0>
  4. ;   Boundaries (RO) = #<VLA-OBJECT IAeccSurfaceBoundaries 0000000034ffa1d8>
  5. ;   Breaklines (RO) = #<VLA-OBJECT IAeccSurfaceBreaklines 0000000034ff7d98>
  6. ;   ContourLabelGroups (RO) = #<VLA-OBJECT IAeccSurfaceContourLabelGroups 0000000034ff7cf0>
  7. ;   Contours (RO) = #<VLA-OBJECT IAeccSurfaceContours 0000000034ff7f28>
  8. ;   DefinitionProperties (RO) = #<VLA-OBJECT IAeccTinSurfaceDefinitionProperties 000000002f4fe2d0>
  9. ;   DEMFiles (RO) = #<VLA-OBJECT IAeccSurfaceDEMFiles 0000000034ffa138>
  10. ;   Description = "Description"
  11. ;   DisplayName (RO) = "Pow 3"
  12. ;   Document (RO) = #<VLA-OBJECT IAeccDocument 000000002f4fe5d0>
  13. ;   EntityTransparency = "ByLayer"
  14. ;   Handle (RO) = "63B2"
  15. ;   HasExtensionDictionary (RO) = 0
  16. ;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000000354be838>
  17. ;   Labels (RO) = #<VLA-OBJECT IAeccSurfaceLabels 0000000034ff8240>
  18. ;   Layer = "C-TOPO"
  19. ;   Linetype = "ByLayer"
  20. ;   LinetypeScale = 1.0
  21. ;   Lineweight = -1
  22. ;   Material = "ByLayer"
  23. ;   Name = "Pow 3"
  24. ;   ObjectID (RO) = 42
  25. ;   ObjectID32 (RO) = 42
  26. ;   ObjectName (RO) = "AeccDbSurfaceTin"
  27. ;   OutputTriangles (RO) = (7065.31 4326.0 53.0 7388.54 4507.73 53.0 ... )
  28. ;   OwnerID (RO) = 43
  29. ;   OwnerID32 (RO) = 43
  30. ;   PlotStyleName = "ByLayer"
  31. ;   PointFiles (RO) = #<VLA-OBJECT IAeccSurfacePointFiles 0000000034ff7e88>
  32. ;   PointGroups (RO) = #<VLA-OBJECT IAeccSurfacePointGroups 0000000034ff8518>
  33. ;   Points (RO) = (7100.66 4689.45 53.0 7388.54 4507.73 53.0 ... )
  34. ;   ShowToolTip = -1
  35. ;   Statistics (RO) = #<VLA-OBJECT IAeccTinSurfaceStatistics 000000002f4ff0e0>
  36. ;   Style = #<VLA-OBJECT IAeccSurfaceStyle 00000000349bc490>
  37. ;   StyleName (RO) = "Contours 2m and 10m (Background)"
  38. ;   SurfaceAnalysis (RO) = #<VLA-OBJECT IAeccSurfaceAnalysis 000000002f4fe3f0>
  39. ;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000000354be110>
  40. ;   Type (RO) = 2
  41. ;   Visible = -1
  42. ; Methods supported:
  43. ;   AddPointMultiple (1)
  44. ;   ArrayPolar (3)
  45. ;   ArrayRectangular (6)
  46. ;   Copy ()
  47. ;   CreateSnapshot ()
  48. ;   Delete ()
  49. ;   ExtractBorder (1)
  50. ;   ExtractContour (4)
  51. ;   FindElevationAtXY (2)
  52. ;   GetBoundingBox (2)
  53. ;   GetExtensionDictionary ()
  54. ;   GetXData (3)
  55. ;   Highlight (1)
  56. ;   IntersectPointWithSurface (2)
  57. ;   IntersectWith (2)
  58. ;   IsReferenceObject ()
  59. ;   IsReferenceStale ()
  60. ;   IsReferenceSubObject ()
  61. ;   IsReferenceValid ()
  62. ;   Mirror (2)
  63. ;   Mirror3D (3)
  64. ;   Move (2)
  65. ;   PasteSurface (1)
  66. ;   Rebuild ()
  67. ;   RebuildSnapshot ()
  68. ;   RemoveSnapshot ()
  69. ;   Rotate (2)
  70. ;   R

 
在“锡体积表面”返回:
 
  1. Select object: ; [b][color="red"]IAeccTinVolumeSurface[/color][/b]: IAeccTinVolumeSurface interface
  2. ; Property values:
  3. ;   Application (RO) = #<VLA-OBJECT IAeccApplication 000000002f4fc6e0>
  4. ;   Boundaries (RO) = #<VLA-OBJECT IAeccSurfaceBoundaries 0000000034ff7348>
  5. ;   ContourLabelGroups (RO) = #<VLA-OBJECT IAeccSurfaceContourLabelGroups 0000000034ff77a0>
  6. ;   DefinitionProperties (RO) = #<VLA-OBJECT IAeccTinVolumeSurfaceDefinitionProperties 000000002f4fbcc0>
  7. ;   Description = "Description"
  8. ;   DisplayName (RO) = "obj"
  9. ;   Document (RO) = #<VLA-OBJECT IAeccDocument 000000002f4fe7e0>
  10. ;   EntityTransparency = "ByLayer"
  11. ;   Handle (RO) = "64CA"
  12. ;   HasExtensionDictionary (RO) = 0
  13. ;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000000354bd938>
  14. ;   Labels (RO) = #<VLA-OBJECT IAeccSurfaceLabels 0000000034ff7110>
  15. ;   Layer = "C-TOPO"
  16. ;   Linetype = "ByLayer"
  17. ;   LinetypeScale = 1.0
  18. ;   Lineweight = -1
  19. ;   Material = "ByLayer"
  20. ;   Name = "obj"
  21. ;   ObjectID (RO) = 44
  22. ;   ObjectID32 (RO) = 44
  23. ;   ObjectName (RO) = "AeccDbSurfaceTin"
  24. ;   OutputTriangles (RO) = (7226.48 4416.62 53.0 7258.15 4434.42 53.0 ... )
  25. ;   OwnerID (RO) = 43
  26. ;   OwnerID32 (RO) = 43
  27. ;   PlotStyleName = "ByLayer"
  28. ;   Points (RO) = (7189.89 4614.61 53.0 7096.21 4643.67 53.0 ... )
  29. ;   ShowToolTip = -1
  30. ;   Statistics (RO) = #<VLA-OBJECT IAeccTinVolumeSurfaceStatistics 000000002f4fef00>
  31. ;   Style = #<VLA-OBJECT IAeccSurfaceStyle 00000000349ba900>
  32. ;   StyleName (RO) = "Contours and Triangles"
  33. ;   SurfaceAnalysis (RO) = #<VLA-OBJECT IAeccSurfaceAnalysis 000000002f4fe420>
  34. ;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000000354bd990>
  35. ;   Type (RO) = 4
  36. ;   Visible = -1
  37. ; Methods supported:
  38. ;   ArrayPolar (3)
  39. ;   ArrayRectangular (6)
  40. ;   Copy ()
  41. ;   CreateSnapshot ()
  42. ;   Delete ()
  43. ;   ExtractBorder (1)
  44. ;   ExtractContour (4)
  45. ;   FindElevationAtXY (2)
  46. ;   GetBoundingBox (2)
  47. ;   GetExtensionDictionary ()
  48. ;   GetXData (3)
  49. ;   Highlight (1)
  50. ;   IntersectPointWithSurface (2)
  51. ;   IntersectWith (2)
  52. ;   IsReferenceObject ()
  53. ;   IsReferenceStale ()
  54. ;   IsReferenceSubObject ()
  55. ;   IsReferenceValid ()
  56. ;   Mirror (2)
  57. ;   Mirror3D (3)
  58. ;   Move (2)
  59. ;   Rebuild ()
  60. ;   RebuildSnapshot ()
  61. ;   RemoveSnapshot ()
  62. ;   Rotate (2)
  63. ;   Rotate3D (3)
  64. ;   Sa

 
红色表示不同的对象名称。
区分这些物体的想法?
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:03:14 | 显示全部楼层
我看到几个属性仅适用于两种对象类型中的一种。那么,也许使用vlax-property-available-p可以工作?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:07:30 | 显示全部楼层
文章中的所有示例都可以通过ObjectName(RO)=“AcDbLine”来识别
 
  1. (vla-get-objectname obj)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:16:06 | 显示全部楼层
 
我的想法也是。。。
 
  1. (defun foo ( o / r )
  2. (cond
  3.    ( (not (eq 'VLA-OBJECT o)) )
  4.    ( (not (and (vlax-property-available-p o 'ObjectName) (eq (vla-get-ObjectName o) "AeccDbSurfaceTin"))) )
  5.    (
  6.      (setq r
  7.        (if (vl-every '(lambda (x) (vlax-property-available-p o x)) '(Breaklines Contours DEMFiles PointFiles))
  8.          "IAeccTinSurface"
  9.          "IAeccTinVolumeSurface"
  10.        )   
  11.      )
  12.    )
  13. )
  14. r
  15. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:07 , Processed in 0.726673 second(s), 68 queries .

© 2020-2025 乐筑天下

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