Wait. Wait no, it doesn’t, sorry.
That colors the verts directly from red to blue, basically running the opposite direction on the color wheel.
as i said we have to use HSV space. here it is (found in my archive):
fn makeWeightColor weight asRGB:off =
(
c = red
c.h = (1.0 - weight)*170
if asRGB do c = c as point4
c
)
170 is a number around blue.h
polyop.setVertColor is very slow method (i’ve already explained why it is). if you need it faster use polyop.setmapvert instead
But doesn’t polyOp.setMapVert set UVW coordinates?
Also, still need a way to get the correct color…
Currently using this with your makeWeightColor function, and it is working perfectly as far as I can tell. Thanks again!
fn vertColorFromSoftSel obj = (
obj.showVertexColors = on
obj.vertexColorsShaded = on
for v = 1 to obj.numVerts do (
local w = polyOp.getVDataValue obj 1 v
polyop.setMapVert obj 0 v ((weightToColor w) as point4)
)
redrawViews()
)
All right, one last thing I guess… right now it still only works when the node is selected with subselection on. Otherwise polyOp.getVDataValue <node> 1 <vertex> always returns 1.0.
If I first select the node and lock the soft selection, then deselect the node, it will return the correct values. But is there any way to do this without having to select the node at all?
(weightToColor w) as point4
is not necessary. the function as you can see has an option argument.
about a sub-selection level… i think it’s a limitation. probably using sdk is possible to force soft-selection level update. with pure mxs is probably not. but just in case i would check the state of baseobject instead of polyobject. maybe it updates.
other way is to calculate ‘soft selection’ weights yourself. the formula is known. as i remember it was posted (by Klvnk?) on this forum
far distance is lower weight. selection you know, neighbors you can find… distance as well.
the formula is something about distance, falloff, pinch, and bubble… it was shown here
Oh yeah, that. Unfortunately that won’t work if painted soft selection is on, which for my purposes it will be. Given that, not sure if this is the most efficient way to get the desired result, but it works.
fn vertColorFromSoftSel obj = (
-- Store selection and subobject level
sel = selection as array
setCommandPanelTaskMode #modify
SOL = subObjectLevel
-- Temporarily set object and subselection
select obj
if subObjectLevel == 0 do subObjectLevel = 1
-- Set mapping and display
polyOp.setMapSupport obj 0 true
obj.showVertexColors = true
obj.vertexColorsShaded = true
obj.useSoftSel = true
-- Set vertex colors
for v = 1 to obj.numVerts do (
local w = polyOp.getVDataValue obj.baseObject 1 v
polyop.setMapVert obj 0 v (makeWeightColor w asRGB:on)
)
-- Restore selection and subobject level
deselect selection
select sel
subObjectLevel = SOL
redrawViews()
)