- 积分
- 785
- 明经币
- 个
- 注册时间
- 2004-2-22
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2004-12-29 09:02:00
|
显示全部楼层
我已经将您编写的VLAX.CLS导入到该程序的类模块中.
'----------------------------------------------
' VLAX.CLS v2.0 (Last updated 8/1/2003) ' Copyright 1999-2001 by Frank Oquendo ' ' 该程序由明经通道修改支持2004版本 ' http://www.mjtd.com ' ' Permission to use, copy, modify, and distribute this software ' for any purpose and without fee is hereby granted, provided ' that the above copyright notice appears in all copies and ' that both that copyright notice and the limited warranty and ' restricted rights notice below appear in all supporting ' documentation. ' ' FRANK OQUENDO (THE AUTHOR) PROVIDES THIS PROGRAM "AS IS" AND WITH ' ALL FAULTS. THE AUTHOR SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY ' OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. THE AUTHOR ' DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE ' UNINTERRUPTED OR ERROR FREE. ' ' Use, duplication, or disclosure by the U.S. Government is subject to ' restrictions set forth in FAR 52.227-19 (Commercial Computer ' Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) ' (Rights in Technical Data and Computer Software), as applicable. ' ' VLAX.cls allows developers to evaluate AutoLISP expressions from ' Visual Basic or VBA ' ' Notes: ' All code for this class module is publicly available througout various posts ' at news://discussion.autodesk.com/autodesk.autocad.customization.vba. I do not ' claim copyright or authorship on code presented in these posts, only on this ' compilation of that code. In addition, a great big "Thank you!" to Cyrille Fauvel ' demonstrating the use of the VisualLISP ActiveX Module. ' ' Dependencies: ' Use of this class module requires the following application: ' 1. VisualLISP
Private VL As Object Private VLF As Object
Private Sub Class_Initialize() '根据AutoCAD的版本判断使用的库类型 If Left(ThisDrawing.Application.Version, 2) = "15" Then Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.1") ElseIf Left(ThisDrawing.Application.Version, 2) = "16" Then Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.16") End If Set VLF = VL.ActiveDocument.Functions End Sub
Private Sub Class_Terminate() '类析构时,释放内存 Set VLF = Nothing Set VL = Nothing End Sub
Public Function EvalLispExpression(lispStatement As String) '根据LISP表达式调用函数 Dim sym As Object, ret As Object, retVal Set sym = VLF.Item("read").funcall(lispStatement) On Error Resume Next retVal = VLF.Item("eval").funcall(sym) If Err Then EvalLispExpression = "" Else EvalLispExpression = retVal End If End Function
Public Sub SetLispSymbol(symbolName As String, value)
Dim sym As Object, ret, symValue symValue = value Set sym = VLF.Item("read").funcall(symbolName) ret = VLF.Item("set").funcall(sym, symValue) EvalLispExpression "(defun translate-variant (data) (cond ((= (type data) 'list) (mapcar 'translate-variant data)) ((= (type data) 'variant) (translate-variant (vlax-variant-value data))) ((= (type data) 'safearray) (mapcar 'translate-variant (vlax-safearray->list data))) (t data)))" EvalLispExpression "(setq " & symbolName & "(translate-variant " & symbolName & "))" EvalLispExpression "(setq translate-variant nil)" End Sub
Public Function GetLispSymbol(symbolName As String)
Dim sym As Object, ret, symValue symValue = value Set sym = VLF.Item("read").funcall(symbolName) GetLispSymbol = VLF.Item("eval").funcall(sym) End Function
Public Function GetLispList(symbolName As String) As Variant Dim sym As Object, list As Object Dim Count, elements(), i As Long Set sym = VLF.Item("read").funcall(symbolName) Set list = VLF.Item("eval").funcall(sym) Count = VLF.Item("length").funcall(list) ReDim elements(0 To Count - 1) As Variant For i = 0 To Count - 1 elements(i) = VLF.Item("nth").funcall(i, list) Next GetLispList = elements End Function
Public Sub NullifySymbol(ParamArray symbolName())
Dim i As Integer For i = LBound(symbolName) To UBound(symbolName) EvalLispExpression "(setq " & CStr(symbolName(i)) & " nil)" Next End Sub
'------------------------------------------------------ |
|