[Closed] polyop + smoothinggroups
Hi Everybody,
i need your help, as i can’t figure out how to set different smoothinggrups on an editable poly …
here is a simple script, that generate 9 surfaces, which i want to assign different smoothinggroups.
it works fine as long as the line “polyop.setFaceSmoothGroup obj poly i add:false” is deleted.
Would be fine, if someone could give me some glue on how to get the smoothing groups working …
Markus
PoAr = #()
FaAr =#()
Fa =#()
Cou = 0
obj = editable_mesh name:"test"
convertto obj editable_poly
for i = 1 to 10 do
(
Px = i * 10
Py = 0
Pz1 = 0
Pz2 = 10
Po1 =[Px,Py,Pz1]
Po2 =[Px,Py,Pz2]
cou = Cou+1
append PoAr Po1
if i < 10 do
(
Fa[1] = cou
Fa[2] = Cou +1
)
cou = Cou+1
append PoAr Po2
if i < 10 do
(
Fa[3] = cou + 2
Fa[4] = Cou + 1
)
append FaAr Fa
Fa =#()
)
for i = 1 to PoAr.count do
(
polyop.createVert obj PoAr[i]
)
for i = 1 to FaAr.count do
(
poly = polyop.createPolygon obj FaAr[i]
polyop.setFaceSmoothGroup obj poly i add:false
)
Did you realise that the setFaceSmoothGroup operation takes a binary input?
So say smoothing group 1 and 2 would mean you set it to 3 (1 + 2). For just smoothing group 3, set it 4. For smoothing group 1, 2 and 3, set it to 7. Etcetera.
okay, thats one point i didn’t realized until now, thanks you very much Pier…
but there is on thing i don’t understand:
this is the error message it get from max : – Runtime error: Cannot convert value to bitArray: undefined
this means to me, i should convert my value for the smoothinggroup to a bitarray, but i got no glue how to manage this …
any suggestions ???
Huh… The error say the value is undefined… If I’m not mistaken.
So, you should have a proper integer or float to be able to convert it to a bitArray.
I got same problem like STINGRAY_AUT’s. I got 4 groups of face in a object, then used a for loop to assign 1 to 4 SG to each face group respectively. But what I got was group 1’s SG is 1234, group 2’s was 123, 3 was 12 and 4 is 1. Before I accidently saw this thread here, I had no idea that SG needs a binary input and it’s not mentioned by the MAXScript help. Pjanssen, could you please explain this with more details? THANKS!!
You can easily find the binary value with the function Bit.set.
Example, you want to set the bit 25 to true…
You do :
bit.set 0 25 True
It return the integer value when you turn the 25th bit to true using the value 0 as base.
It would return : 16777216
Now imagine I want to add the bit 31 to the above value…
bit.set 16777216 31 True
It would return : 1090519040
That number means the 25th and the 31th bit are true.
And what can also be useful for testing is this function:
function getBitsAsArray bits = (
arr = #{}
for i = 1 to 32 do (
arr[i] = bit.get bits i;
)
return arr;
)
it returns a byte value split out into a bytearray. So you can see which bits are set.
cool explainations, and looking at them isolated, they make sense to me…, but i’m simply not able to transform this to the smoothing group issue
when i look at the line
polyop.setFaceSmoothGroup obj poly SMG add:false
when i want to assign smoothinggroup 4, what must SMG be ?
maybe i’m just to stupid for such kind of tasks…
anyway, thank you very much for spending your time on my problem
Markus
For just smoothing group 4, you have to set the fourth bit of your input. Look at it like this:
4 3 2 1 <- Bit number, or smoothing group if you wish.
8 4 2 1 <- Bit value.
1 0 0 0 <- Bits set. Smoothing group 4.
Resulting integer: 8
1 0 1 0 <- Smoothing groups 4 and 2
Resulting integer: 10 (8 + 2)
1 1 1 1 <- Smoothing groups 1 to 4 set.
Resulting integer: 15 (8 + 4 + 2 + 1)
I’m saying this without reference, so please check this in the maxscript help, but are you sure you input a bytearray for the polygon set?
Try something like this on a mesh with 1 polygon first:
polyOp.setFaceSmoothGroup $ #{1} 8 add:false
Where of course you have the object it should be applied to selected.
Thanks, Pjanssen, thank you, U.S.S. Speed and thanks to you, STINGRAY_AUT, for raising the right question at right timing :). Now I totally understand, and my script works now. THANK YOU GUYS!!