乐筑天下

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

[编程交流] vla addleader问题

[复制链接]

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:02:03 | 显示全部楼层 |阅读模式
你好
我身上发生了一些奇怪的事情,我不知道为什么。
  1. (setvar 'osmode 0)
  2. (setq pt1 (getpoint "\nFirst point: ")
  3.      pt2 (getpoint "\nNext point: ")
  4.   pt3 (getpoint)
  5.      space (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
  6.      )
  7.   (princ pt1)
  8.   (princ pt2)
  9. (setq ptlist (vlax-make-safearray vlax-vbDouble '(0 . 5)))
  10. (vlax-safearray-fill ptlist (apply (function append) (list pt1 pt2)))
  11. (setq txtobj (vla-addmtext space (vlax-3d-point pt2) 0 ""))
  12. (setq ldrobj (vla-addleader space ptlist txtobj acLineWithArrow))
  13. (vla-addpolyline space ptlist)
  14. (vla-delete txtobj)

 
拜托,这个Lisp程序怎么了?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:19:36 | 显示全部楼层
问题是,提供给ActiveX addleader方法的顶点参数需要是Safearray类型的变体;然而,在您的代码中,您只提供了Safearray。
 
下面是一个示例,演示如何构建变体:
  1. ([color=BLUE]defun[/color] c:test1 ( [color=BLUE]/[/color] ldr pt1 pt2 spc txt )
  2.    ([color=BLUE]if[/color]
  3.        ([color=BLUE]and[/color]
  4.            ([color=BLUE]setq[/color] pt1 ([color=BLUE]getpoint[/color] [color=MAROON]"\n1st point: "[/color]))
  5.            ([color=BLUE]setq[/color] pt2 ([color=BLUE]getpoint[/color] [color=MAROON]"\n2nd point: "[/color] pt1))
  6.        )
  7.        ([color=BLUE]progn[/color]
  8.            ([color=BLUE]setq[/color] spc
  9.                ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
  10.                    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))
  11.                        'paperspace
  12.                        'modelspace
  13.                    )
  14.                )
  15.            )
  16.            ([color=BLUE]setq[/color] txt ([color=BLUE]vla-addmtext[/color] spc ([color=BLUE]vlax-3D-point[/color] ([color=BLUE]trans[/color] pt2 1 0)) 0.0 [color=MAROON]""[/color]))
  17.            ([color=BLUE]setq[/color] ldr
  18.                ([color=BLUE]vla-addleader[/color] spc
  19.                    ([color=BLUE]vlax-make-variant[/color]
  20.                        ([color=BLUE]vlax-safearray-fill[/color]
  21.                            ([color=BLUE]vlax-make-safearray[/color] [color=BLUE]vlax-vbdouble[/color] '(0 . 5))
  22.                            ([color=BLUE]append[/color] ([color=BLUE]trans[/color] pt1 1 0) ([color=BLUE]trans[/color] pt2 1 0))
  23.                        )
  24.                    )
  25.                    txt [color=BLUE]aclinewitharrow[/color]
  26.                )
  27.            )
  28.            ([color=BLUE]vla-delete[/color] txt)
  29.        )
  30.    )
  31.    ([color=BLUE]princ[/color])
  32. )

但是,通过使用未记录的vlax调用函数代替vlax调用方法或vla addleader,您可以完全避免使用变体和安全数组(有关这些差异的更多信息,请参阅此处):
  1. ([color=BLUE]defun[/color] c:test2 ( [color=BLUE]/[/color] ldr pt1 pt2 spc txt )
  2.    ([color=BLUE]if[/color]
  3.        ([color=BLUE]and[/color]
  4.            ([color=BLUE]setq[/color] pt1 ([color=BLUE]getpoint[/color] [color=MAROON]"\n1st point: "[/color]))
  5.            ([color=BLUE]setq[/color] pt2 ([color=BLUE]getpoint[/color] [color=MAROON]"\n2nd point: "[/color] pt1))
  6.        )
  7.        ([color=BLUE]progn[/color]
  8.            ([color=BLUE]setq[/color] spc
  9.                ([color=BLUE]vlax-get-property[/color] ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
  10.                    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 1 ([color=BLUE]getvar[/color] 'cvport))
  11.                        'paperspace
  12.                        'modelspace
  13.                    )
  14.                )
  15.            )
  16.            ([color=BLUE]setq[/color] txt ([color=BLUE]vlax-invoke[/color] spc 'addmtext  ([color=BLUE]trans[/color] pt2 1 0) 0.0 [color=MAROON]""[/color])
  17.                  ldr ([color=BLUE]vlax-invoke[/color] spc 'addleader ([color=BLUE]append[/color] ([color=BLUE]trans[/color] pt1 1 0) ([color=BLUE]trans[/color] pt2 1 0)) txt [color=BLUE]aclinewitharrow[/color])
  18.            )
  19.            ([color=BLUE]vla-delete[/color] txt)
  20.        )
  21.    )
  22.    ([color=BLUE]princ[/color])
  23. )

然而,就领导实体而言,在我看来,使用entmake/entmakex的Vanilla AutoLISP路由要简单得多:
  1. ([color=BLUE]defun[/color] c:test3 ( [color=BLUE]/[/color] pt1 pt2 )
  2.    ([color=BLUE]if[/color]
  3.        ([color=BLUE]and[/color]
  4.            ([color=BLUE]setq[/color] pt1 ([color=BLUE]getpoint[/color] [color=MAROON]"\n1st point: "[/color]))
  5.            ([color=BLUE]setq[/color] pt2 ([color=BLUE]getpoint[/color] [color=MAROON]"\n2nd point: "[/color] pt1))
  6.        )
  7.        ([color=BLUE]entmake[/color]
  8.            ([color=BLUE]list[/color]
  9.               '(000 . [color=MAROON]"LEADER"[/color])
  10.               '(100 . [color=MAROON]"AcDbEntity"[/color])
  11.               '(100 . [color=MAROON]"AcDbLeader"[/color])
  12.                ([color=BLUE]cons[/color] 010 ([color=BLUE]trans[/color] pt1 1 0))
  13.                ([color=BLUE]cons[/color] 010 ([color=BLUE]trans[/color] pt2 1 0))
  14.                ([color=BLUE]cons[/color] 210 ([color=BLUE]trans[/color] '(0.0 0.0 1.0) 1 0 [color=BLUE]t[/color]))
  15.            )
  16.        )
  17.    )
  18.    ([color=BLUE]princ[/color])
  19. )
回复

使用道具 举报

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:32:12 | 显示全部楼层
李·麦克,
你又做了一次!
哦,你。。。
非常感谢!
(认真地)
回复

使用道具 举报

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:38:27 | 显示全部楼层
Vanilla lisp按预期工作,但其他语言在VLisp中仍然出现相同的问题
我们如何修复它?
问题是我试着这样做:
010205azkns21wtwo2q2te.png
我明白了:
010206x9odklync33lcnlt.png
通过运行C:test1或C:test2
 
有什么提示吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:52:22 | 显示全部楼层
 
不客气!
 
 
我认为Visual LISP ActiveX addleader方法存在一个已知的错误,即无法指定null注释参数;因此,当使用此方法创建引线时,将自动为文本对象生成“平台”。
 
我的建议是:使用Vanilla AutoLISP。
回复

使用道具 举报

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 01:11:47 | 显示全部楼层
 
当然再次感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:11 , Processed in 0.351676 second(s), 66 queries .

© 2020-2025 乐筑天下

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