Сообщество программистов Autodesk в СНГ
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
1 час
1 день
1 неделя
1 месяц
Навсегда
Новости:
Звонок в техподдержку Autodesk Forge
Начало
Сайт
Правила
Помощь
Поиск
Непрочитанные
Календарь
Вход
Регистрация
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
ViewportVisibilityDefault
« предыдущая тема
следующая тема »
Печать
Страницы: [
1
]
Вниз
Автор
Тема: ViewportVisibilityDefault (Прочитано 9236 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Тема содержит сообщение с Решением.
Нажмите здесь чтобы посмотреть его.
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
ViewportVisibilityDefault
«
:
21-05-2021, 01:06:53 »
Добрый день! Буду благодарен, если поможете разобраться. При создании слоя устанавливаю свойство ViewportVisibilityDefault = true, чтобы новый слой был заморожен на всех видовых экранах. И это свойство включено. Но при входе в видовых экран (любой) - слой разморожен. Если создавать слой через панель слоев в самом автокаде нажатием на кнопку "заморожен на ВЭ" - то свойство включено и слой сам заморожен... Как добиться такого же эффекта программно?
Записан
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
Re: ViewportVisibilityDefault
«
Ответ #1 :
21-05-2021, 01:11:41 »
или это работает только для новых ВЭ? тогда как программно создать слой, замороженный на ВСЕХ ВЭ?
Записан
avc
ADN Club
Сообщений: 822
Карма: 167
Re: ViewportVisibilityDefault
«
Ответ #2 :
21-05-2021, 11:04:59 »
Вам надо перебрать все вьюпорты всех листов и заморозить им этот слой: Viewport.FreezeLayersInViewport(IEnumerator layerIds)
Записан
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
Re: ViewportVisibilityDefault
«
Ответ #3 :
21-05-2021, 14:38:42 »
а как это сделать?
попробовал таким способом - но это работает только на активном в данный момент листе:
Код - C#
[Выбрать]
ObjectIdCollection idCol
=
new
ObjectIdCollection
(
)
;
idCol
.
Add
(
acLyrTblRec
.
ObjectId
)
;
LayoutManager LM
=
LayoutManager
.
Current
;
string
currentLo
=
LM
.
CurrentLayout
;
DBDictionary LayoutDict
=
acTrans
.
GetObject
(
acCurDb
.
LayoutDictionaryId
, OpenMode
.
ForRead
)
as
DBDictionary
;
Layout CurrentLo
=
acTrans
.
GetObject
(
(
ObjectId
)
LayoutDict
[
currentLo
]
, OpenMode
.
ForRead
)
as
Layout
;
BlockTableRecord BlkTblRec
=
acTrans
.
GetObject
(
CurrentLo
.
BlockTableRecordId
, OpenMode
.
ForRead
)
as
BlockTableRecord
;
foreach
(
ObjectId ID
in
BlkTblRec
)
{
Viewport VP
=
acTrans
.
GetObject
(
ID, OpenMode
.
ForWrite
)
as
Viewport
;
if
(
VP
!=
null
)
{
VP
.
FreezeLayersInViewport
(
idCol
.
GetEnumerator
(
)
)
;
}
}
Записан
avc
ADN Club
Сообщений: 822
Карма: 167
Re: ViewportVisibilityDefault
«
Ответ #4 :
21-05-2021, 15:18:07 »
подправьте код, чтоб не LM.CurrentLayout брать, а перебрать весь словарь листов
Записан
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
Re: ViewportVisibilityDefault
«
Ответ #5 :
21-05-2021, 15:45:30 »
не понимаю, а как это сделать? можно пересчитать количество элементов LayoutDict, а вот обратиться к ним не по имени, а по индексу нельзя. доступ и к Key и к Values запрещен.
Записан
avc
ADN Club
Сообщений: 822
Карма: 167
Re: ViewportVisibilityDefault
«
Ответ #6 :
21-05-2021, 15:49:41 »
ровно так же как у вас строчкой ниже перебираются элементы в блоке
Словарь - он же вполне IEnumerable.
А по большому счету вам и листы не нужны - найдите все блоки PaperSpace в таблице блоков - а в них и вьюпорты тоже найдутся.
Записан
Отмечено как Решение
Александр Ривилис
21-05-2021, 19:54:07
avc
ADN Club
Сообщений: 822
Карма: 167
Re: ViewportVisibilityDefault
«
Ответ #7 :
21-05-2021, 15:52:35 »
Код - C#
[Выбрать]
using
(
DBDictionary layoutDict
=
tr
.
GetObject
(
HostApplicationServices
.
WorkingDatabase
.
LayoutDictionaryId
, OpenMode
.
ForRead
)
as
DBDictionary
)
foreach
(
DictionaryEntry de
in
layoutDict
)
using
(
Layout ltr
=
tr
.
GetObject
(
(
ObjectId
)
de
.
Value
, OpenMode
.
ForRead
)
as
Layout
)
using
(
BlockTableRecord btr
=
tr
.
GetObject
(
ltr
.
BlockTableRecordId
, OpenMode
.
ForRead
)
as
BlockTableRecord
)
foreach
(
ObjectId objId
in
btr
)
...
Записан
VitaliyB
ADN OPEN
Сообщений: 63
Карма: 2
Re: ViewportVisibilityDefault
«
Ответ #8 :
21-05-2021, 16:36:36 »
УРРРААА! Все работает как часы! Спасибо за помощь!
Записан
Александр Ривилис
Administrator
Сообщений: 13886
Карма: 1788
Рыцарь ObjectARX
Skype:
Re: ViewportVisibilityDefault
«
Ответ #9 :
21-05-2021, 19:58:38 »
VitaliyB
,
Database.GetViewports возвращает ObjectId всех Viewport'ов базы.
Записан
Не забывайте про правильное
Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился
правильный ответ
, то не забудьте про кнопку
Решение
Печать
Страницы: [
1
]
Вверх
« предыдущая тема
следующая тема »
Сообщество программистов Autodesk в СНГ
»
ADN Club
»
AutoCAD .NET API
»
ViewportVisibilityDefault