Как добавить имя Layout к названию блока

Автор Тема: Как добавить имя Layout к названию блока  (Прочитано 13396 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!
Пытаюсь решить вопрос - как добавить имя Layout к названию блока(MainTitle), чтобы избежать повторного определения блока и создать блок с другими размерами тем же кодом. Сейчас при вставке нового блока с другими размерами он автоматом приводится к первой вставке т.к. имена одинаковые.

Код - C# [Выбрать]
  1.  if (!acBlkTbl.Has("MainTitle"))
  2.                     {
  3.                          BlockTableRecord acBlkTblRec = new BlockTableRecord();
  4.                          acBlkTblRec.Name = "MainTitle";
  5.  
  6.                          // Set the insertion point for the block
  7.                          acBlkTblRec.Origin = new Point3d(0, 0, 0);
  8.                          acBlkTbl.UpgradeOpen();
  9.                          acBlkTbl.Add(acBlkTblRec);
  10.                          acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
  11.                          //Draw frontiers of format
  12.                          this.DrawFrames(acTrans, acBlkTblRec);
  13.  
  14.                          //Draw upper title of format
  15.                          this.DrawUpperTitle(acTrans, acBlkTbl, acBlkTblRec);
  16.  
  17.                          DrawMainTitle(acTrans, acBlkTbl, acBlkTblRec);
  18.  
  19.                          blkRecId = acBlkTblRec.Id;
  20.                     }
  21.                     else
  22.                     {
  23.                          blkRecId = acBlkTbl ["MainTitle"];
  24.                     }

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
Если вам нужно имя текущего листа то: LayoutManager.Current.CurrentLayout
Но причем тут блоки я не понял.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Я программно создаю форматку по Гост и вставляю ее в чертеж в виде блока и атрибутами. В коде создается блок с именем MainTitle, но проблема в том что в чертеж вставляются форматки разных размеров(А3, Ф0 и тд), а имя которое присваивает команда одно и то же. И при повторном запуске команды независимо от выбранного формата вставляется всегда первая форматка (из-за совпадения имен). А так как я вставляю каждую формакту в свой Layout, то можно решить проблему совпадения имен за счет добавления к имени MainTitle имени текущего layout при программном создании блока.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
Раз вы знаете на какой layout вставляете блок, то имя layout'a и подавно знаете. Тогда в чем вопрос, становится еще более непонятно.
А вообще все стандартные штампы и форматки реализованы бесчисленное количество раз и создание еще одного велосипеда выглядит как-то... не очень. Тем более что листы ка правило вставляются из шаблона с уже оформленными форматками - что тут вообще можно запрограммировать? Я, например, сделал в меню кнопки для вставки каждого стандартного листа из шаблона в текущий файл.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Раз вы знаете на какой layout вставляете блок, то имя layout'a и подавно знаете.

Конечно знаю, но проблема в другом-как его достать при запуске команды и записать в имя блока форматки при программном создании блока. На запись типа 
acBlkTblRec.Name = "MainTitle"+имя Layout; visual studio ругается.
Про велосипед - мне такая задача поставлена на работе, все генерировать программно. У меня уже класс под 1070 строк с описанием геометрии линий. Вот такие дела.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
"смешались в кочу кони, люди..."
Найдите код где вы создаете вставку BlockReference блока и записывайте в layout. Там ЕСТЬ и лист и его имя и его таблица блоков (Paper Space). И создавайте свой блок целиком там же вместе с BlockTableRecord.
Либо давайте цифровой индекс блоку при каждой коллизии имен.
Либо передайте в процедуру верхнего уровня размер/имя формата, чтоб использовать его и для имени блока тоже.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
ибо передайте в процедуру верхнего уровня размер/имя формата,
Как передать? Все методы для рисования у меня void, они только рисуют геометрию. Есть один единственный метод, принимающий ввод от пользователя и возвращающий структуру.
любая ссылка на него в любом методе, кроме одного приводит его повторному вызову.
 
PS  Я только осваиваю программирование, могу делать глупости, но не со зла.

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
На запись типа
acBlkTblRec.Name = "MainTitle"+имя Layout; visual studio ругается.
Как ругается?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Как ругается?
пишет, что конкатенация недопустима

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Про велосипед - мне такая задача поставлена на работе, все генерировать программно.

Значит вы не сумели объяснить постановщикам задачи, что они предлагают вам изобретать велосипед. Вы потратите на это очень много времени, но в результате все ваши усилия окажутся напрасными. Менять программу для того, чтобы изменить одну букву/слово/линию - это верх непрофессионализма.
Это всё за 35 лет программирования под AutoCAD было продумано и неоднократно реализовано. И ничего лучше заготовок блоков с штампами не придумали и уже никогда не придумают.
Пригласите их сюда на форум - пусть объяснят в чем смысл кодировать каждый текст / линию в программе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
пишет, что конкатенация недопустима
Шо-шо??? Покажите точный код и точное сообщение об ошибке.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Запусти компиляцию. Ошибку в Output в этом месте выводит?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 828
  • Карма: 168
    • Мои плагины к Автокаду
Что-то у меня возникло ужасное подозрение, что вы подсовываете код компилятору C++. В С# нет никаких проблем с конкатенацией строк.
А по теме ваших блоков - у них в имени должен быть формат листа, а не название листа. Иначе вы наплодите идентичных блоков с разными именами. Формат листа я думаю вы уже получили т.к. блоки под размер листа уже как-то адаптировали. Переписывайте код без void и c нормальными параметрами методов. А то и классами.