Работа с MultiviewBlock в AutoCAD Architecture

Автор Тема: Работа с MultiviewBlock в AutoCAD Architecture  (Прочитано 7490 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн JohnLenninАвтор темы

  • .Net Teapot
  • ADN OPEN
  • Сообщений: 49
  • Карма: 1
Уважаемые гуру!
Подскажите каким образом можно добавить MvBlock в ModelSpace?
Для обычных блоков Автокада мы обращаемся к block table и вроде все понятно как работает и в сети полно примеров. Но к сожалению не могу разобраться как добавить уже существующий в файле в стилях mvBlock таким образом, чтобы получить его objectID, т.к. к нему затем надо добавить propertysetdef (как это сделать я уже нашел и разобрался).
Добавить просто MvBlock в modelspace можно тупо через command line командой MVBLOCKADD но в этом случае я не смогу получить его ObjectID, а он мне нужен.

Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #1 : 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). Конечно команду придётся запускать синхронно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн JohnLenninАвтор темы

  • .Net Teapot
  • ADN OPEN
  • Сообщений: 49
  • Карма: 1
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #2 : 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на этом же форуме (кстати хороший форум!), разбираюсь пока.

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

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

« Последнее редактирование: 03-12-2014, 00:10:42 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #3 : 21-10-2013, 01:06:59 »
Я так понимаю, что у тебя этот MVBlock вставился, но куда-то ооочень далеко.
Правильно ли я понял, что теперь у тебя всё в порядке?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн JohnLenninАвтор темы

  • .Net Teapot
  • ADN OPEN
  • Сообщений: 49
  • Карма: 1
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #4 : 21-10-2013, 08:53:12 »
Да теперь все работает, спасибо большое!

Оффлайн Anton

  • One Breath
  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
  • Endless possibilities
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #5 : 29-04-2014, 20:04:25 »
Спасибо за код, все работает, только не понятно как сразу же масштабировать MVBlock чтобы он jigg'ался уже с заданным масштабом. Может кто поможет? Или подскажет, где почитать про этот jig. Я как-то совсем не понимаю как он работает.
Создается класс наследуемый от jig, затем он editor'ом drag'ается, а вот как задать scale не могу понять.
« Последнее редактирование: 29-04-2014, 22:44:53 от Anton »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #6 : 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 - нужный тебе масштаб.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Anton

  • One Breath
  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
  • Endless possibilities
Re: Работа с MultiviewBlock в AutoCAD Architecture
« Ответ #7 : 30-04-2014, 12:43:45 »
Все гениальное просто!
Спасибо Александр, за помощь!