Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 09/11/2011 at 06:49, xxxxxxxx wrote:
Hi all after solving my last Problem (thanks to nux95 )
Here a second Question: How can I define the value of the Phong-Tag? It should bo on an the angle should be 35° (0,61) I catched something out of the Skript log and modified it. But, it does' t work!
def setAllPolygonObjectsPhongTag(doc) : obj = doc.GetFirstObject() while obj: if obj.CheckType(c4d.Opolygon) : c4d.SetActiveTag(c4d.Tphong, 0) <------------ c4d.PHONGTAG_PHONG_ANGLELIMIT=True <------------ c4d.PHONGTAG_PHONG_ANGLE=0.611 <------------ obj.SetBit(c4d.BIT_ACTIVE) else: obj.DelBit(c4d.BIT_ACTIVE) obj = walk(obj)
Does anybody has an idea??? Thanks Rgds
On 09/11/2011 at 07:30, xxxxxxxx wrote:
c4d.PHONGTAG_PHONG_ANGLELIMIT and 4d.PHONGTAG_PHONG_ANGLE are just constant ID (Integer values). You can't just set them to another value (ok, they are not really constant, that's because of Python) and hope this will change the attribute of the tag. How should c4d know what object you mean ? You can use either the comfortable way, using \__getitem\_\_ and \__setitem\_\_, that implement the [] bracket syntax, or the uncomfortable but mor flexible way using a BaseContainer.
# the comfortable way using [] syntax (__getitem__, __setitem__) import c4d import math obj[c4d.PHONGTAG_PHONG_ANGLELIMIT] = True obj[c4d.PHONGTAG_PHONG_ANGLE} = math.degrees(35) # note that this syntax is all equivalent with obj.__setitem__(c4d.PHONGTAG_PHONG_ANGLELIMIT, True) obj.__setitem__(c4d.PHONGTAG_PHONG_ANGLE, math.degrees(35))
# the more flexible but uncomfortable way import c4d import math bc = obj.GetData() bc.SetBool(c4d.PHONGTAG_PHONG_ANGLELIMIT, True) bc.SetReal(c4d.PHONGTAG_PHONG_ANGLE, math.degrees(35)) obj.SetData(bc) # not that when calling `obj.GetDataInstance()` instead # of `obj.GetData()` you obtain the **original** c4d.BaseContainer # instance, so you do not have to call `obj.SetData(bc)` afterwards.
On 09/11/2011 at 09:35, xxxxxxxx wrote:
Thanks for the answer. I have testet al 4 Versions. But nothing happens ??? Here must be a mistake in my Code:
import c4d import math from c4d import gui #Welcome to the world of Python def walk(obj) : if not obj: return elif obj.GetDown() : return obj.GetDown() while obj.GetUp() and not obj.GetNext() : obj = obj.GetUp() return obj.GetNext() def selectAllPolygonObjectsPhong(doc) : print 'selectAllPolygonObjects Phong START' obj = doc.GetFirstObject() while obj: if obj.CheckType(c4d.Opolygon) : print c4d.BaseObject.GetName(obj) #Testausgabe bc = obj.GetDataInstance() bc.SetBool(c4d.PHONGTAG_PHONG_ANGLELIMIT, True) bc.SetReal(c4d.PHONGTAG_PHONG_ANGLE, math.degrees(35)) obj = walk(obj) print 'selectAllPolygonObjects Phong FERTIG' def main() : selectAllPolygonObjectsPhong(doc) if __name__=='__main__': main()
or
import c4d import math from c4d import gui #Welcome to the world of Python def walk(obj) : if not obj: return elif obj.GetDown() : return obj.GetDown() while obj.GetUp() and not obj.GetNext() : obj = obj.GetUp() return obj.GetNext() def selectAllPolygonObjectsPhong(doc) : print 'selectAllPolygonObjects Phong START' obj = doc.GetFirstObject() while obj: if obj.CheckType(c4d.Opolygon) : print c4d.BaseObject.GetName(obj) #Testausgabe obj[c4d.PHONGTAG_PHONG_ANGLELIMIT] = True obj[c4d.PHONGTAG_PHONG_ANGLE} = math.degrees(35) obj = walk(obj) print 'selectAllPolygonObjects Phong FERTIG' def main() : selectAllPolygonObjectsPhong(doc) if __name__=='__main__': main()
or with an error
import c4d import math from c4d import gui #Welcome to the world of Python def walk(obj) : if not obj: return elif obj.GetDown() : return obj.GetDown() while obj.GetUp() and not obj.GetNext() : obj = obj.GetUp() return obj.GetNext() def selectAllPolygonObjectsPhong(doc) : print 'selectAllPolygonObjects Phong START' obj = doc.GetFirstObject() while obj: if obj.CheckType(c4d.Opolygon) : print c4d.BaseObject.GetName(obj) #Testausgabe bc = obj.GetData() bc.SetBool(c4d.PHONGTAG_PHONG_ANGLELIMIT, True) bc.SetReal(c4d.PHONGTAG_PHONG_ANGLE, math.degrees(35)) obj.SetData(bc) obj = walk(obj) print 'selectAllPolygonObjects Phong FERTIG' def main() : selectAllPolygonObjectsPhong(doc) if __name__=='__main__': main()
Sorry asking sutch NOOB questions What am I doing wrong
On 09/11/2011 at 10:51, xxxxxxxx wrote:
Most things in live are so easy
The solution is:
obj.SetPhong(1,1,0.610865238)
and it works
On 09/11/2011 at 11:35, xxxxxxxx wrote:
Originally posted by xxxxxxxx The solution is: obj.SetPhong(1,1,0.610865238)
Originally posted by xxxxxxxx
Glad you found the solution.
Be aware that the first and second parameters aren't numbers, but booleans (True or False, like a checkbox). So you could call SetPhong() like this: obj.SetPhong(True, True, 0.610865238)
And thanks for pointing out this method, its documentation is broken . I'll fix it.
On 09/11/2011 at 13:03, xxxxxxxx wrote:
In your code, obj is not the phong tag, it is still the polygon object. Just like the c4d module does not know what tag you want to affect, when you wanted to do c4d.PHONGTAG_PHONG_ANGLELIMIT = True, the polygon object doesn't know either.
Obtain the phong tag using
tag = obj.GetTag(c4d.Tphong) if not tag: # the object does not have a phong tag continue # go to the next loop tag[c4d.PHONGTAG_PHONG_ANGLELIMIT] = True # ...
_And I have to correct something from above, of course you need to use math.radians and not math.degrees. _