Работа с текстовыми стилями

Автор Тема: Работа с текстовыми стилями  (Прочитано 16510 раз)

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

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

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Вопрос новичка
Дано: пишу на с# dll-ку для AutoCad. Создал несколько текстовых стилей.

Проблема: как сделать один из стилей активным или как при добавлении текста указать какой стиль использовать?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с текстовыми стилями
« Ответ #1 : 28-11-2013, 10:21:59 »
как сделать один из стилей активным
Database.Textstyle

как при добавлении текста указать какой стиль использовать?
Аналогичное свойство имеется у классов DBText и MText.

Обозначенная информация легко находится самостоятельно в ObjectARX SDK.

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

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Работа с текстовыми стилями
« Ответ #2 : 28-11-2013, 22:20:16 »
извините за столь простой вопрос...

не могу присвоить тексту текстовый стиль.

Код - C# [Выбрать]
  1. public static void text(string text, double x, double y, double h)
  2.     {
  3.         Document acDoc = Application.DocumentManager.MdiActiveDocument;        
  4.         Database acCurDb = acDoc.Database;        
  5.        
  6.         using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  7.         {            
  8.             BlockTable acBlkTbl;
  9.             acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  10.                                          OpenMode.ForRead) as BlockTable;    
  11.            
  12.             BlockTableRecord acBlkTblRec;
  13.             acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  14.                                             OpenMode.ForWrite) as BlockTableRecord;            
  15.  
  16.             DBText acText = new DBText();
  17.             acText.SetDatabaseDefaults();
  18.  
  19.             acText.Position = new Point3d(x, y, 0);
  20.             acText.Height = h;          
  21.             acText.TextString = text;    
  22.            
  23.             /*
  24.            здесь полагаю нужно указать стиль как-то через TextStyle,
  25.            но как я не представляю
  26.            */
  27.  
  28.  
  29.             acBlkTblRec.AppendEntity(acText);
  30.             acTrans.AddNewlyCreatedDBObject(acText, true);    
  31.            
  32.             acTrans.Commit();
  33.         }        
  34.     }

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с текстовыми стилями
« Ответ #3 : 28-11-2013, 22:25:35 »
Цитировать
здесь полагаю нужно указать стиль как-то через TextStyle, но как я не представляю
Сначала получи идентификатор (ObjectId) нужного тебе текстового стиля. Затем присвой значение этого идентификатора свойству acText.Textstyle.

RTFM

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с текстовыми стилями
« Ответ #4 : 28-11-2013, 23:54:43 »
извините за столь простой вопрос...
Всё нормально. И добро пожаловать на форум!   :)
Андрей всё правильно написал. Когда программно (?) создали текстовый стиль, то у него появился ObjectId. Вот этот ObjectId и следует присвоить свойству acText.TextStyleId
Если же ObjectId текстового стиля неизвестен и известно только его имя, то его ObjectId придётся найти. Например, текущий можно найти так:
Код - C# [Выбрать]
  1. ObjectId textStyleId = Application.DocumentManager.MdiActiveDocument.Database.Textstyle;
А если знаешь только имя:
Код - C# [Выбрать]
  1. String textStyleName = "Standard"; // Имя текстового стиля
  2. ObjectId textStyleId = ObjectId.Null; // ObjectId текстового стиля
  3. using (Transaction tr = db.TransactionManager.StartTransaction())
  4. {
  5.    TextStyleTable textStyleTable =
  6.       tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  7.    if (textStyleTable.Has(textStyleName))
  8.    {
  9.      textStyleId = textStyleTable[textStyleName];
  10.    }
  11.    tr.Commit();
  12. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Работа с текстовыми стилями
« Ответ #5 : 29-11-2013, 02:23:21 »
По-моему, в зависимости от версии AutoCAD присвоение текстового стиля будет немного разным. Или я ошибаюсь?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с текстовыми стилями
« Ответ #6 : 29-11-2013, 04:34:56 »
Если мне не изменяет память, то до версии 2009 включительно был метод DBText.TextStyle, а с 2010 этот метод называется TextStyleId
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с текстовыми стилями
« Ответ #7 : 29-11-2013, 08:17:22 »
Если мне не изменяет память
Память вам не изменяет - так и есть. В коде этот момент решается директивами препроцессора. :)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Работа с текстовыми стилями
« Ответ #8 : 29-11-2013, 08:53:48 »
В коде этот момент решается директивами препроцессора
Когда как. Есть разные варианты :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с текстовыми стилями
« Ответ #9 : 29-11-2013, 08:54:40 »
Когда как. Есть разные варианты
Сказал "А", говори "Б". :)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Работа с текстовыми стилями
« Ответ #10 : 29-11-2013, 09:06:48 »
Я внутри одного решения организовываю разные проекты с соответствующими настройками (под 2009 - одни, под 2013 - другие). И про директивы особо не заморачиваюсь.
P.S. Если найду время, как-нибудь сделаю описание. Только будет это нескоро :(
P.P.S. Если у тебя есть готовый вариант, показывай и его тож )))
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с текстовыми стилями
« Ответ #11 : 29-11-2013, 09:24:41 »
Я внутри одного решения организовываю разные проекты с соответствующими настройками (под 2009 - одни, под 2013 - другие). И про директивы особо не заморачиваюсь.
Минус такого решения в том, что если тебе потребуется вносить изменение в код, то проделать это придётся столько раз, сколько у тебя проектов. А главное - ещё и не забыть, чтобы изменения были внесены в полном объеме.

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

P.S. Если найду время, как-нибудь сделаю описание. Только будет это нескоро
Я в курсе, как в составе одного Solution содержать несколько решений. :) Часто сам так делаю (почти всегда), но это не копии одного и того же проекта под разные версии AutoCAD, а разные проекты, как правило, связанные между собой (например проект, предназначенный для тестирования кода основного проекта).

P.P.S. Если у тебя есть готовый вариант, показывай и его тож )))
Готовый вариант чего? Использования директив препроцессора? Так я же тебе не так давно давал ссылку на одну из тем, в которой они присутствуют. :) В комментах написано, что нужно раскомментировать строку 22, в составе которой определён символ "Acad2009", наличие которого, в свою очередь, управляет выборочной компиляцией определённых строк кода (например, см. блок кода между строк 30 и 36, а так же между строками 61 и 67, ну и т. д.).

Если мне не изменяет память, то я и у тебя на сайте где-то видел в твоём .net коде использование директив препроцессора, так что тебе они не должны быть в новинку, а автору темы, если ему этот момент станет интересен, не составит труда забить в поиковой строке браузера фразу "директивы препроцессора C#" и почитать материал по теме.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Работа с текстовыми стилями
« Ответ #12 : 29-11-2013, 09:32:56 »
Минус такого решения в том, что если тебе потребуется вносить изменение в код, то проделать это придётся столько раз, сколько у тебя проектов. А главное - ещё и не забыть, чтобы изменения были внесены в полном объеме.
Симёооон Симёооныч... Я код, зависящий от реализации, выношу в partial class (и то если это необходимо). А остальные файлы у проектов общие. Не, точно надо статейку забабахать :)
P.S. На работе выхода на blogspot нет, но, опять же - насколько помню, варианты внесения изменений в код таким манером меня не сильно прельстили.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с текстовыми стилями
« Ответ #13 : 29-11-2013, 09:47:03 »
Я код, зависящий от реализации, выношу в partial class (и то если это необходимо).
Ну и как это тебя помогает? У тебя ведь в коде имеющихся методов лишь несколько строк зависит от версии AutoCAD, причём эти строки встречаются то в одном месте то в другом, и к тому же в разных методах.

А остальные файлы у проектов общие.
Согласен, это хороший вариант. :)

Не, точно надо статейку забабахать :)
Думаю, что эта информация многим будет полезна. :)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Работа с текстовыми стилями
« Ответ #14 : 29-11-2013, 12:07:57 »
Что смог - то смог. Смотрите, гоняйте, критикуйте. Только гнилыми помидорами не закидывайте сразу :)
http://autolisp.ru/2013/11/29/dotnet-difference-autocad2/
« Последнее редактирование: 29-11-2013, 12:44:04 от Алексей Кулик »
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!