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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как средствами (например Delphi) вставить блок, хранящийся по внешнем файле?

Как средствами (например Delphi) вставить блок, хранящийся по внешнем файле?

Ответ
Поиск в этой теме
Непрочитано 29.09.2010, 19:51 #1
Как средствами (например Delphi) вставить блок, хранящийся по внешнем файле?
digar
 
Регистрация: 30.06.2010
Сообщений: 38

Программно из Delphi строю в ACAD карту изолиний.
Мне нужно подписать ряд точек изображения. Для этого создал блок, содержащий точку (соответствующую координатам) и два атрибута: отметка и дата.
Пытался сделать так:
Код:
[Выделить все]
MSpace.AttachExternalReference('C:\myblocks\gpoint.dwg', 'gPoint', InsertionPoint, 1, 1, 1, 0, False)
Но не получается.
ACAD знаю слабо, но интуитивно чувствую, что надо как то загрузить нужный блок в список используемых на изображении, а уж затем вставлять его в нужную позицию.

Ассы, подскажите пожалуйста. Больше не с кем посоветоваться.
Просмотров: 3534
 
Непрочитано 29.09.2010, 21:03
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от digar Посмотреть сообщение
вставить блок, хранящийся по внешнем файле?
Могу показать пример кода на .Net - если это вам поможет.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 13:11
#3
digar


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


hwd, если не сложно, покажи пример.
Я думаю, будет полезно.
digar вне форума  
 
Непрочитано 30.09.2010, 13:14
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от digar Посмотреть сообщение
hwd, если не сложно, покажи пример.
Я думаю, будет полезно.
Не сложно. Здесь, в коде смотри строки с 604 по 645.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 13:43
#5
digar


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


Посмотрел ссылку.
Усли я правильно понял, то мне необходимо к базе блоков добавить нужный а уж потом с ним работать? Но инфы по добавлению блока из внешнего файла в базу я не нашёл. Поиск по сайту "Block" дал следующие результаты:https://sites.google.com/site/bushma...pe=search-site
digar вне форума  
 
Непрочитано 30.09.2010, 14:16
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от digar Посмотреть сообщение
Но инфы по добавлению блока из внешнего файла в базу я не нашёл.
Опускаю нецензурные выражения....
Во первых - разберись, что такое определение блока, а что такое вхождение блока. Во вторых - ты чем смотрел? именно "добавление блока из внешнего файла" я тебе и показал. Там комментариев больше чем кода. Если и это непонятно, то тут уж извини....

Прежде чем хвататься за код, ты сначала разберись с предметом, а то ты "напишешь"...

На всяк. случай показываю код снова, а то мало ли, может ты не туда куда-то смотрел:
Код:
[Выделить все]
 /// <summary>
 /// Импортировать блок из внешнего чертежа
 /// </summary>
 /// <param name="dwgName">Полное имя чертежа, в котором содержится нужное определение блока</param>
 /// <param name="blockName">Имя блока</param>
 /// <param name="_override">Производить ли переопределение блока в рабочем чертеже, если в документе уже имеется блок с таким именем.</param>
 /// <returns>В случае успешного выполнения, возвращается True. В случае несоблюдения каких-либо условий - возвращается False, а
 /// в переменную 'returnMessage' помещается текст сообщения о том, какое условие не соблюдено.</returns>
 private bool ImportBlock(string dwgName, string blockName, bool _override)
 {
     using (dwg.LockDocument())
     {
         using (Database xDb = new Database(false, false))
         {
             //Получаю ссылку на базу данных чертежа, в котором содержится определение нужного мне блока
             xDb.ReadDwgFile(dwgName, FileShare.Read, true, "");
             BlockTable xBt = null;
             //Запускаю транзакцию в файле, содержащем нужное мне определение блока
             using (Transaction t = xDb.TransactionManager.StartTransaction())
             {
                 //Получаю таблицу блоков
                 xBt = t.GetObject(xDb.BlockTableId, OpenMode.ForRead, false, false) as BlockTable;
                 ///Если нужное определение блока отсутствует и в dwg-источнике - сообщаю об этом и завершаю
                 ///выполнение программы.
                 if (!xBt.Has(blockName))
                 {
                     returnMessage = (string.Format("\nФайл '{0}' не содержит в своём составе определения  для блока '{1}'",
                         dwgName, blockName));
                     return false;
                 }
             }
             //Создаю объект коллекции (необходим для дальнейшего выполнения операции копирования в базу данных др. чертежа) 
             //и добавляю в него нужное мне определение блока
             ObjectIdCollection c = new ObjectIdCollection() { (ObjectId)xBt[blockName] };
             ///IdMapping используется операцией "глубокого копирования", для отображения ObjectIds между исходными объектами и их клонами
             IdMapping idMap = new IdMapping();
             //Выполняю копирование определения блока
             db.WblockCloneObjects(c, db.BlockTableId, idMap, _override ? DuplicateRecordCloning.Replace : DuplicateRecordCloning.Ignore, false);
         }
     }
     return true;
 }
db - это экземпляр класса Database (если это не понятно).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 14:26
#7
digar


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


Ну, уж не ругайся ты так.
Виноват, не заметил
Цитата:
строки с 604 по 645
Спасибо, буду разбираться.
digar вне форума  
 
Непрочитано 30.09.2010, 14:31
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от digar Посмотреть сообщение
Виноват, не заметил
Цитата:
Цитата:
строки с 604 по 645
Будь внимательней.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 14:37
#9
digar


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


digar вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как средствами (например Delphi) вставить блок, хранящийся по внешнем файле?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Документация Проектировщику на Torrents DEM Разное 262 24.02.2024 17:19
как вставить блок в точки, заданные во внешнем файле (txt,) Marina Динамические блоки 8 06.04.2012 16:04