miner 发表于 2002-7-21 21:06:00

请教老师:如何在屏幕上选择一条多义线后得到它的长度?

我是一个新人,初次来这里感觉受益非浅。
不过我有一些疑问,希望大家指导
1。如何在屏幕上选择一条多义线后得到它的长度?
我看了你网站上的资料,但具体不会用,一个要用到alvx库,能告诉我怎么定义吗?最好能有一个例子。还有一个函数,也不知道如何传递参数。

2。能用sendcommand发送命令后,紧接着执行一个宏吗?

3。怎么加密vba。

先谢谢大家了。

mccad 发表于 2002-7-21 21:26:00

VLAX类可以在下载中心下载到

http://www.mjtd.com/mcdown/list.asp?id=85
你可将类下载后解压。
在VBA的IDE中使用输入类的功能将该类导入,这样这个VLAX类就可以用了。
在实用函数中有一个有关VBA求曲线长度的函数:
http://www.mjtd.com/function/vba/018.htm

Public Function GetCurveLength(curve As AcadEntity) As Double
    Dim obj As VLAX, retVal
    Set obj = New VLAX
    obj.EvalLispExpression "(setq curve (handent " & Chr(34) & curve.Handle & Chr(34) & "))"
    obj.EvalLispExpression "(setq curvelength (vlax-curve-getDistAtParam curve " & _
                           "(vlax-curve-getEndParam curve)))"
    retVal = obj.GetLispSymbol("curvelength")
    obj.NullifySymbol "curve", "curvelength"
    Set obj = Nothing
    GetCurveLength = CDbl(retVal)
End Function

只有你将对象提供给这个函数做为参数,就可以直接求出曲线的长度(注意这个函数就使用到VLAX类了)。

2.使用SendCommand方法执行的命令,后面的参数必须是在命令行下可以识别的参数,也就是说不能使用属于VBA自身的数据类型(如变体数组、AX对象等),你可以提供VBA的函数(包括自定义函数)传递给它,但不能是宏。只要它传递的数据适合SendCommand的数据格式就行。

3.加密VBA比较简单,工程属性中有保护项,你可以使用密码来保护你的VBA源代码(可是这种方法不安全,因为这种密码有专门的软件可以破,幸好这种工具还算没有流行起来)。
下载中心有一个工具也可以对VBA程序进行调整,它可将VBA程序中的注释全部去掉并去掉程序中每语句前的空格,这样可以增加阅读的难度,人家就是解开了也很难看懂。地址:http://www.mjtd.com/mcdown/list.asp?id=231

miner 发表于 2002-7-21 21:40:00

谢谢,没想到这么快就恢复了

miner 发表于 2002-7-21 22:34:00

还是有问题!

“http://www.mjtd.com/mcdown/list.asp?id=85 ;”下载不了。我在别处下载了。
在vba ide中用文件-导入-选vlax.cls
程序为:
Sub try()
Dim pickObj As AcadEntity         '保存被选择图元的对象变量
Dim pickPnt As Variant            '选择图元时的拾取点变量
Dim length As Double
ThisDrawing.Utility.GetEntity pickObj, pickPnt, "选择图元对象:"

length = GetCurveLength(pickObj)
MsgBox length

End Sub

Public Function GetCurveLength(curve As AcadEntity) As Double
    Dim obj As VLAX, retVal
    Set obj = New VLAX
    obj.EvalLispExpression "(setq curve (handent " & Chr(34) & curve.Handle & Chr(34) & "))"
    obj.EvalLispExpression "(setq curvelength (vlax-curve-getDistAtParam curve " & _
                           "(vlax-curve-getEndParam curve)))"
    retVal = obj.GetLispSymbol("curvelength")
    obj.NullifySymbol "curve", "curvelength"
    Set obj = Nothing
    GetCurveLength = CDbl(retVal)
End Function

运行后在图形中选择了一个pline,报错“实时错误-2147221005 (800401f3)”选择调试后停在类库:
Private Sub Class_Initialize()

    Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
    Set VLF = VL.ActiveDocument.Functions

End Sub
的第一行。

到底是怎么回事呢,我觉得没那错啊。请受累看看

miner 发表于 2002-7-22 15:02:00

好了,搞定了,没有初始化

fjwok1 发表于 2002-11-19 18:13:00

如何初始化,我笨

mccad 发表于 2002-11-19 21:40:00

在内

注意程序中以下两行是必须的:
Dim objVLAX As vlax
Set objVLAX = New vlax
这样才能调用其所定义的一些函数,调用方法:
objVLAX.EvalLispExpression 为执行LISP表达式
其它的一些函数自己看看应该能明白
另外,下载了VLAX后使用导入类功能来导入

pbh1974 发表于 2003-1-9 17:08:00

[求助]请教版主,在VBA中的“IDE”在哪呀,能不能具体的教教,如何用VLAX类?谢谢了

本帖最后由 作者 于 2003-1-9 17:08:03 编辑

[求助]请教版主,在VBA中的“IDE”在哪呀,能不能具体的教教,如何用VLAX类?谢谢了
出现如下错误 :
“实时错误-2147221005 (800401f3)”选择调试后停在类库:
Private Sub Class_Initialize()

    Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
    Set VLF = VL.ActiveDocument.Functions

End Sub
的第一行。请问如何解决,麻烦了!

mccad 发表于 2003-1-9 17:53:00

要先加载VL才行

pbh1974 发表于 2003-1-10 09:26:00

能不能在详细一点说明,我第一次用VLAX!!

能不能在详细一点说明,我第一次用VLAX!!
页: [1] 2
查看完整版本: 请教老师:如何在屏幕上选择一条多义线后得到它的长度?