乐筑天下

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

[编程交流] 使用vlax-3dpoint

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:41:04 | 显示全部楼层 |阅读模式
您好,我对使用autolisp写作还比较陌生,现在有点问题。
 
我试图编写一个管道程序,在特定点标记管道的内底。由于我对编码相当陌生,我发现在civil 3d对象中使用函数比使用dxf代码更容易。
 
在我的管道上使用上述activex方法可以为我提供属性“startpoint”。这显然是另一个activex对象,但我无法在其上使用方法列出其x和y坐标(我希望能够在程序中进一步使用)。我假设这是一个3d点,但仍然不知道如何访问单个坐标。有没有专家能帮我解决这个问题?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 22:46:25 | 显示全部楼层
欢迎来到论坛!
 
也许使用这两个选项之一可以满足您的需要。。。。
 
选项1:
  1. (vlax-safearray->list (vlax-variant-value (vla-get-startpoint [i][color=red]obj[/color][/i])))

 
 
选项2:
  1. (vlax-get [i][color=#ff0000]obj [/color][/i]'startpoint)
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:51:57 | 显示全部楼层
感谢您的回复。这正是我在为管道(3d点列表)使用(vlax get属性“startpoint”)时所期望的结果。然而,出于某种原因,当在管道对象上使用时,它不是返回一个列表(这太棒了,因为我可以使用car/cdr函数),而是返回一个VLA对象名。尝试使用(vlax dump object)访问此对象名称时返回错误。我想以某种方式访问它作为一个列表,但不知道从这里去哪里。这可能只是因为它是一个Civil 3D对象吗?同样,我的代码在2008年运行良好,但显然这个“startpoint”对象不再具有“x”和“y”属性。在管道上使用vlax安全数组代码[(vlax safearray->list(vlax variant value(vla get startpoint Obj))])]返回此错误
[;错误:错误的参数类型:variantp#]但是,它返回了常规autocad圆弧的点列表。我很困惑。以下是我在管道上倾倒垃圾的结果:
  1. Command: (vlax-dump-object obj t)
  2. ; IAeccPipe: Pipe interface
  3. ; Property values:
  4. ;   Alignment = nil
  5. ;   Application (RO) = #<VLA-OBJECT IAeccApplication 18021a90>
  6. ;   ClosestPointTo (RO) = ...Indexed contents not shown...
  7. ;   Connectors (RO) = #<VLA-OBJECT IAeccConnectors 18021e50>
  8. ;   Description = "300 mm Concrete"
  9. ;   DisplayName (RO) = "Pipe - (265)"
  10. ;   Document (RO) = #<VLA-OBJECT IAeccDocument 185ec5e0>
  11. ;   EGLDown = 0.0
  12. ;   EGLUp = 0.0
  13. ;   EndPoint (RO) = #<VLA-OBJECT 185ec540>
  14. ;   EndStructure (RO) = #<VLA-OBJECT IAeccStructure 28b2c440>
  15. ;   FlowDirection (RO) = 1
  16. ;   FlowDirectionMethod = 1
  17. ;   Handle (RO) = "7ACC8"
  18. ;   HasExtensionDictionary (RO) = 0
  19. ;   HGLDown = 0.0
  20. ;   HGLUp = 0.0
  21. ;   HoldOnResize = 0
  22. ;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 296c117c>
  23. ;   InnerDiameterOrWidth (RO) = 0.3
  24. ;   InnerHeight (RO) = 0.3
  25. ;   IsMaxCoverViolated (RO) = ...Indexed contents not shown...
  26. ;   IsMinCoverViolated (RO) = ...Indexed contents not shown...
  27. ;   Labels (RO) = #<VLA-OBJECT IAeccPipeLabels 18a97600>
  28. ;   Layer = "N-STM"
  29. ;   Length2D (RO) = 57.8195
  30. ;   Length3D (RO) = 57.8918
  31. ;   Linetype = "ByLayer"
  32. ;   LinetypeScale = 1.0
  33. ;   Lineweight = -1
  34. ;   Material = "ByLayer"
  35. ;   MaximumCover (RO) = 0.0
  36. ;   MinimumCover (RO) = 0.0
  37. ;   Name = "Pipe - (265)"
  38. ;   ObjectID (RO) = 2129999104
  39. ;   ObjectName (RO) = "AeccDbPipe"
  40. ;   OuterDiameterOrWidth (RO) = 0.44
  41. ;   OuterHeight (RO) = 0.44
  42. ;   OwnerID (RO) = 2129857784
  43. ;   ParamsBool (RO) = #<VLA-OBJECT 185ec760>
  44. ;   ParamsDouble (RO) = #<VLA-OBJECT 185ec4c0>
  45. ;   ParamsLong (RO) = #<VLA-OBJECT 185ec280>
  46. ;   ParamsString (RO) = #<VLA-OBJECT 185ec020>
  47. ;   PartDataRecord = #<VLA-OBJECT IAeccPartDataRecord 18025138>
  48. ;   PartFamily (RO) = #<VLA-OBJECT IAeccPartFamily 182ba398>
  49. ;   PartSizeName (RO) = "300 mm Concrete Pipe"
  50. ;   PartType (RO) = 10
  51. ;   PlotStyleName = "ByLayer"
  52. ;   PointAtParam (RO) = ...Indexed contents not shown...
  53. ;   Position (RO) = #<VLA-OBJECT IAeccPoint3d 185ec7e0>
  54. ;   ProfileNetworkParts (RO) = #<VLA-OBJECT IAeccGraphProfileNetworkParts
  55. ;18a94a50>
  56. ;   Radius (RO) = 0.0
  57. ;   ShowToolTip = -1
  58. ;   Slope (RO) = -0.05
  59. ;   StartPoint (RO) = #<VLA-OBJECT 185ec520>
  60. ;   StartStructure (RO) = #<VLA-OBJECT IAeccStructure 28b2c640>
  61. ;   STMPipeMetadata = unsupported result type: 65
  62. ;   Style = #<VLA-OBJECT IAeccPipeStyle 182ba3e8>
  63. ;   SubEntityType (RO) = 0
  64. ;   Surface = nil
  65. ;   SweptShape (RO) = 2
  66. ;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 18a97a20>
  67. ;   Visible = -1
  68. ;   WallThickness (RO) = 0.07
  69. ; Methods supported:
  70. ;   ArrayPolar (3)
  71. ;   ArrayRectangular (6)
  72. ;   ConnectToPipe (3)
  73. ;   ConnectToStructure (2)
  74. ;   Copy ()
  75. ;   Delete ()
  76. ;   Disconnect (1)
  77. ;   GetBoundingBox (2)
  78. ;   GetExtensionDictionary ()
  79. ;   GetXData (3)
  80. ;   Highlight (1)
  81. ;   IntersectWith (2)
  82. ;   IsReferenceObject ()
  83. ;   IsReferenceStale ()
  84. ;   IsReferenceSubObject ()
  85. ;   IsReferenceValid ()
  86. ;   Mirror (2)
  87. ;   Mirror3D (3)
  88. ;   Move (2)
  89. ;   Project2dPointVertically (1)
  90. ;   ResizeByInnerDiaOrWidth (3)
  91. ;   Rotate (2)
  92. ;   Rotate3D (3)
  93. ;   ScaleEntity (2)
  94. ;   SetStartAndEndPoints (2)
  95. ;   SetXData (2)
  96. ;   SwapPartFamilyAndSize (2)
  97. ;   TransformBy (1)
  98. ;   Update ()

它说startpoint属性是另一个VLA对象,但我不知道从那里去哪里,因为它不支持对象转储本身。
回复

使用道具 举报

0

主题

39

帖子

44

银币

限制会员

铜币
-1
发表于 2022-7-5 22:54:15 | 显示全部楼层
请将StartPoint对象获取到变量:
 
  1. (setq StartPointObj
  2.       (vla-get-StartPoint
  3. (vlax-ename->vla-object(car(entsel)))))

 
并向我们展示该对象(而非管道)的属性和方法:
 
  1. (vlax-dump-object StartPointObj T)
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:59:11 | 显示全部楼层
这就是我面临的问题。Autocad不允许我转储起始点。在2008年的民事诉讼中,它似乎运作良好。直到2010年,我才有了这个问题。
回复

使用道具 举报

0

主题

39

帖子

44

银币

限制会员

铜币
-1
发表于 2022-7-5 23:03:16 | 显示全部楼层
 
你好像不明白我的意思。现在开始点不是属性而是对象。用我的代码选择管道,然后转储StartPointObj变量而不是管道。
或者我不理解你
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 23:06:36 | 显示全部楼层
 
也许如果你更具体一点。。。当AutoCAD“不允许[您]转储起始点”时,它在推荐行上显示什么?
 
你加载(vl load com)了吗?
 
否则,斯米尔诺夫的代码将无法工作。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:08:58 | 显示全部楼层
使用斯米尔诺夫代码
  1. !startpointobj
  2. #<VLA-OBJECT 18c9e848>

这与我使用。。。获取起始点代码
返回以下错误:
  1. Command: (vlax-dump-object starpointobj t)
  2. ; error: bad argument type: VLA-OBJECT nil

是的,(vl load com)是lisp中的第一行。谢谢你们的帮助,我完全糊涂了。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:13:48 | 显示全部楼层
对不起,请注意我的拼写错误
这是实际错误:
  1. Command: (vlax-dump-object startpointobj t)
  2. ; Object does not support ITypeInfo interface
回复

使用道具 举报

0

主题

39

帖子

44

银币

限制会员

铜币
-1
发表于 2022-7-5 23:17:53 | 显示全部楼层
懂我们必须装聋作哑。首先,尝试从StartPointObj检索ex.OwnerID的一些公共属性
 
  1. (vlax-get-property StartPointObj 'OwnerID)

 
如果成功。尝试查找秘密属性,例如:
 
  1. (vlax-get-property StartPointObj 'Coordinate)
  2. (vlax-get-property StartPointObj 'Coordinates)
  3. (vlax-get-property StartPointObj 'Point)

 

 
如果不成功。扔了它肮脏的生意,去喝啤酒。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:01 , Processed in 0.365818 second(s), 72 queries .

© 2020-2025 乐筑天下

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