Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: JohnLennin от 20-10-2013, 10:48:35

Название: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: JohnLennin от 20-10-2013, 10:48:35
Уважаемые гуру!
Подскажите каким образом можно добавить MvBlock в ModelSpace?
Для обычных блоков Автокада мы обращаемся к block table и вроде все понятно как работает и в сети полно примеров. Но к сожалению не могу разобраться как добавить уже существующий в файле в стилях mvBlock таким образом, чтобы получить его objectID, т.к. к нему затем надо добавить propertysetdef (как это сделать я уже нашел и разобрался).
Добавить просто MvBlock в modelspace можно тупо через command line командой MVBLOCKADD но в этом случае я не смогу получить его ObjectID, а он мне нужен.

Спасибо!
Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: Александр Ривилис от 20-10-2013, 15:02:54
1. Что-то мне подсказывает, что ты попутал MultiViewBlockDefinition (который является определением мультивидового блока) и MultiViewBlockReference (вставка мультивидового блока).
Все MultiViewBlockDefinition можно получить из Autodesk.Aec.DatabaseServices.DictionaryMultiViewBlockDefinition(Database)
И вообще посмотри этот пример: http://forums.autodesk.com/autodesk/attachments/autodesk/54/12668/1/MvJig.txt
2. По поводу командной строки - ты можешь получить ObjectID вставленного элемента. Это будет последний элемент в текущем пространстве (ModelSpace или PaperSpace). Конечно команду придётся запускать синхронно.
Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: JohnLennin от 20-10-2013, 22:31:37
Александр, огромное спасибо за ссылку на пример, пытаюсь разобраться и почему-то не получается добавить multiviewblockreference в model space. Скомпилировал пример запустил его, до ввода точки блок таскаетя за курсором и даже поворачивается при изменении угла rotation, но почему-то после указания или ввода координат точки исчезает и не добавляется в пространство модели.
Не совсем понимаю механизм вот этой транзакции:
Код - Visual Basic [Выбрать]
  1.                        Using Trans As AcadDbServices.Transaction = Db.TransactionManager.StartTransaction
  2.                             EntityToDrag.Location = CurrentCursorPosition
  3.                             Dim Bt As AcadDbServices.BlockTable = Trans.GetObject(Db.BlockTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead, False)
  4.                             Dim Btr As AcadDbServices.BlockTableRecord = Trans.GetObject(Bt(AcadDbServices.BlockTableRecord.ModelSpace), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, False)
  5.                             Btr.AppendEntity(EntityToDrag)
  6.                             Trans.AddNewlyCreatedDBObject(EntityToDrag, True)
  7.                             Trans.Commit()
  8.                         End Using
  9.  
  10.  

Кстати на форуме тоже самое, там почему-то блок не добавляется в model space


upd:

Нашел еще одну ссылку http://forums.autodesk.com/t5/AutoCAD-Architecture/MVBlock-and-jig/m-p/2000890#M12655 (http://forums.autodesk.com/t5/AutoCAD-Architecture/MVBlock-and-jig/m-p/2000890#M12655)на этом же форуме (кстати хороший форум!), разбираюсь пока.

upd:
Код по второй ссылке работает, если внести соответсвующие исправления связанные с глюком в 2006 версии, который исправили в 2007, смысл транзакции теперь стал понятен.

Спасибо Александр, за наводку!

Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: Александр Ривилис от 21-10-2013, 01:06:59
Я так понимаю, что у тебя этот MVBlock вставился, но куда-то ооочень далеко.
Правильно ли я понял, что теперь у тебя всё в порядке?
Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: JohnLennin от 21-10-2013, 08:53:12
Да теперь все работает, спасибо большое!
Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: Anton от 29-04-2014, 20:04:25
Спасибо за код, все работает, только не понятно как сразу же масштабировать MVBlock чтобы он jigg'ался уже с заданным масштабом. Может кто поможет? Или подскажет, где почитать про этот jig. Я как-то совсем не понимаю как он работает.
Создается класс наследуемый от jig, затем он editor'ом drag'ается, а вот как задать scale не могу понять.
Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: Александр Ривилис от 30-04-2014, 01:09:11
Смотри код по ссылке: http://forums.autodesk.com/autodesk/attachments/autodesk/54/12653/1/Class1.cs.txt
После строки:
Код - C# [Выбрать]
  1. mvb.BlockDefId = bstyleID;
необходимо добавить строку:
Код - C# [Выбрать]
  1. mvb.Scale = scale;
где scale - нужный тебе масштаб.
Название: Re: Работа с MultiviewBlock в AutoCAD Architecture
Отправлено: Anton от 30-04-2014, 12:43:45
Все гениальное просто!
Спасибо Александр, за помощь!