[Closed] Editable Poly .cageColor
(
global changePolyCageColor
fn changePolyCageColor =
(
cageColor = color 255 0 0
selectedCageColor = color 0 255 0
polyObj = modPanel.getCurrentObject()
if classof polyObj == Editable_Poly then
(
polyObj.CageColor = [255.0/cageColor.r,255.0/cageColor.g,255.0/cageColor.b]
polyObj.selectedCageColor = [255.0/selectedCageColor.r,255.0/selectedCageColor.g,255.0/selectedCageColor.b]
)
)
callbacks.addScript #modPanelSelChanged "changePolyCageColor()" id:#v3d_changePolyCagecolor
)
Hello, something wrong with max (2017.1) or with my code? I trying change .cageColor through callback but color changes only at second time when I select object.
3dsMax 2017. 10 spheres in the scene, converted to editable poly objects. The cage color is the default.
Your code is executed. When I select a sphere its cage color is changed to red/green. No need to select the obejct second time.
If the callback is running and I create a sphere, as soon as I convert it to editable poly the cage color is changed to red/green.
I’ve tried other handlers and the node event system and assigning cage values directly to object too, but get always the same result (max 2014). Can’t find a workaround, sorry.
It’s a BUG and has to be reported (all versions). I see this bug in the source code…
the only solution to update cage colors i found is the using extra call with a timer:
global CageUpdateTimer =
(
local timer = dotnetobject "Timer"
timer.interval = 1
fn executeJob s e =
(
format "% %
" s e
s.Stop()
if iskindof s.tag dotnetmxsvalue and iskindof (ep = s.tag.value) Editable_Poly do
(
s.tag.value.cagecolor = s.tag.value.cagecolor
s.tag.value.selectedCageColor = s.tag.value.selectedCageColor
)
)
dotnet.addEventHandler timer "Tick" executeJob
timer
)
(
global changePolyCageColor
fn changePolyCageColor =
(
cageColor = (random white black) as point4
selectedCageColor = (random green yellow) as point4
polyObj = modPanel.getCurrentObject()
if classof polyObj == Editable_Poly then
(
polyObj.CageColor = cageColor
polyObj.selectedCageColor = selectedCageColor
format ">> changed... %
" polyObj.CageColor
CageUpdateTimer.tag = dotnetmxsvalue polyObj
CageUpdateTimer.Start()
)
)
callbacks.removeScripts id:#v3d_changePolyCagecolor
callbacks.addScript #modPanelSelChanged "changePolyCageColor()" id:#v3d_changePolyCagecolor
callbacks.addScript #modPanelSubObjectLevelChanged "changePolyCageColor()" id:#v3d_changePolyCagecolor
)
( i use a similar solution in some other cases )
Thank you for this solution denisT!
btw reported: BSPR-27166 <Editable_Poly>.CageColor maxscript’s functions doesn’t works properly