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

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 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 от Александр Ривилис »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Вставка блока из другого чертежа
« Ответ #4 : 18-01-2015, 17:44:56 »
т.е. вот эта строчка? - db.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);
ок. с.час попробую...
спс...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь 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
  • ***
  • Сообщений: 223
  • Карма: 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 »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

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

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

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

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

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

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 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 от Александр Ривилис »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

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

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

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

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

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