Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить свойства отдельно взятого объекта в VBA?

Как изменить свойства отдельно взятого объекта в VBA?

Ответ
Поиск в этой теме
Непрочитано 27.07.2011, 10:24 #1
Как изменить свойства отдельно взятого объекта в VBA?
penb
 
Регистрация: 24.07.2011
Сообщений: 13

Допустим, мне в чертеже надо изменить длину конкретной линии исключительно программным способом - как это сделать?
Просмотров: 5581
 
Непрочитано 27.07.2011, 10:35
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну допустим длинну как таковую не изменить т.к. длинна характеристика вычисляемая, но изменить координату начальной или конечной точки разумеется можно - надо изменить свойства StartPoint и/или EndPoint.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.07.2011, 10:37
#3
penb


 
Регистрация: 24.07.2011
Сообщений: 13


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Ну допустим длинну как таковую не изменить т.к. длинна характеристика вычисляемая, но изменить координату начальной или конечной точки разумеется можно - надо изменить свойства StartPoint и/или EndPoint.
Да, это верно. Если быть точнее, я хотел спросит, как получить доступ к этому конкретному объекту не по клику мышки, а по его имени? Как узнать это имя?
penb вне форума  
 
Непрочитано 27.07.2011, 10:51
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Что значит "это имя" - у Вас есть объект модели (листа, блока) в нем есть последовательность ссылок на объекты - какой из них "этот" и как его получить знать можете только Вы - можно "попросить" указать мышкой, можно "отсортировать" по определенным признакам (слой, цвет, длинна, координаты и пр.) А можно просто взять первый из последовательности - что Вам нужно-то?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.07.2011, 11:07
#5
penb


 
Регистрация: 24.07.2011
Сообщений: 13


На сколько я представляю, у каждого объекта есть свой уникальный идентификатор. Как я прочтиал, для текущего сеанса это свойство ObjectId, для любого момента времени это свойство Handle. Отсюда я делаю вывод, что зная ObjectID или Handle данной линии, я могу обратиться свойствам именно этой линии. Получается очень странно, что я обращаюсь к объекту по отфильтровывая его по совокупности неуникальных признаков (типа длины и цвета), а не обращаюсь к нему по его уникальному имени. Конечно, может acad просто так реализован - тут уж ничего не поделаешь, но это очень необычно.
penb вне форума  
 
Непрочитано 27.07.2011, 11:13
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Разумеется есть, только чтоб его получить - надо обратиться к объекту (который надо как-то выбрать) - зачем он Вам? Вы можете просто сохранить ссылку на конкретный объект, т.к. если Вы "сохраните" только ObjectID Вам, чтоб его (сам объект) найти, придется опять-таки фильровать все объекты по "уникальному" признаку.
з.ы. я если честно совсем не улавливаю ход Ваших мыслей.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.07.2011, 11:18
#7
penb


 
Регистрация: 24.07.2011
Сообщений: 13


Дмитрий, поясните, что такое "сохранить сслыку на конкретный объект"?
penb вне форума  
 
Непрочитано 27.07.2011, 11:24
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Вот Вам пример из справки Автокада:
Код:
[Выделить все]
Sub Example_Diameter()
    ' This example creates a Circle object in model space and
    ' returns the diameter of the new Circle
    
    Dim circleObj As AcadCircle
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    
    ' Define the new Circle object
    centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0
    radius = 5#
    
    ' Create the Circle object in model space
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)

    ThisDrawing.Application.ZoomAll
    
    MsgBox "The diameter of the new Circle is: " & circleObj.Diameter
End Sub
circleObj - это ссылка на "свежесозданный" круг - меняйте у него все что хотите.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.07.2011, 12:30
#9
penb


 
Регистрация: 24.07.2011
Сообщений: 13


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вот Вам пример из справки Автокада:
circleObj - это ссылка на "свежесозданный" круг - меняйте у него все что хотите.
Понял. Но я имел в виду немного другое.
Даю обобщённый пример: человек открыват определённый готовый dwg, у него там какой-то чертёж, а сам он в акаде еле шарит. Ему надо издать скажем ещё 50 аналогичных документов, которые буду отличаться 5-6 геометрическими характеристиками какой-то детали. Чтобы не двигать всё руками, предполагается написать приложение VBA, которое по заданным значениям переменных характеристик перестраивало бы чертёж. Грубо говоря из прямоугольника со сторонами 2 и 3 сделать прямоуголник со сторонами 5 и 6, написавав в диалоге "5" и "6". Очевидно, что есть два пути:
- пишем процедуру, которая строит чертёж с нуля по заданным параметрам;
- берём готовый шаблонный чертёж и меняем характеристики нужных объектов;

Второе имха более рационально, вот я и пытаюсь узнать, как средствами VBA получить доступ к конкретным уже существующим объектам. Типа "хочу удлиннить эту линию!" Пишу что-то типа: линия.имя_линии.конец = (100,500)
penb вне форума  
 
Непрочитано 27.07.2011, 13:21
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Я бы сделал (да и не раз уже делал) так - берется шаблон (блоки?)- а всё изменяемое пересоздается программно - т.к. создать по параметрам в абсолютном большинстве случаев проще чем "подправить" (т.к. надо учитывать, что там уже направлено).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.07.2011, 13:34
#11
Сергей Богатов


 
Регистрация: 21.02.2009
Сообщений: 825


попробуй динамический блок. может быть для твоих целей будет достаточно
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Непрочитано 01.08.2011, 12:24
#12
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589


2 penb
Если я вас правильно понял, то вам нужно искать в справке информацию по методам: HandleToObject и ObjectIDToObject
Там очень понятные и подробные примеры на нужную вам тему.

ЗЫ.
Хотя я бы порекомендовал обратиться к Динамическим блокам. Они созданы специально для решения подобных вашей задач без всякого программирования.

Последний раз редактировалось Boxa, 01.08.2011 в 12:27. Причина: Для ЗЫ
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как изменить свойства отдельно взятого объекта в VBA?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли изменить границы допустимого места размещения объекта кап. строительства? endimion Архитектура 16 08.08.2011 21:44
Слои в автокаде. при добавлении нового слоя не могу изменить имя и свойства слоя oleole AutoCAD 6 02.11.2010 23:28
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка Alexey_02 Программирование 3 06.03.2009 22:33
Свойства объекта STe1S AutoCAD 6 24.03.2006 10:38