У меня есть скрипт – отображения объектов (по слою), из #viewport в #boundingbox.
За основу взят скрипт Coopera и изрядно доработан:
(
if selection.count > 0 do (macros.run "Layers" "LayerSet"
$.displayByLayer = on)
layermanager.current.boxmode = false
( case of
(
( layermanager.current.display != #boundingbox): (layermanager.current.display = #boundingbox)
( layermanager.current.display == #boundingbox): (layermanager.current.display = #viewport)
)
)
completeredraw()
)
Данный скрипт работает с одним активным слоем (из за LayerSet в его коде).
Вопрос: Можно ли организовать таким образом, что б при выделении нескольких объектов, #boundingbox-ом становились слои на которых они лежат . То есть, сразу несколько слоев, с одного нажатия кнопки. И так же назад.
Ps. Наличие ответа, позволит модернизировать скрикты отображения #viewport, #shaded, #wireframe, vertexTicks, layermanager.current.visibility = 0.5 и т.д.
Я видимо не корректно изложил суть вопроса, и произошло недопонимание
К примеру есть модель машины.
В layer manager три слоя: 1 Kolesa (ему присвоено 4 колеса), 2 Dveri (на нем лежат 4 двери), 3 Default (все остальное).
Выделяю любое колесо, запускаю выше приведенный код и во вьюпорте все колеса отображаются box-ами.
Выделяю другое колесо (оно в виде box-а), запускаю скрипт, и все колеса во вьюпорте возвращаются в прежний вид (а точнее все объекты присвоенные слою Kolesa )
При выделении колеса и двери, в режиме #boundingbox отобразится только одни слой, второй останется без изменения, в режиме #viewport.
(Это происходит из-за LayerSet. Функция делает один из слоев активным и меняет его настройки отображение, а второй игнорируется)
И вот вопрос: как сделать так, что бы при выделении колеса и двери (объектов не лежащих на одном слое), все колеса и двери, а точнее слои Kolesa и Dveri отображались в режиме #boundingbox.
Конечно можно это проделать последовательно. Но хочется что бы скрипт менял настройки отображение сразу нескольким слоям
Понятно,
тогда просто обойди все выделенные объекты, собери в массив слои которым они принадлежат (уникальные, без повторов).
И уже сделай по ним(по найденным слоям) цикл, устанавливай свои свойства.
Ps
macros.run "Layers" "LayerSet" Не трогай он тебе не мешает
С участием более знающих людей, на данный момент есть такой работающий вариант:
Для отображения Display во вьюпорте
(
if selection.count > 0 do
(
ArrLayer=#()
for obj in selection do
(
Objlayer=obj.INodeLayerProperties.layer
if (appendifUnique ArrLayer ObjLayer) do
( case of
(
( Objlayer.display!=#wireframe): (Objlayer.display = #wireframe) [i]--#shaded; #boundingbox[/i]
( Objlayer.display==#wireframe): (Objlayer.display = #viewport)
)
)
completeredraw()
)
)
)
Для отображения Display Properties во вьюпорте
(
if selection.count > 0 do
(
ArrLayer=#()
for obj in selection do
(
Objlayer=obj.INodeLayerProperties.layer
if (appendifUnique ArrLayer ObjLayer) do
(
Objlayer.backfacecull = not Objlayer.backfacecull [i]-- Objlayer.vertexTicks; Objlayer.ignoreExtents и т.д.[/i]
)
)
)
)
Недостаток: При выделении 2-х слоев, первый из которых отображается #boundingbox, а второй #viewport, после запуска скрипта, параметры меняются у обоих. То есть первый отображается #viewport, второй - #boundingbox
Хочется что бы при выделении нескольких слоев с разными параметрами отображения (или Properties). При первом запуске скрипта, все отображались #boundingbox (backfacecull = false). При повторном #viewport (backfacecull = true)
Хочется что бы при выделении нескольких слоев с разными параметрами отображения (или Properties). При первом запуске скрипта, все отображались #boundingbox (backfacecull = false). При повторном #viewport (backfacecull = true)
objs_display_n=0; objs_prop_n=0;
for o in selection do (ol=o.INodeLayerProperties.layer;
if(ol.display==#boundingbox)then objs_display_n=objs_display_n+1;
if(ol.backfacecull==false)then objs_prop_n=objs_prop_n+1;)
for o in selection do(ol=o.INodeLayerProperties.layer;
if(selection.count==objs_display_n and selection.count==objs_prop_n)then
(ol.display=#viewport;ol.backfacecull=true;)
else (ol.display=#boundingbox;ol.backfacecull=false;))
Вот это дело, большущие спасибо!
Я не хотел что бы в одном скрипте менялись параметры Display и Display Properties. Когда я писал #boundingbox (backfacecull = false). Имел в виду для двух разных (параллельных скриптом). Но это ерунда, уже разделил на два:
objs_display_n
objs_prop_n
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Александр Чернега
У меня есть скрипт – отображения объектов (по слою), из #viewport в #boundingbox.
За основу взят скрипт Coopera и изрядно доработан:
Данный скрипт работает с одним активным слоем (из за LayerSet в его коде).
Вопрос: Можно ли организовать таким образом, что б при выделении нескольких объектов, #boundingbox-ом становились слои на которых они лежат . То есть, сразу несколько слоев, с одного нажатия кнопки. И так же назад.
Ps. Наличие ответа, позволит модернизировать скрикты отображения #viewport, #shaded, #wireframe, vertexTicks, layermanager.current.visibility = 0.5 и т.д.
Savin Denis
В layer manager ты такое руками сделать можешь ?
Александр Чернега
К примеру есть модель машины.
В layer manager три слоя:
1 Kolesa (ему присвоено 4 колеса),
2 Dveri (на нем лежат 4 двери),
3 Default (все остальное).
Выделяю любое колесо, запускаю выше приведенный код и во вьюпорте все колеса отображаются box-ами.
Выделяю другое колесо (оно в виде box-а), запускаю скрипт, и все колеса во вьюпорте возвращаются в прежний вид (а точнее все объекты присвоенные слою Kolesa )
При выделении колеса и двери, в режиме #boundingbox отобразится только одни слой, второй останется без изменения, в режиме #viewport.
(Это происходит из-за LayerSet. Функция делает один из слоев активным и меняет его настройки отображение, а второй игнорируется)
И вот вопрос: как сделать так, что бы при выделении колеса и двери (объектов не лежащих на одном слое), все колеса и двери, а точнее слои Kolesa и Dveri отображались в режиме #boundingbox.
Конечно можно это проделать последовательно. Но хочется что бы скрипт менял настройки отображение сразу нескольким слоям
Savin Denis
тогда просто обойди все выделенные объекты, собери в массив слои которым они принадлежат (уникальные, без повторов).
И уже сделай по ним(по найденным слоям) цикл, устанавливай свои свойства.
Ps
macros.run "Layers" "LayerSet" Не трогай он тебе не мешает
Александр Чернега
Для отображения Display во вьюпорте
( if selection.count > 0 do ( ArrLayer=#() for obj in selection do ( Objlayer=obj.INodeLayerProperties.layer if (appendifUnique ArrLayer ObjLayer) do ( case of ( ( Objlayer.display!=#wireframe): (Objlayer.display = #wireframe) [i]--#shaded; #boundingbox[/i] ( Objlayer.display==#wireframe): (Objlayer.display = #viewport) ) ) completeredraw() ) ) )Для отображения Display Properties во вьюпорте( if selection.count > 0 do ( ArrLayer=#() for obj in selection do ( Objlayer=obj.INodeLayerProperties.layer if (appendifUnique ArrLayer ObjLayer) do ( Objlayer.backfacecull = not Objlayer.backfacecull [i]-- Objlayer.vertexTicks; Objlayer.ignoreExtents и т.д.[/i] ) ) ) )Недостаток: При выделении 2-х слоев, первый из которых отображается #boundingbox, а второй #viewport, после запуска скрипта, параметры меняются у обоих. То есть первый отображается #viewport, второй - #boundingboxХочется что бы при выделении нескольких слоев с разными параметрами отображения (или Properties). При первом запуске скрипта, все отображались #boundingbox (backfacecull = false). При повторном #viewport (backfacecull = true)
igorznag
Александр Чернега
Я не хотел что бы в одном скрипте менялись параметры Display и Display Properties. Когда я писал #boundingbox (backfacecull = false). Имел в виду для двух разных (параллельных скриптом).
Но это ерунда, уже разделил на два:
objs_display_n
objs_prop_n