Сообщество программистов Autodesk в СНГ
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Образовательный курс по платформе Autodesk Forge.
Начало
Сайт
Правила
Помощь
Поиск
Непрочитанные
Календарь
Вход
Регистрация
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Заменить содержимое атрибута блока внутри выноски
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
Вниз
Автор
Тема: Заменить содержимое атрибута блока внутри выноски (Прочитано 7602 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Atomohod
ADN OPEN
Сообщений: 453
Карма: 1
Заменить содержимое атрибута блока внутри выноски
«
:
18-07-2021, 10:24:09 »
Здравствуйте
У меня есть выноска multileader в которой используется пользовательский блок с атрибутами внутри. Также этот блок используется вне выноски просто в чертеже как самостоятельное обозначение. Я программно меняю содержимое атрибута блока. Для блоков не в составе выноски все работает идеально, но значения внутри блоков привязанных в выноску не изменяются. Как сделать так чтобы они изменялись вместе с другими блоками?
Мой код
Код - C#
[Выбрать]
public
static
ObjectIdCollection GetBlockReferencesWithDesiredPosition
(
string
compartent,
string
desiredPosition
)
// Получает все блоки позиций с требуемым номером
{
Document doc
=
Application
.
DocumentManager
.
MdiActiveDocument
;
Editor ed
=
doc
.
Editor
;
Database db
=
doc
.
Database
;
List
<
Point3d
>
listOfBasePoints
=
new
List
<
Point3d
>
(
)
;
ObjectIdCollection bRefCollection
=
new
ObjectIdCollection
(
)
;
using
(
Transaction tr
=
doc
.
TransactionManager
.
StartTransaction
(
)
)
{
BlockTable bt
=
tr
.
GetObject
(
db
.
BlockTableId
, OpenMode
.
ForRead
)
as
BlockTable
;
if
(
bt
.
Has
(
"GTItemMark"
)
)
{
foreach
(
ObjectId btrId
in
bt
)
//bt набор btrRecord то есть по своей сути уже коллекция!
{
BlockTableRecord btr
=
tr
.
GetObject
(
btrId, OpenMode
.
ForRead
)
as
BlockTableRecord
;
if
(
btr
.
Name
.
Contains
(
"GTItemMark"
)
)
{
ObjectIdCollection bRefIdCollection
=
btr
.
GetBlockReferenceIds
(
false
,
true
)
;
// собрать все Id от BlockReference из BlockTableRecord в коллекцию
foreach
(
ObjectId bRefId
in
bRefIdCollection
)
{
BlockReference bRef
=
tr
.
GetObject
(
bRefId, OpenMode
.
ForWrite
)
as
BlockReference
;
// получить все BlockReference
AttributeCollection attrIdCollection
=
bRef
.
AttributeCollection
;
// собрать все Id от атрибутов из BlockTableRecord в коллекцию
foreach
(
ObjectId idAttRef
in
attrIdCollection
)
{
AttributeReference att
=
(
AttributeReference
)
tr
.
GetObject
(
idAttRef, OpenMode
.
ForWrite
)
;
if
(
(
att
.
Tag
==
"ContourNumber"
)
&&
(
att
.
TextString
.
Substring
(
0
,
2
)
==
compartent
)
&&
(
int
.
Parse
(
att
.
TextString
.
Substring
(
3
,
2
)
)
>=
int
.
Parse
(
desiredPosition
)
)
)
{
int
num
=
int
.
Parse
(
att
.
TextString
.
Substring
(
3
,
2
)
)
+
1
;
if
(
num
.
ToString
(
)
.
Length
==
1
)
{
att
.
TextString
=
compartent
+
"-0"
+
num
.
ToString
(
)
;
}
else
{
att
.
TextString
=
compartent
+
"-"
+
num
.
ToString
(
)
;
}
}
}
}
}
}
}
tr
.
Commit
(
)
;
}
return
bRefCollection
;
}
Записан
Александр Ривилис
Administrator
Сообщений: 13882
Карма: 1787
Рыцарь ObjectARX
Skype:
Re: Заменить содержимое атрибута блока внутри выноски
«
Ответ #1 :
18-07-2021, 14:36:48 »
Выложи пример dwg-файла с парочкой отдельно вставленных блоков и парочкой мультилидеров.
Записан
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Atomohod
ADN OPEN
Сообщений: 453
Карма: 1
Re: Заменить содержимое атрибута блока внутри выноски
«
Ответ #2 :
18-07-2021, 20:30:56 »
Прикладываю файл примера
Записан
Александр Ривилис
Administrator
Сообщений: 13882
Карма: 1787
Рыцарь ObjectARX
Skype:
Re: Заменить содержимое атрибута блока внутри выноски
«
Ответ #3 :
18-07-2021, 20:47:01 »
Нашел единственный метод, который позволяет получать AttributeReference для блока из MLeader:
MLeader.GetBlockAttribute
На вход этому методу нужно передать ObjectId для соответствующего AttributeDefinition.
Записан
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Александр Ривилис
Administrator
Сообщений: 13882
Карма: 1787
Рыцарь ObjectARX
Skype:
Re: Заменить содержимое атрибута блока внутри выноски
«
Ответ #4 :
18-07-2021, 20:50:38 »
Посмотри эту тему:
https://adndevblog.typepad.com/autocad/2012/06/traversing-through-attribute-references-in-mleader.html
Записан
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Печать
Страницы: [
1
]
Вверх
« предыдущая тема
следующая тема »
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
Заменить содержимое атрибута блока внутри выноски