乐筑天下

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

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

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

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

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2002-7-21 21:26:00 | 显示全部楼层
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
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 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
的第一行。
到底是怎么回事呢,我觉得没那错啊。请受累看看
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

0

主题

5

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2003-1-9 17:08:00 | 显示全部楼层

[求助]请教版主,在VBA中的“IDE”在哪呀,能不能具体的教教,如何用VLAX类?谢谢了
出现如下错误 :
“实时错误-2147221005 (800401f3)”选择调试后停在类库:
Private Sub Class_Initialize()
    Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
    Set VLF = VL.ActiveDocument.Functions
End Sub
的第一行。请问如何解决,麻烦了!
回复

使用道具 举报

0

主题

5

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2003-1-10 09:26:00 | 显示全部楼层
能不能在详细一点说明,我第一次用VLAX!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 07:06 , Processed in 0.214574 second(s), 64 queries .

© 2020-2024 乐筑天下

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