![]() | ![]() |
Translate to: |
|||||
Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО |
Откоройте редактор Visual LISP набрав "VLIDE" в командной строке.
В консоли Visual LISP [VLC] наберите
(vl-load-com)Далее можно получить текущий объект приложения AutoCAD из ActiveX automation набрав следующее:
(still in the VLC) (setq acadApp (vlax-get-acad-object))Вы должны получить некоторое значение на подобие этого:
#<VLA-OBJECT IAcadApplication 00ac8928>Получим объект AcadDocument:
(setq acadDoc (vla-get-activedocument acadapp))И наконец получим имя активного документа используя следующую функцию:
(princ (vlax-get-property acaddoc 'Name))
(vl-load-com) (setq acadApp (vlax-get-acad-object)) (setq acadDoc (vla-get-ActiveDocument acadApp))
VBA понимает эти объекты как коллекции. К примеру все уровни в чертеже представляют
собой коллекцию уровней. Следовательно, VBA имеет коллекцию уровней.
Перед тем, как мы сможем создать новый объект-уровень в Visual LISP
мы должны получить ссылку на коллекцию уровней так же как мы получили ссылку
в предыдущем случае ссылку на объект Document в AutoCAD.
Данный код позволяет получить эту ссылку:
(setq objLayers (vla-get-Layers acadDoc))После того, как мы получили ссылку на коллекцию уровней мы будем использовать метод Add для того, что бы создать новый объект layer в коллекции уровней:
(setq objLayer (vlax-invoke-method objLayers 'Add "NewLayer"))
Общий принцип следующий:
синтаксис Visual Basic -> ReturnValue = Object.Method(Parameters) синтаксис Visual LISP -> (setq ReturnValue (vla-Method Object Parameters))"ReturnValue" в синтаксисе Visual Basic преобразуется в "ReturnValue" в синтаксисе Visual LISP и так же с Object, Method и Parameters.
Visual Basic syntax -> Set AcadCircleObject = ThisDrawing.ModelSpace.AddCircle(CenterPoint, Radius) Visual LISP syntax -> (setq AcadCircleObject (vla-AddCircle ModelSpace CenterPoint Radius))
Напомним как следует начинать каждый проект Visual LISP. Эти четыре линии должны буть включены в каждый проект:
(vl-load-com) ; Загружает расширение Visual LISP COM (setq acadApp (vlax-get-acad-object)) ; Это создает указатель в AutoCAD (setq acadDoc (vla-get-activedocument)) ; Это создает указатель в документе AutoCAD (setq acadMS (vla-get-modelspace)) ; Об этой функции позднееВы можете включить эти функции в автозагрузочную подпрограмму.
(vlax-dump-object acadDoc)Вы должны будете получить результат подобный следующему:
; IAcadDocument: An AutoCAD drawing ; Property values: ; Active (RO) = -1 ; ActiveDimStyle = #<VLA-OBJECT IAcadDimStyle 01aa6b64> ; ActiveLayer = #<VLA-OBJECT IAcadLayer 01aa6964> ; ActiveLayout = #<VLA-OBJECT IAcadLayout 01aa66a4> ; ActiveLinetype = #<VLA-OBJECT IAcadLineType 01aa6614> ; ActivePViewport = AutoCAD: No active viewport in paperspace ; ActiveSelectionSet (RO) = #<VLA-OBJECT IAcadSelectionSet 01aa63c4> ; ActiveSpace = 1 ; ActiveTextStyle = #<VLA-OBJECT IAcadTextStyle 01aa61c4> ; ActiveUCS = #<VLA-OBJECT IAcadUCS 01aa9e64> ; ActiveViewport = #<VLA-OBJECT IAcadViewport 01aaa494> ; Application (RO) = #<VLA-OBJECT IAcadApplication 00ac8928> ; Blocks (RO) = #<VLA-OBJECT IAcadBlocks 01aa5114> ; Database (RO) = #<VLA-OBJECT IAcadDatabase 01aa7f84> ; Dictionaries (RO) = #<VLA-OBJECT IAcadDictionaries 01aabc74> ; DimStyles (RO) = #<VLA-OBJECT IAcadDimStyles 01aaba14> ; ElevationModelSpace = 0.0 ; ElevationPaperSpace = 0.0 ; FullName (RO) = "" ; Groups (RO) = #<VLA-OBJECT IAcadGroups 01aab7b4> ; Height = 551 ; HWND (RO) = 556 ; Layers (RO) = #<VLA-OBJECT IAcadLayers 01aa6df4> ; Layouts (RO) = #<VLA-OBJECT IAcadLayouts 01aab5c4> ; Limits = (0.0 0.0 12.0 9.0) ; Linetypes (RO) = #<VLA-OBJECT IAcadLineTypes 01aab3d4> ; ModelSpace (RO) = #<VLA-OBJECT IAcadModelSpace 01aa7e64> ; MSpace = AutoCAD: Invalid mode ; Name (RO) = "Drawing1.dwg" ; ObjectSnapMode = 0 ; PaperSpace (RO) = #<VLA-OBJECT IAcadPaperSpace 01aab0e4> ; Path (RO) = "C:\\Program Files\\ACAD2000" ; PickfirstSelectionSet (RO) = #<VLA-OBJECT IAcadSelectionSet 01aab044> ; Plot (RO) = #<VLA-OBJECT IAcadPlot 01aa9c4c> ; PlotConfigurations (RO) = #<VLA-OBJECT IAcadPlotConfigurations 01aacae4> ; Preferences (RO) = #<VLA-OBJECT IAcadDatabasePreferences 01aa7f54> ; ReadOnly (RO) = 0 ; RegisteredApplications (RO) = #<VLA-OBJECT IAcadRegisteredApplications 01aac694> ; Saved (RO) = 0 ; SelectionSets (RO) = #<VLA-OBJECT IAcadSelectionSets 01aa63f4> ; TextStyles (RO) = #<VLA-OBJECT IAcadTextStyles 01aac434> ; UserCoordinateSystems (RO) = #<VLA-OBJECT IAcadUCSs 01aac1d4> ; Utility (RO) = #<VLA-OBJECT IAcadUtility 01aaafc4> ; Viewports (RO) = #<VLA-OBJECT IAcadViewports 01aaaf34> ; Views (RO) = #<VLA-OBJECT IAcadViews 01aaacd4> ; Width = 950 ; WindowState = 1 ; WindowTitle (RO) = "Drawing1"Обратите внимание на (RO) около некоторых из свойств. Это означает что это доступно только для чтения
Свойства, имена которых заканчиваются на "s", к примеру Views и Viewports -это коллекции объектов. В терминах AutoCAD все Layers или Blocks так же известны как коллекции.
Как же узнать, какие методы нам доступны? Это можно сделать, добавив T к концу выражения следующим образом(vlax-dump-object acadDoc T)Тогда это было бы добавлено в конец к вышеупомянутому списку:
; Methods supported: ; Activate () ; AuditInfo (1) ; Close (2) ; CopyObjects (3) ; EndUndoMark () ; Export (3) ; GetVariable (1) ; HandleToObject (1) ; Import (3) ; LoadShapeFile (1) ; New (1) ; ObjectIdToObject (1) ; Open (1) ; PurgeAll () ; Regen (1) ; Save () ; SaveAs (2) ; SendCommand (1) ; SetVariable (2) ; StartUndoMark () ; Wblock (2)Теперь, если вы знаете что либо о программировании в VBA вы сможете использовать эту информацию. Здесь все методы, которые поддерживает объект Document.
Числа в круглых скобках - число параметров, включенных в Метод. К сожалению, это не сообщает Вам, если таковые вообще имеются, существуют ли возвращаемые значения.
Итак, начнем серию материалов, посвященных доступу к Microsoft Excel 97 и 2000. Эта первая часть будет основой последующих материалов.Здесь будет расказано как создать связь с Excel 97 или 2000 (что вам понадобиться при прочтении последующих материалов по этой теме).
Загруска библиотеки типов Excel.(vl-load-com) (defun LoadXL2000 () (progn (princ "\nInitializing Microsoft Excel 2000 ...") (vlax-Import-Type-Library :tlb-filename "C:\\Program Files\\Microsoft Office 2000\\Office\\excel9.olb" :methods-prefix "xla-" :properties-prefix "xla-" :constants-prefix "xla-" ) ) (princ) (princ "\nExcel Type Library loaded ...")(princ) )
Очевидно, что вам необходимо изменить строку :tlb-filename что бы указать расположение файла excel9.olb в вашей системе. Так же, если вы используете Excel 97 имя библиотеки типов будет excel8.olb.
Создайте образца ExcelТеперь нам необходимо создать образец (загруженную копию) приложения.
(defun CreateXL () (setq objExcel (vlax-Create-Object "Excel.Application.9")) (princ "\nExcel 2000 is now loaded ...")(princ) )
Это подобно тому, как мы получаем изменяемый указатель в AutoCAD (если вы помните это из предыдущих выпусков). objExcel теперь наш вход в Excel. Если вы используете Excel 97 измените "Excel.Application.9" в "Excel.Application.8"
Сделаем это видимым.Вы конечно должны удостовериться что это работает. И должны сделать видимым для других программ.
(defun MakeXLVisible () (vla-put-Visible objExcel 1) )Создание нового листа Excel
(defun CreateNewWorksheet () (setq objWorksheet (vlax-invoke-Method (vlax-get-Property objExcel 'WorkBooks) 'Add)) )
(LoadXLTypeLib)Это загрузит вашу библиотеку типов.
(CreateXL)Это загрузит копию Excel.
(OpenExistingXL "C:\\Program Files\\Acad2000\\AutoCAD Sample.xls" "show")Это открывает существующий лист Excel. Я заполнил значениями подобно тому как показано ниже:
Line 1 Value 1 Line 2 Value 2 Line 3 Value 3 (GetXLCellValue 1 1)Когда вы выполните эту команду программа возвратит значение:
"Line 1"
Copyright © Сайт поддержки пользователей САПР by Victor Tkachenko