cadman6735 发表于 2022-7-6 09:53:09

vla get实用程序

我想我理解这个函数,但是。。。
 
有人能在外行turms中解释一下如何使用这个功能吗。(vla get实用程序)
 
 
我已经知道如何使用vla zoomwindow的这个功能来缩放。
 
我刚开始只是使用(getpoint),但没有成功,我只能假设将(getpoint)函数与(vla zoomwindow)一起使用是首先将getpoint符号更改为(vlax ename->vla object)。{我没有尝试}因为我发现了(vla get utility),这使我相信我已经首先将lisp元素更改为vlisp元素。
 
对不起,我解释得太长了。。。。我只是想知道我的想法是否正确。。。
 
谢谢

lfe011969 发表于 2022-7-6 10:03:09

请看Afralisp上的这一页。网希望这有帮助。

cadman6735 发表于 2022-7-6 10:07:54

 
 
这很有帮助
 
谢谢
综合实地演练

Lee Mac 发表于 2022-7-6 10:11:17

卡德曼,
 
您可能会发现getpoint比vla getpoint更容易使用,因为使用getpoint时,如果用户未能选择点,函数将返回nil,而vla getpoint函数在选择null时将出错。
 
我将向您展示这两种方法,让您决定哪种方法更容易:
 

(defun c:zw1 ( / _CatchApply _acad _util v1 v2 ) (vl-load-com)

(defun _CatchApply ( _function _args )
   (if
   (not
       (vl-catch-all-error-p
         (setq result
         (vl-catch-all-apply _function _args)
         )
       )
   )
   result
   )
)

(setq _acad (vlax-get-acad-object)
       _util (vla-get-Utility (vla-get-ActiveDocument _acad))
)

(if
   (and
   (setq v1 (_CatchApply 'vla-getPoint (list _util nil "\nSpecify First Point: ")))
   (setq v2 (_CatchApply 'vla-getPoint (list _util v1"\nSpecify Next Point: ")))
   )
   (vla-ZoomWindow _acad v1 v2)
)

(princ)
)

最后一件事:请注意,vlax-3D-point函数是创建长度为3的一维安全阵列变体的“方便工具”,相当于:
 

(defun _vlax-3D-point ( l )
(vlax-make-variant
   (vlax-safearray-fill
   (vlax-make-safearray vlax-vbDouble '(0 . 2))
   l
   )
)
)

cadman6735 发表于 2022-7-6 10:17:59

啊,我明白了。。。
 
(vlax-3D-point)我没有将其添加到我的(getpoint)版本中。这就是vanila lisp转换为可视lisp点的地方?
 
为什么把P1加在这里的末尾?
 
 
 
 
零是为了什么?
 
 
 
编辑
 
我想知道你如何在不使用zoom命令的情况下放大vanilla lisp?我在网上找不到一个例子,他们都使用命令缩放。
 
谢谢

cadman6735 发表于 2022-7-6 10:19:16

好吧,我撒谎了
 
在我最初的尝试中,我确实使用了(vlax-3D-point),但我只使用了一个,而且也错误地使用了一个,非常错误。。。
 
以下是我的错误代码,它不起作用:
 

(defun C:test ( / )
(vl-load-com)
(setq
   acadObject   (vlax-get-acad-object)
   acadActiveDocument(vla-get-ActiveDocument acadObject)
)
;-----------------------------------------------------------------------------------------
   (vla-StartUndoMark acadActiveDocument) ;Start of UNDO
;-----------------------------------------------------------------------------------------
(setq
   plt1 (getpoint "\nPlace First Plot Point")
   plt2 (getpoint "\nPlace Second Plot Point")
)
(vla-zoomwindow acadObject (vlax-3D-point (plt1 plt2)))

;(print plt1)
;(print plt2)




;-----------------------------------------------------------------------------------------
   (vla-EndUndoMark acadActiveDocument) ;End of UNDO
;-----------------------------------------------------------------------------------------
   (princ)
)

 
 
 
现在,我修改的代码,使用你的例子李,它的工作。。。很酷的东西
 
 
4
 
 
 
你添加了一些我还不懂的东西,但我很喜欢阅读你的代码。。。
 
谢谢你的帮助李

Lee Mac 发表于 2022-7-6 10:27:15

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

irneb 发表于 2022-7-6 10:29:11

与我在本例中使用getcorner的原因相同:wink:

Lee Mac 发表于 2022-7-6 10:33:46

 
同意-我过于专注于解释VL-getcorner更合适。

cadman6735 发表于 2022-7-6 10:39:44

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