Вставка блока из другого чертежа

Автор Тема: Вставка блока из другого чертежа  (Прочитано 11620 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Начал я разбираться с C#, вроде все понятно. Но не могу вставить блок из другого чертежа (в чертеже 1 блок = чертеж).
Взял я на этом форму код ув. Дианки (http://adn-cis.org/forum/index.php?topic=1715.msg6401#quickreply).
Я так понял в нем блок вставляется через форму. Мне же нужна прямая вставка.
Код - C# [Выбрать]
  1. using System;
  2. using System.IO;
  3. using System.Resources;
  4. using Exception = System.Exception;
  5. #if AUTOCAD
  6. using DbS = Autodesk.AutoCAD.DatabaseServices;
  7. using EdI = Autodesk.AutoCAD.EditorInput;
  8. using Rt = Autodesk.AutoCAD.Runtime;
  9. #endif
  10.  
  11. namespace AGThsDrw
  12. {
  13.     public sealed class AcInsBlock
  14.     {
  15.         [Rt.CommandMethod("AGInsBlock", "AGInsBlock", Rt.CommandFlags.Modal)]
  16.         public void InsBlockRef()
  17.         {
  18.             // Активный документ в редакторе AutoCAD
  19.             var doc = Application.DocumentManager.MdiActiveDocument;
  20.             // База данных чертежа (в данном случае - активного документа)
  21.             var db = doc.Database;
  22.             // Редактор базы данных чертежа
  23.             EdI.Editor ed = doc.Editor;
  24.  
  25.             using (DbS.Transaction tr = db.TransactionManager.StartTransaction())
  26.             {
  27.                 var model = tr.GetObject(DbS.SymbolUtilityServices.GetBlockModelSpaceId(db), DbS.OpenMode.ForWrite) as DbS.BlockTableRecord;
  28.  
  29.             // Получаем точку вставки блока в чертеж
  30.                 [бла бла бла] - get ptStart...
  31.             // -------------------------------------------
  32.             // Путь к файлу из кот. вставляем блок
  33.            string BlockPath;
  34.            BlockPath = "...\\КШ.dwg";
  35.             // Вставка блока
  36.             var BlkId;
  37.             BlkId = db.Insert (BlockPath, db1, false);
  38.            // Переменная блока
  39.            DbS.BlockReference bref;
  40.            bref = new DbS.BlockReference(ptStart, BlkId);
  41.            // Дефолт
  42.            bref.SetDatabaseDefaults();
  43.            // Добавляем объект в модель
  44.            model.AppendEntity(bref);
  45.            // Добавляем объект в трансакцию
  46.            tr.AddNewlyCreatedDBObject(bref, true);
  47.            // Взрываем блок, и удаляем клона
  48.            bref.ExplodeToOwnerSpace();
  49.            bref.Erase();
  50.             // Закрываем трансакцию
  51.            tr.Commit();
  52.             }
  53.         }
  54.     }
  55. }
  56.  

Проблема тут - BlkId = db.Insert (BlockPath, db1, false);. В () поз.2 - это база данных чертежа из кот. вставляется блок?
Строчка в коде Дианы Database db1 = new Database(false, false); - создает новую базу данных?
Можете пояснить?
Спасибо...
« Последнее редактирование: 18-01-2015, 12:58:51 от Александр Ривилис »
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #1 : 18-01-2015, 17:18:42 »
В () поз.2 - это база данных чертежа из кот. вставляется блок?
Да.
Строчка в коде Дианы Database db1 = new Database(false, false); - создает новую базу данных?
Да.
Можете пояснить?
Да. Что именно нужно пояснить?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #2 : 18-01-2015, 17:35:13 »
Можете пояснить?
Да. Что именно нужно пояснить?
Как правильно вставить блок из чертежа... Я создаю новую базу данных(Database db1 = new Database(false, false); ), но она же не база данных чертежа, из которого вставляется блок, как осуществляется привязка к донору?
Может после ( BlkId = db.Insert (BlockPath, db1, false);) переменная db1 будет уже базой данный чертежа-донора?
 Или мой код должен работать? Или просто нужен пример куска когда...
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #3 : 18-01-2015, 17:38:11 »
но она же не база данных чертежа, из которого вставляется блок, как осуществляется привязка?
А. Вот ты о чем. "Привязка" осуществляется при помощи метода db1.ReadDwgFile. В качестве примера: http://adn-cis.org/forum/index.php?topic=1715.msg6387#msg6387
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #4 : 18-01-2015, 17:44:56 »
т.е. вот эта строчка? - db.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);
ок. с.час попробую...
спс...
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #5 : 18-01-2015, 17:46:50 »
т.е. вот эта строчка? - db.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);
Именно. Только в твоём случае это не db, а db1.
BlockPath - это путь к dwg-файлу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #6 : 18-01-2015, 17:51:37 »
т.е. вот эта строчка? - db.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);
Именно. Только в твоём случае это не db, а db1.
BlockPath - это путь к dwg-файлу.
Спасибо, да, это понятно... Но...
Отладка прошла нормально, но появляется ошибка, я описывал ее для VB.NET...
db1.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null); -  на этой строчке возникает ошибка...
« Последнее редактирование: 18-01-2015, 18:19:31 от Agens »
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #7 : 18-01-2015, 18:11:49 »
1) Ты бы еще меньшую картинку сделал, чтобы совсем нельзя было прочитать что там написано. ;)
2) Там в этом окошке есть флажок "остановить при возникновении исключения этого типа". Убери этот флажок.
3) И вообще приведи полный текст программы, а не какие-то её куски. Желательно zip-архив проекта.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #8 : 18-01-2015, 18:19:08 »
1) Ты бы еще меньшую картинку сделал, чтобы совсем нельзя было прочитать что там написано. ;)
Подправил, вот ссылка на тему http://adn-cis.org/forum/index.php?topic=1733.0
2) Там в этом окошке есть флажок "остановить при возникновении исключения этого типа". Убери этот флажок.
Спс...
3) И вообще приведи полный текст программы, а не какие-то её куски. Желательно zip-архив проекта.
С.час сделаю...
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Вставка блока из другого чертежа
« Ответ #9 : 18-01-2015, 18:44:15 »
не могу вставить блок из другого чертежа (в чертеже 1 блок = чертеж).
Взял я на этом форму код ув. Дианки
Более доверительный источник.

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #10 : 18-01-2015, 18:48:13 »
Более доверительный источник.
Это не совсем оно. При помощи этого кода копируются описания блоков из другого чертежа, в текущий. Можно конечно попробовать так и с ModelSpace, но IMHO это не лучший вариант.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #11 : 18-01-2015, 19:15:03 »
Вот, собственно предмет разборок.
Код - C# [Выбрать]
  1. // Получаем таблицу блоко
  2. DbS.BlockTable bt = (DbS.BlockTable)tr.GetObject(doc.Database.BlockTableId, DbS.OpenMode.ForRead, true);
  3.  // Получаем таблицу записай
  4. DbS.BlockTableRecord ps = tr.GetObject(db1.CurrentSpaceId, DbS.OpenMode.ForWrite) as DbS.BlockTableRecord;
Есть еще предположение. что проблема в ломанном софте, работающем под автокадом... Но это проблема уже другой темы.
« Последнее редактирование: 18-01-2015, 19:20:07 от Александр Ривилис »
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #12 : 18-01-2015, 19:17:36 »
А вот то, что ты написал на этом форуме не обсуждается вообще. Читай правила!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #13 : 18-01-2015, 19:19:24 »
Я ж так и напсал
Цитировать
Но это проблема уже другой темы.
просто нужно знать, ошибка кода или нет...
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #14 : 18-01-2015, 19:22:05 »
Кстати, не [code=C#], а [code=csharp]
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #15 : 18-01-2015, 20:03:22 »
Рабочий код (хотя проверок на ошибки явно не хватает):

Код - C# [Выбрать]
  1. using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using AGThsDrw;
  5. using System;
  6. using System.IO;
  7. using System.Resources;
  8. using Exception = System.Exception;
  9. #if AUTOCAD
  10. using DbS = Autodesk.AutoCAD.DatabaseServices;
  11. using EdI = Autodesk.AutoCAD.EditorInput;
  12. using Rt = Autodesk.AutoCAD.Runtime;
  13. #endif
  14.  
  15. namespace AGThsDrw
  16. {
  17.   public class AcInsBlock
  18.   {
  19.     [Rt.CommandMethod("AGInsBlock", "AGInsBlock", Rt.CommandFlags.Modal)]
  20.     public void InsBlockRef()
  21.     {
  22.       // Активный документ в редакторе AutoCAD
  23.       var doc = Application.DocumentManager.MdiActiveDocument;
  24.       // База данных чертежа (в данном случае - активного документа)
  25.       var db = doc.Database;
  26.       // Редактор базы данных чертежа
  27.       EdI.Editor ed = doc.Editor;
  28.       EdI.PromptPointOptions pPtOpts;
  29.       pPtOpts = new EdI.PromptPointOptions("\nУкажите точку вставки блока: ");
  30.       // Выбор точки пользователем
  31.       var pPtRes = doc.Editor.GetPoint(pPtOpts);
  32.       if (pPtRes.Status != EdI.PromptStatus.OK)
  33.         return;
  34.       var ptStart = pPtRes.Value;
  35.  
  36.       // Запускаем транзакцию
  37.       using (DbS.Transaction tr = db.TransactionManager.StartTransaction())
  38.       {
  39.         DbS.BlockTable bt = tr.GetObject(db.BlockTableId, DbS.OpenMode.ForRead) as DbS.BlockTable;
  40.         DbS.BlockTableRecord model =
  41.           tr.GetObject(bt[DbS.BlockTableRecord.ModelSpace], DbS.OpenMode.ForWrite) as DbS.BlockTableRecord;
  42.         // Путь к файлу чертежа
  43.         string BlockPath;
  44.         // BlockPath = "H:\\ACAD+\\blocks\\схемы\\КШ.dwg";
  45.         BlockPath = "C:\\test.dwg";
  46.  
  47.         // Создаем новую базу
  48.         using (DbS.Database db1 = new DbS.Database(false, false))
  49.         {
  50.           // Получаем базу чертежа-донора
  51.           db1.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);
  52.           // Получаем ID нового блока
  53.           DbS.ObjectId BlkId = db.Insert(BlockPath, db1, false);
  54.           DbS.BlockReference bref = new DbS.BlockReference(ptStart, BlkId);
  55.           // Дефолтные свойства блока (слой, цвет и пр.)
  56.           bref.SetDatabaseDefaults();
  57.           // Добавляем блок в модель
  58.           model.AppendEntity(bref);
  59.           // Добавляем блок в транзакцию
  60.           tr.AddNewlyCreatedDBObject(bref, true);
  61.           // Расчленяем блок
  62.           //bref.ExplodeToOwnerSpace();
  63.           //bref.Erase();
  64.           // Закрываем транзакцию
  65.           tr.Commit();
  66.         }
  67.       }
  68.     }
  69.   }
  70. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #16 : 18-01-2015, 20:34:32 »
Не хочет на строчке (db1.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);)
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #17 : 18-01-2015, 20:39:31 »
Путь к файлу правильный? Он вообще существует? Права для работы с ним есть?
Файл в AutoCAD открывается?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #18 : 18-01-2015, 20:42:45 »
Да. Файл я создал. Правда не проверил, там может быть просто линия или блок?
На блок и на простую линию выскакивает ошибка... :(
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #19 : 18-01-2015, 20:50:40 »
Выкладывай dwg-файл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #20 : 18-01-2015, 20:52:03 »
Не нужно выкладывать файл.
СТРАННО.
При отладке вылетает ошибка!!!
А если просто "подцепить" к автокаду all - блок вставляется...
Помогите!!! Я ж только решил написать пару "фиговин" на С#, а уже такой "затык" с отладкой :(
---
для работы dll - путь к файлу "С/test.dwg", команда "AGInsBlock"
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #21 : 18-01-2015, 21:07:26 »
А теперь всё, что ты написал выше, но только по-русски. Я ничего не понял.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #22 : 18-01-2015, 21:10:16 »
если "AGThsDrw.dll" загрузить в автокад через "netload" и выполнить команду "AGInsBlock", блок из test.dwg вставится.
а вот отладка проекта происходит с ошибкой.
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #23 : 18-01-2015, 21:13:06 »
а вот отладка проекта происходит с ошибкой.
Тут возможны десятки разных причин. В чем причина у тебя - не знаю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #24 : 18-01-2015, 21:13:44 »
отличная перспектива :)
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #25 : 18-01-2015, 21:18:51 »
отличная перспектива :)
1) Убедись что у тебя установлены все обновления на VS 2013
2) Убедись, что ты отлаживаешь под чистым AutoCAD (без всяких левых приложений).
3) Установи режим для отладчика Use Managed Compatibility Mode
4) Почитай: http://adn-cis.org/forum/index.php?topic=1019.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #26 : 18-01-2015, 23:00:43 »
Попробую установить еще один автокад на диск Д.  :o
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #27 : 19-01-2015, 10:13:08 »
Странно, на D еще один автокад не хочет устанавливаться.
Написал код вставки блока на VB.net - та же картина...
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Вставка блока из другого чертежа
« Ответ #28 : 19-01-2015, 14:19:10 »
Странно, на D еще один автокад не хочет устанавливаться.
Если версия AutoCAD та же самая, что уже установлена, то ничего странного.

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #29 : 19-01-2015, 14:40:55 »
Попробую решить свою проблему, поставив VirtualBox.
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 162
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Вставка блока из другого чертежа
« Ответ #30 : 19-01-2015, 14:49:37 »
Попробую решить свою проблему, поставив VirtualBox.
Отделять мух от котлет - вообще правильное решение (имхо).

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #31 : 19-01-2015, 15:27:52 »
Попробую решить свою проблему, поставив VirtualBox.
Если на существующие проблемы не наложатся проблемы совместимости с AutoCAD и Visual Studio.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #32 : 19-01-2015, 16:06:09 »
Можно еще студию 2012 поставить, но нужно работать в облаке, поэтому и выбрали версию 2013 года.
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

  • ADN OPEN
  • **
  • Сообщений: 92
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #33 : 21-01-2015, 15:33:46 »
На виртуальной машине все работает, я рад :)
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 28
  • Skype: evthisrel
Re: Вставка блока из другого чертежа
« Ответ #34 : 06-10-2016, 18:58:08 »
Более доверительный источник.
Это не совсем оно. При помощи этого кода копируются описания блоков из другого чертежа, в текущий. Можно конечно попробовать так и с ModelSpace, но IMHO это не лучший вариант.
Александр Ривилис, а почему не лучший? Можно поподробнее?

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

  • Administrator
  • *****
  • Сообщений: 9698
  • Карма: 1241
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого чертежа
« Ответ #35 : 06-10-2016, 19:12:35 »
Александр Ривилис, а почему не лучший? Можно поподробнее?
Нужно поэкспериментировать что получится. По логике в пространство модели базы-приёмника докопируются примитивы пространства модели базы-источника. Это вроде не то, что хотел получить автор.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн dmitrymaslakov

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
Re: Вставка блока из другого чертежа
« Ответ #36 : 29-05-2019, 06:45:50 »
в чертеже 1 блок = чертеж
А если в чертеже куча блоков, как вставку выполнить? Одна из перегрузки метода Database.Insert() первым параметром просит blockName. Когда я вставляю имя вставки блока (например, "Светильник потолочный светодиодный"), то происходит исключение eSelfReference

Наверное, мне сюда.
Более доверительный источник.
Если нет, то help.
« Последнее редактирование: 29-05-2019, 08:35:09 от dmitrymaslakov »

Оффлайн Привалов Дмитрий

  • ADN Club
  • ****
  • Сообщений: 290
  • Карма: 45
Re: Вставка блока из другого чертежа
« Ответ #37 : 29-05-2019, 08:42:19 »
А если в чертеже куча блоков, как вставку выполнить?
Смотря что ты имеешь ввиду под вставкой кучи блоков.

используй WblockCloneObjects для подгрузки блоков(BlockTableRecord) в чертеж
 на этом форуме много примеров

Для вхождения блоков (BlockReference) возможны варианты.
Можешь склонировать один или все из исходного чертежа с помощью WblockCloneObjects, а потом модифицировать
Создавать для каждого нужного BlockTableRecord  BlockReference и вставлять.

Оффлайн dmitrymaslakov

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
Re: Вставка блока из другого чертежа
« Ответ #38 : 29-05-2019, 09:20:28 »
В моём файле (source) есть несколько BlockReference одного динамического блока(BlockTableRecord). Эти вхождения я хотел бы копировать и вставлять без открытия файла source. Поиграю с WblockCloneObjects

Оффлайн Привалов Дмитрий

  • ADN Club
  • ****
  • Сообщений: 290
  • Карма: 45
Re: Вставка блока из другого чертежа
« Ответ #39 : 29-05-2019, 09:40:42 »
В моём файле (source) есть несколько BlockReference одного динамического блока(BlockTableRecord). Эти вхождения я хотел бы копировать и вставлять без открытия файла source. Поиграю с WblockCloneObjects
У тебя возникнет множество нюансов, но на форуме все есть для решения.
Тут важен сценарий вставки:
1. Где лежат блоки, предполагаю что в ModelSpace
1. Если вставляешь по одному BlockTableRecord, то придется определить какой BlockTableRecord  тебе нужен в данный момент из ModelSpace.  Определить его видимость, атрибуты или динамические свойства. Но можешь использовать имена анонимных блоков типа *U31 для поиска нужного.
2. Склонировать BlockTableRecord с помощью WblockCloneObjects в нужное пространство. Скорее всего в текущее пространство.
3. Изменить координаты, если надо.

С помощью TransformBy() без пользователя

через указание точки вставки пользователем PromptPointResult

или более сложно, через Jig
https://through-the-interface.typepad.com/through_the_interface/2009/03/jigging-an-autocad-block-with-attributes-using-net.html

Оффлайн dmitrymaslakov

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
Re: Вставка блока из другого чертежа
« Ответ #40 : 29-05-2019, 09:46:18 »
Спасибо, Дмитрий. Буду изучать.