|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
23.04.2010, 12:57 | #1 | |
Получение идентификатора последнего введенного объекта
Регистрация: 23.04.2010
Сообщений: 7
|
||
Просмотров: 4396
|
|
||||
Любой объект Автокада имеет свойство Handle. Это уникальная метка - шестнадцатицеричое число, преобразованное в строку.
Получить метку - handle=Object.handle (это будет строка) Получить по метке указатель на объект - ThisDrawing.HandleToObject(handle) Sub Example_HandleToObject() ' This example creates a spline in model space, and returns the ' handle for the spline. Then the spline is returned from the handle and colored. ' Create the spline Dim splineObj As AcadSpline Dim startTan(0 To 2) As Double Dim endTan(0 To 2) As Double Dim fitPoints(0 To 8) As Double startTan(0) = 0.5: startTan(1) = 0.5: startTan(2) = 0 endTan(0) = 0.5: endTan(1) = 0.5: endTan(2) = 0 fitPoints(0) = 1: fitPoints(1) = 1: fitPoints(2) = 0 fitPoints(3) = 5: fitPoints(4) = 5: fitPoints(5) = 0 fitPoints(6) = 10: fitPoints(7) = 0: fitPoints(8) = 0 Set splineObj = ThisDrawing.ModelSpace.AddSpline(fitPoints, startTan, endTan) ZoomAll ' Find the handle of the spline Dim handle As String handle = splineObj.handle MsgBox "The handle of the Spline is: " & splineObj.handle, , "HandleToObject Example" ' Find an object from a given handle Dim tempObj As AcadObject Set tempObj = ThisDrawing.HandleToObject(handle) ' Now use the newly initialized object variable to color the object Dim color As AcadAcCmColor Set color = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.16") Call color.SetRGB(80, 100, 244) tempObj.TrueColor = color ThisDrawing.Regen True MsgBox "The Spline is now blue.", , "ObjectIDToObject Example" End Sub Цитата:
Цитата:
LISP Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 23.04.2010
Сообщений: 7
|
Спасибо, VVA, за приведенный пример.
Обязательно его попробую. А пока приведу еще один вариант решения данной проблемы средствами делфи, не используя лисп: Код:
Возможно, кому-то пригодится P.S.: Значения системных переменных так получить и не получается. Не знаю в чем дело. Где-то на одном из форумов видел, что перед получением значения переменной надо блокировать документ. Это правда? И как это сделать? Последний раз редактировалось dxaritonov, 23.04.2010 в 15:13. |
|||
|
||||
В примере из #1 tmp - это не автокадовская переменная, а просто переменная лиспа. Список и значение всех автокадовских переменных можно получить командой _setvar далее ? и *. Только к ним можно применять GetVariable. По поводу передачи данных LISP<->VBA почитай LISP & VBA. Передача данных. Тормознуть можно лиспом. Выделил в #2 красным
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 23.04.2010
Сообщений: 7
|
Список всех системных автокадовских переменных есть (в хелпе нашел), в делфе когда вызываю
Код:
Да и возвращает тип Variant (у меня получалось вернуть лишь unassigned). В общем, пока что застрял на этом. P.S.: Использовал тот код, что ты мне привел во 2 посте, та же ошибка "Вызов был отклонен". |
|||
|
||||
1. Команда _LINE может создать не один, а несколько отрезков. Так что ID будет несколько.
2. Можно создать свои реакторы (реакция на события) на завершение команды, на добавления объекта в базу AutoCAD, так что можно обойтись без пустого цикла. |
||||
|
||||
Цитата:
А вот с этим нужно бороться проверкой состояния AutoCAD перед тем как к нему обращаться. Для этого есть метод: Application.GetAcadState. Если результат вызова IsQuiescent, то можно к нему обратиться, в противном случае он занят. |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получение разрешения на строительство объекта капитального строительства | maxummm | Прочее. Архитектура и строительство | 18 | 25.08.2010 20:31 |
Получение objectid объекта-текста и подставление его в формулу | ilya_sp | Программирование | 7 | 11.02.2010 14:43 |