Сообщество программистов Autodesk в СНГ
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Не получили
письмо с кодом активации
?
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Звонок в техподдержку Autodesk Forge
Начало
Сайт
Правила
Помощь
Поиск
Непрочитанные
Календарь
Вход
Регистрация
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Скрытие фона под AttributeReference
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
Вниз
Автор
Тема: Скрытие фона под AttributeReference (Прочитано 5371 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Николай Коломоец
ADN Club
Сообщений: 16
Карма: 0
Skype:
Скрытие фона под AttributeReference
«
:
16-07-2013, 15:34:50 »
Доброго времени суток!
Возникла следующая проблема: решил упростить себе жизнь и одной командой скрыть фон под всеми выбранными объектами, которые в моем случае - блоки с атрибутами (многострочными).
Ниже код программы.
Код - C#
[Выбрать]
// скрытие фона под выбранными пользователем вхождениями многострочных атрибутов во вставках блоков
[
CommandMethod
(
"attbackgrhide"
,CommandFlags
.
UsePickSet
)
]
public
void
HideAttributeBackground
(
)
{
Database db
=
Autodesk
.
AutoCAD
.
ApplicationServices
.
Application
.
DocumentManager
.
MdiActiveDocument
.
Database
;
Editor ed
=
Autodesk
.
AutoCAD
.
ApplicationServices
.
Application
.
DocumentManager
.
MdiActiveDocument
.
Editor
;
PromptSelectionOptions prSelOpt
=
new
PromptSelectionOptions
(
)
;
prSelOpt
.
MessageForAdding
=
"
\n
Выберите объекты для скрытия фона: "
;
PromptSelectionResult prSelRes
=
ed
.
GetSelection
(
prSelOpt
)
;
if
(
prSelRes
.
Status
==
PromptStatus
.
OK
)
{
using
(
Transaction trans
=
db
.
TransactionManager
.
StartTransaction
(
)
)
{
foreach
(
SelectedObject selObj
in
prSelRes
.
Value
)
{
DBObject obj
=
trans
.
GetObject
(
selObj
.
ObjectId
, OpenMode
.
ForRead
)
;
if
(
obj
is
BlockReference
)
{
BlockReference br
=
(
BlockReference
)
obj
;
foreach
(
ObjectId attrRefObjId
in
br
.
AttributeCollection
)
{
AttributeReference attrRef
=
(
AttributeReference
)
trans
.
GetObject
(
attrRefObjId, OpenMode
.
ForRead
)
;
if
(
attrRef
.
IsMTextAttribute
)
{
attrRef
.
UpgradeOpen
(
)
;
attrRef
.
MTextAttribute
.
BackgroundFill
=
true
;
attrRef
.
MTextAttribute
.
BackgroundScaleFactor
=
1.1
;
attrRef
.
MTextAttribute
.
UseBackgroundColor
=
true
;
}
}
}
if
(
obj
is
MText
)
{
MText mtxt
=
(
MText
)
obj
;
mtxt
.
UpgradeOpen
(
)
;
mtxt
.
BackgroundFill
=
true
;
mtxt
.
BackgroundScaleFactor
=
1.1
;
mtxt
.
UseBackgroundColor
=
true
;
}
}
trans
.
Commit
(
)
;
}
}
}
Проблема в том, что программа выполняется, находит нужный атрибут, вроде меняет ему фон, но это ничего не дает. Что я забыл?
Записан
ElpanovEvgeniy
ADN
Сообщений: 8
Карма: 2
Skype:
Re: Скрытие фона под AttributeReference
«
Ответ #1 :
16-07-2013, 18:08:42 »
может "_attsync" или программный аналог?
Записан
Тот, кто правильно указывает на мои ошибки, — мой учитель
тот, кто правильно отмечает мои верные поступки, — мой друг
тот, кто мне льстит, — мой враг.
/Сунь Цзы/
Алексей Кулик
Administrator
Сообщений: 1075
Карма: 166
Re: Скрытие фона под AttributeReference
«
Ответ #2 :
17-07-2013, 00:03:09 »
Я, к сожалению, не спец по .NET, поэтому могу только предполагать: для модифицируемого примитива не надо выполнять его принудительное обновление?
На крайний случай - сделать полную регенерацию хотя бы активного видового экрана.
Записан
Все, что сказано - личное мнение.
Правила форума
существуют не просто так!
Приводя в сообщении код, не забывайте про его
форматирование
!
Александр Ривилис
Administrator
Сообщений: 13731
Карма: 1768
Рыцарь ObjectARX
Skype:
Re: Скрытие фона под AttributeReference
«
Ответ #3 :
17-07-2013, 00:40:12 »
attrRef.MTextAttribute возвращает временную копию. Модифицируй ее и присвой attrRef.MTextAttribute
«
Последнее редактирование: 29-07-2013, 21:48:08 от Александр Ривилис
»
Записан
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Николай Коломоец
ADN Club
Сообщений: 16
Карма: 0
Skype:
Re: Скрытие фона под AttributeReference
«
Ответ #4 :
17-07-2013, 13:44:33 »
Спасибо всем, разобрался. Все оказалось просто в итоге - надо добавить обновление значения атрибута, именно для мультитекста:
Код - C#
[Выбрать]
AttributeReference attrRef
=
(
AttributeReference
)
trans
.
GetObject
(
attrRefObjId, OpenMode
.
ForRead
)
;
if
(
attrRef
.
IsMTextAttribute
)
{
attrRef
.
UpgradeOpen
(
)
;
attrRef
.
MTextAttribute
.
BackgroundFill
=
true
;
attrRef
.
MTextAttribute
.
BackgroundScaleFactor
=
1.1
;
attrRef
.
MTextAttribute
.
UseBackgroundColor
=
true
;
attrRef
.
UpdateMTextAttribute
(
)
;
}
решило проблему!
«
Последнее редактирование: 29-07-2013, 21:26:40 от Александр Ривилис
»
Записан
Печать
Страницы: [
1
]
Вверх
« предыдущая тема
следующая тема »
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Скрытие фона под AttributeReference