乐筑天下

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

[编程交流] vla get实用程序

[复制链接]

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 09:53:09 | 显示全部楼层 |阅读模式
我想我理解这个函数,但是。。。
 
有人能在外行turms中解释一下如何使用这个功能吗。(vla get实用程序)
 
 
我已经知道如何使用vla zoomwindow的这个功能来缩放。
 
我刚开始只是使用(getpoint),但没有成功,我只能假设将(getpoint)函数与(vla zoomwindow)一起使用是首先将getpoint符号更改为(vlax ename->vla object)。{我没有尝试}因为我发现了(vla get utility),这使我相信我已经首先将lisp元素更改为vlisp元素。
 
对不起,我解释得太长了。。。。我只是想知道我的想法是否正确。。。
 
谢谢
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 10:03:09 | 显示全部楼层
请看Afralisp上的这一页。网希望这有帮助。
回复

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:07:54 | 显示全部楼层
 
 
这很有帮助
 
谢谢
综合实地演练
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:11:17 | 显示全部楼层
卡德曼,
 
您可能会发现getpoint比vla getpoint更容易使用,因为使用getpoint时,如果用户未能选择点,函数将返回nil,而vla getpoint函数在选择null时将出错。
 
我将向您展示这两种方法,让您决定哪种方法更容易:
 
  1. [color=RED]([/color][color=BLUE]defun[/color] c:zw1 [color=RED]([/color] [color=BLUE]/[/color] _CatchApply _acad _util v1 v2 [color=RED])[/color] [color=RED]([/color][color=BLUE]vl-load-com[/color][color=RED])[/color]
  2. [color=RED]([/color][color=BLUE]defun[/color] _CatchApply [color=RED]([/color] _function _args [color=RED])[/color]
  3.    [color=RED]([/color][color=BLUE]if[/color]
  4.      [color=RED]([/color][color=BLUE]not[/color]
  5.        [color=RED]([/color][color=BLUE]vl-catch-all-error-p[/color]
  6.          [color=RED]([/color][color=BLUE]setq[/color] result
  7.            [color=RED]([/color][color=BLUE]vl-catch-all-apply[/color] _function _args[color=RED])[/color]
  8.          [color=RED])[/color]
  9.        [color=RED])[/color]
  10.      [color=RED])[/color]
  11.      result
  12.    [color=RED])[/color]
  13. [color=RED])[/color]
  14. [color=RED]([/color][color=BLUE]setq[/color] _acad [color=RED]([/color][color=BLUE]vlax-get-acad-object[/color][color=RED])[/color]
  15.        _util [color=RED]([/color][color=BLUE]vla-get-Utility[/color] [color=RED]([/color][color=BLUE]vla-get-ActiveDocument[/color] _acad[color=RED]))[/color]
  16. [color=RED])[/color]
  17. [color=RED]([/color][color=BLUE]if[/color]
  18.    [color=RED]([/color][color=BLUE]and[/color]
  19.      [color=RED]([/color][color=BLUE]setq[/color] v1 [color=RED]([/color]_CatchApply [color=DARKRED]'[/color][color=BLUE]vla-getPoint[/color] [color=RED]([/color][color=BLUE]list[/color] _util [color=BLUE]nil[/color] [color=#a52a2a]"\nSpecify First Point: "[/color][color=RED])))[/color]
  20.      [color=RED]([/color][color=BLUE]setq[/color] v2 [color=RED]([/color]_CatchApply [color=DARKRED]'[/color][color=BLUE]vla-getPoint[/color] [color=RED]([/color][color=BLUE]list[/color] _util v1  [color=#a52a2a]"\nSpecify Next Point: "[/color][color=RED])))[/color]
  21.    [color=RED])[/color]
  22.    [color=RED]([/color][color=BLUE]vla-ZoomWindow[/color] _acad v1 v2[color=RED])[/color]
  23. [color=RED])[/color]
  24. [color=RED]([/color][color=BLUE]princ[/color][color=RED])[/color]
  25. [color=RED])[/color]

最后一件事:请注意,vlax-3D-point函数是创建长度为3的一维安全阵列变体的“方便工具”,相当于:
 
  1. [color=RED]([/color][color=BLUE]defun[/color] _vlax-3D-point [color=RED]([/color] l [color=RED])[/color]
  2. [color=RED]([/color][color=BLUE]vlax-make-variant[/color]
  3.    [color=RED]([/color][color=BLUE]vlax-safearray-fill[/color]
  4.      [color=RED]([/color][color=BLUE]vlax-make-safearray[/color] [color=BLUE]vlax-vbDouble[/color] [color=DARKRED]'[/color][color=RED]([/color][color=#009900]0[/color] [color=DARKRED].[/color] [color=#009900]2[/color][color=RED]))[/color]
  5.      l
  6.    [color=RED])[/color]
  7. [color=RED])[/color]
  8. [color=RED])[/color]
回复

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:17:59 | 显示全部楼层
啊,我明白了。。。
 
(vlax-3D-point)我没有将其添加到我的(getpoint)版本中。这就是vanila lisp转换为可视lisp点的地方?
 
为什么把P1加在这里的末尾?
 
 
 
 
零是为了什么?
 
 
 
编辑
 
我想知道你如何在不使用zoom命令的情况下放大vanilla lisp?我在网上找不到一个例子,他们都使用命令缩放。
 
谢谢
回复

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:19:16 | 显示全部楼层
好吧,我撒谎了
 
在我最初的尝试中,我确实使用了(vlax-3D-point),但我只使用了一个,而且也错误地使用了一个,非常错误。。。
 
以下是我的错误代码,它不起作用:
 
  1. (defun C:test ( / )
  2. (vl-load-com)
  3. (setq
  4.    acadObject   (vlax-get-acad-object)
  5.    acadActiveDocument  (vla-get-ActiveDocument acadObject)
  6. )
  7. ;-----------------------------------------------------------------------------------------
  8.    (vla-StartUndoMark acadActiveDocument) ;Start of UNDO
  9. ;-----------------------------------------------------------------------------------------
  10. (setq
  11.    plt1 (getpoint "\nPlace First Plot Point")
  12.    plt2 (getpoint "\nPlace Second Plot Point")
  13. )
  14. (vla-zoomwindow acadObject (vlax-3D-point (plt1 plt2)))
  15. ;(print plt1)
  16. ;(print plt2)
  17. ;-----------------------------------------------------------------------------------------
  18.    (vla-EndUndoMark acadActiveDocument) ;End of UNDO
  19. ;-----------------------------------------------------------------------------------------
  20.    (princ)
  21. )

 
 
 
现在,我修改的代码,使用你的例子李,它的工作。。。很酷的东西
 
 
  1. 4

 
 
 
你添加了一些我还不懂的东西,但我很喜欢阅读你的代码。。。
 
谢谢你的帮助李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:27:15 | 显示全部楼层
 
它将点转换为SafeArray变体-“safe”,因为您不能超出数组的边界。vlax-3D-point返回的结果与我发布的替代版本相同-请阅读VLIDE帮助中的safearrays/variants以获取更多信息-它会比我解释得更好。
 
 
在帮助中查找getpoint,然后告诉我
 
 
请查看帮助中vla getpoint函数的参数列表,看看是否可以告诉我
 
 
不使用VL,只需使用命令调用。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:29:11 | 显示全部楼层
与我在本例中使用getcorner的原因相同:wink:
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:33:46 | 显示全部楼层
 
同意-我过于专注于解释VL-getcorner更合适。
回复

使用道具 举报

23

主题

117

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-6 10:39:44 | 显示全部楼层
 
P1充当pt(getpoint[pt][msg])橡皮筋线。
 
我记得AlanJT给了我一个例子,当我问到如何画一条线并显示这条线,但我把它与line命令not getpoint联系起来。(有时一次消化的信息太多了。我忘记了我在哪里看到的东西,以及为什么看到的东西)但在每一个新的理解层次上,我都会得到那些“aaahhhaaaa”的时刻。这是其中之一。
 
 
 
这件事仍然让我感到困惑。我正在研究getpoint方法,但我没有看到任何包含nil的内容。我只能假设您在选择点之前清除了v1。
 
 
 
那么变焦是如何工作的呢?除非变焦本身就是一种功能,否则它必须在某个地方进行编程?
 
 
谢谢你让我查找答案(并引导我去哪里查找)。。。我不是在寻找简单的答案,我是在学习编程,和往常一样,在每次寻找一个答案的旅程中,我都会找到10个以上的答案来回答我还不知道的问题。
 
谢谢李。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:36 , Processed in 0.548414 second(s), 72 queries .

© 2020-2025 乐筑天下

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