How can I set an Attibute to an Tag



  • 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



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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.
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 09/11/2011 at 11:35, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    The solution is:

    obj.SetPhong(1,1,0.610865238)

    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 Confused. I'll fix it.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    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. _


Log in to reply