Сообщество программистов Autodesk в СНГ
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Образовательный курс по платформе Autodesk Forge.
Начало
Сайт
Правила
Помощь
Поиск
Непрочитанные
Календарь
Вход
Регистрация
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
Civil 3D API
»
Получение LabelGroups из ProfileView
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
Вниз
Автор
Тема: Получение LabelGroups из ProfileView (Прочитано 9773 раз)
0 Пользователей и 1 Гость просматривают эту тему.
begiz
ADN Club
Сообщений: 161
Карма: 8
Skype:
Получение LabelGroups из ProfileView
«
:
12-01-2015, 12:50:04 »
Добрый день.
Возник вопрос как получить LabelGroups из ProfileView?
ProfileViewBandItem которые интересуют, получил.
Код - C#
[Выбрать]
CivilDocument doc
=
Autodesk
.
Civil
.
ApplicationServices
.
CivilApplication
.
ActiveDocument
;
ObjectIdCollection alignments
=
doc
.
GetAlignmentIds
(
)
;
Application
.
DocumentManager
.
MdiActiveDocument
.
Editor
.
WriteMessage
(
docInfo
)
;
foreach
(
ObjectId oId
in
alignments
)
{
using
(
Transaction tr
=
Application
.
DocumentManager
.
MdiActiveDocument
.
Database
.
TransactionManager
.
StartTransaction
(
)
)
{
try
{
Alignment al
=
(
Alignment
)
oId
.
GetObject
(
OpenMode
.
ForRead
)
;
String txt
=
String
.
Format
(
"
\n
AlignName:!{0}
\n
"
, al
.
Name
)
;
Application
.
DocumentManager
.
MdiActiveDocument
.
Editor
.
WriteMessage
(
txt
)
;
ObjectIdCollection profIds
=
al
.
GetProfileViewIds
(
)
;
foreach
(
ObjectId pId
in
profIds
)
{
try
{
ProfileView pv
=
(
ProfileView
)
pId
.
GetObject
(
OpenMode
.
ForRead
)
;
ProfileViewBandSet bs
=
pv
.
Bands
;
ProfileViewBandItemCollection bsc
=
bs
.
GetBottomBandItems
(
)
;
foreach
(
ProfileViewBandItem bi
in
bsc
)
{
//ProfileViewBandItem bii = bi;
}
}
catch
(
Autodesk
.
Civil
.
CivilException
ex
)
{
string
msg
=
ex
.
Message
;
}
}
}
catch
(
Autodesk
.
Civil
.
CivilException
ex
)
{
string
msg
=
ex
.
Message
;
}
tr
.
Commit
(
)
;
}
}
Записан
Отмечено как Решение
begiz
12-01-2015, 13:09:11
Дмитрий Загорулькин
ADN
Сообщений: 2531
Карма: 738
Re: Получение LabelGroups из ProfileView
«
Ответ #1 :
12-01-2015, 13:03:08 »
Вот как я получал метки из области данных:
Код - C#
[Выбрать]
using
Autodesk.AutoCAD.DatabaseServices
;
using
Autodesk.Civil.DatabaseServices
;
namespace
ProfileViews
{
/// <summary>
/// Данные по меткам области данных вида профиля
/// </summary>
public
struct
BandLabelGroups
{
public
ObjectIdCollection PipeNetworkBLGIds
{
get
;
set
;
}
public
ObjectIdCollection HorizontalGeometryBLGIds
{
get
;
set
;
}
public
ObjectIdCollection ProfileDataBLGIds
{
get
;
set
;
}
public
ObjectIdCollection SectionalDataBLGIds
{
get
;
set
;
}
public
BandLabelGroups
(
ObjectId pViewId
)
:
this
(
)
{
PipeNetworkBLGIds
=
PipeNetworkBandLabelGroup
.
GetAvailableLabelGroupIds
(
pViewId
)
;
HorizontalGeometryBLGIds
=
HorizontalGeometryBandLabelGroup
.
GetAvailableLabelGroupIds
(
pViewId
)
;
ProfileDataBLGIds
=
ProfileDataBandLabelGroup
.
GetAvailableLabelGroupIds
(
pViewId
)
;
SectionalDataBLGIds
=
SectionalDataBandLabelGroup
.
GetAvailableLabelGroupIds
(
pViewId
)
;
}
}
}
Этот код позволяет получить коллекции ObjectId именно групп меток.
А объект ProfileViewBandItem - это, грубо говоря, настройки для групп меток.
«
Последнее редактирование: 13-01-2015, 17:26:30 от Загорулькин Дмитрий
»
Записан
begiz
ADN Club
Сообщений: 161
Карма: 8
Skype:
Re: Получение LabelGroups из ProfileView
«
Ответ #2 :
12-01-2015, 13:09:07 »
Супер, ето то что нужно.
Не сразу понял кто такой pViewId.
Спасибо.
Записан
Дмитрий Загорулькин
ADN
Сообщений: 2531
Карма: 738
Re: Получение LabelGroups из ProfileView
«
Ответ #3 :
12-01-2015, 13:19:09 »
Только как их переопределить - это непростой вопрос. Как один из вариантов - использовать Drawable Overrule. Но тогда нужно будет писать код, который будет полностью заново отрисовывать эти объекты. А по другому, наверное, никак не сделать...
Записан
begiz
ADN Club
Сообщений: 161
Карма: 8
Skype:
Re: Получение LabelGroups из ProfileView
«
Ответ #4 :
12-01-2015, 13:21:57 »
Ну я если честно думал вот так сделать, ето безобразие в реактор закинуть.
Может по другому как то?
Код - C#
[Выбрать]
LabelGroup group
=
(
LabelGroup
)
baseLabel
;
foreach
(
LabelGroupSubEntity subEntity
in
group
.
SubEntities
)
{
ObjectIdCollection textComponentIds
=
subEntity
.
GetTextComponentIds
(
)
;
textComponentIds
=
subEntity
.
GetTextComponentIds
(
)
;
if
(
textComponentIds
.
Count
>
0
)
{
foreach
(
ObjectId id
in
textComponentIds
)
{
LabelStyleTextComponent lsc
=
(
LabelStyleTextComponent
)
id
.
GetObject
(
OpenMode
.
ForWrite
)
;
if
(
lsc
.
Name
==
"добавкаНАЧАЛОкривой"
||
lsc
.
Name
==
"ДобавкаНачалаКонца"
)
{
double
st
=
0
;
double
off
=
0
;
al
.
StationOffset
(
subEntity
.
LabelLocation
.
X
,subEntity
.
LabelLocation
.
Y
,
0.01
,
ref
st,
ref
off
)
;
Application
.
DocumentManager
.
MdiActiveDocument
.
Editor
.
WriteMessage
(
st
+
" "
+
al
.
GetStationStringWithEquations
(
st
)
+
"
\n
"
)
;
subEntity
.
SetTextComponentOverride
(
id, _getNearestPoint
(
Double
.
Parse
(
al
.
GetStationStringWithEquations
(
st
)
.
Replace
(
"+"
,
""
)
)
, station_map
)
)
;
}
}
}
else
{
Application
.
DocumentManager
.
MdiActiveDocument
.
Editor
.
WriteMessage
(
"Label: "
+
subEntity
.
Parent
.
GetRXClass
(
)
.
DxfName
+
" doesn't have any text component to override! "
+
"This label will be ignored for the current action.
\n
"
)
;
break
;
}
}
Т.е. так же как и с обычными LabelGroup, которыe к Alighment прицеплены. Или тут такой вариант не проидет?
Записан
Дмитрий Загорулькин
ADN
Сообщений: 2531
Карма: 738
Re: Получение LabelGroups из ProfileView
«
Ответ #5 :
12-01-2015, 13:26:04 »
Попробуйте, может быть получится
Записан
Печать
Страницы: [
1
]
Вверх
« предыдущая тема
следующая тема »
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
Civil 3D API
»
Получение LabelGroups из ProfileView