明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3869|回复: 10

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

[复制链接]
发表于 2002-7-21 21:06 | 显示全部楼层 |阅读模式
我是一个新人,初次来这里感觉受益非浅。
不过我有一些疑问,希望大家指导
1。如何在屏幕上选择一条多义线后得到它的长度?
我看了你网站上的资料,但具体不会用,一个要用到alvx库,能告诉我怎么定义吗?最好能有一个例子。还有一个函数,也不知道如何传递参数。

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

3。怎么加密vba。

先谢谢大家了。
发表于 2002-7-21 21:26 | 显示全部楼层

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
 楼主| 发表于 2002-7-21 21:40 | 显示全部楼层

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

 楼主| 发表于 2002-7-21 22:34 | 显示全部楼层

还是有问题!

“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
的第一行。

到底是怎么回事呢,我觉得没那错啊。请受累看看
 楼主| 发表于 2002-7-22 15:02 | 显示全部楼层

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

发表于 2002-11-19 18:13 | 显示全部楼层

如何初始化,我笨

发表于 2002-11-19 21:40 | 显示全部楼层

在内

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

[求助]请教版主,在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
的第一行。请问如何解决,麻烦了!
发表于 2003-1-9 17:53 | 显示全部楼层

要先加载VL才行

发表于 2003-1-10 09:26 | 显示全部楼层

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

能不能在详细一点说明,我第一次用VLAX!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 07:37 , Processed in 0.245116 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表