ah got it, thanks for the quick explanation!
so without super i would call SetFloat in an endless loop, because it returns itself.
Best posts made by datamilch
-
RE: set only the value of a dialog gadget
-
how to track if the document has changed?
hi there,
i have a command plugin that is dependent on the state of the active document. so i want to track if the document has changed.
there seems to be no dedicated core message. so i tried the following. but it gives me "basedocument is not alive", which makes senes in a way. but how can i make it work?
class MyDialog( ... doc_old = None ... def CoreMessage(self, cid, msg): doc = c4d.documents.GetActiveDocument() if cid == c4d.EVMSG_CHANGE: if doc != self.doc_old: print ("doc changed") self.doc_old = doc
thanks,
sebastian
Latest posts made by datamilch
-
RE: issue with inserting fieldlayers in r2024
hi ilia @i_mazlov,
thaks for the advice about threading and the dummy document and the fishy part.I continued testing the last days and noticed that it seems to work, when i insert a clone of the fieldlayer.
-
issue with inserting fieldlayers in r2024
hi there,
I'm having a weird issue with fieldlayers in r2024.
I want to add a layer to a fieldlist. In r2023 it worked quite fine. Now I get a reference Error.
But when I print anything, the error is not raised.
In my example I use a python generator, but it seems to happen with a python tag, too.
Or am I using/inserting the fieldlayers wrong?cheers sebastian
python generator :
import c4d def main() -> c4d.BaseObject: obj = c4d.BaseObject(c4d.Ocube) res = c4d.utils.SendModelingCommand( c4d.MCOMMAND_MAKEEDITABLE, [obj], c4d.MODELINGCOMMANDMODE_ALL, doc = doc ) if not res: print("error") else: obj = res[0].GetClone() vertex_tag = obj.MakeVariableTag( c4d.Tvertexmap, len(obj.GetAllPoints()) ) vertex_tag.SetName( "vertex_highlight_reinforce" ) vertex_tag[c4d.ID_TAGFIELD_ENABLE] = 1 fields = vertex_tag[c4d.ID_TAGFIELDS] f_layer_1 = c4d.modules.mograph.FieldLayer( c4d.FLquantize ) fields.InsertLayer( f_layer_1 ) vertex_tag[c4d.ID_TAGFIELDS] = fields #print ("") # with print active, no error will be raised return obj
results in the following error:
ReferenceError: the object 'c4d.modules.mograph.FieldLayer' is not alive -
RE: Create folder in Volume Builder
hi @i_mazlov,
thanks for the answer. good to know about this status / limitation.
for my current case I found a solution without folders.. -
RE: fieldlayer with variable tag
found the solution ... the corresponding type is called: FLweight
-
fieldlayer with variable tag
hi there,
I'm trying to achieve the following:
A python generator that creates an object with a vertex map (A). vertex map (A) is then inserted in a second vertex map (B) to be able to blur (A) with the mode 'average'. (If there is another way to blur a vertex map directly in (A) this would be great, too) You can see my test-setup without the python generator in the screenshot and it works so far.Now with python I have to create fieldlayers with the correct type to make it work. But it looks like the Variable Tag is missing in the list of types. I hope it's not a limitation of of the api.
My test-file is attached. Here is the code of the generator:
from typing import Optional import c4d doc: c4d.documents.BaseDocument # The document evaluating this python generator op: c4d.BaseObject # The python generator hh: Optional["PyCapsule"] # A HierarchyHelp object, only defined when main is executed def main() -> c4d.BaseObject: null = c4d.BaseObject( c4d.Onull ) circle = c4d.BaseObject( c4d.Osplinecircle ) circle[c4d.PRIM_CIRCLE_RADIUS] = 150 cube = c4d.BaseObject( c4d.Ocube ) cube[c4d.PRIM_CUBE_SUBX] = cube[c4d.PRIM_CUBE_SUBY] = cube[c4d.PRIM_CUBE_SUBZ] = 40 vertex_tag = cube.MakeTag( c4d.Tvertexmap ) vertex_tag[c4d.ID_TAGFIELD_ENABLE] = 1 fields = c4d.FieldList() fields.Flush() f_layer_1 = c4d.modules.mograph.FieldLayer( c4d.FLspline ) f_layer_1.SetLinkedObject( circle ) f_layer_1[1009] = 1 # distance mode = radius f_layer_1[1003] = 50 # radius f_layer_1[1005007] = 99 # inner offset fields.InsertLayer( f_layer_1 ) vertex_tag[c4d.ID_TAGFIELDS] = fields displacer = c4d.BaseObject( c4d.Odisplacer ) shader = c4d.BaseShader( c4d.Xcolor ) displacer.InsertShader( shader ) displacer[c4d.ID_MG_SHADER_SHADER] = shader fields_displace = c4d.FieldList() fields_displace.Flush() f_layer_2 = c4d.modules.mograph.FieldLayer( c4d.FLpolygonobject ) # should be type variable tag f_layer_2.SetLinkedObject( vertex_tag ) fields_displace.InsertLayer( f_layer_2 ) displacer[c4d.FIELDS] = fields_displace circle.InsertUnderLast( null ) cube.InsertUnderLast( null ) displacer.InsertUnder( cube ) return null
-
Create folder in Volume Builder
hi there,
i am trying to add a folder/group to the object list of a volume builder.
but i have no idea how. there is nothing in the the documentation and no examples either.
is this even possible?as an alternative i could probably nest multiple volume builders, but folders would be more elegant i think.
the current test code:
def main() -> None: # create objects null = c4d.BaseObject( c4d.Onull ) cube = c4d.BaseObject( c4d.Ocube ) hole = c4d.BaseObject( c4d.Ocylinder ) hole[c4d.PRIM_CYLINDER_HEIGHT] = 300 # create volume builder vb = c4d.BaseObject( c4d.Ovolumebuilder ) vm = c4d.BaseObject( c4d.Ovolumemesher ) # insert into scene doc.InsertObject( null ) cube.InsertUnderLast( null ) hole.InsertUnderLast( null ) vm.InsertUnderLast( null ) vb.InsertUnderLast( vm ) # insert into volume builder vb.AddSceneObject( cube ) vb.AddSceneObject( hole ) vb.SetBoolMode( 1, c4d.BOOLTYPE_DIFF ) c4d.CallCommand(100004748) # unfold all c4d.EventAdd() return if __name__ == '__main__': main()
-
RE: Accessing Parameters of Filters in a Volume Builder
Oh shit! I just realized the filters exist as objects in c4d ... * facepalm *
I suppose this will resolve my problems for now.Should I delete the topic?
-
Accessing Parameters of Filters in a Volume Builder
Hi there,
I'd like to access some parameters of the filters in a Volume Builder, like 'dilate and erode > offset' or the fields parameter of the smooth filter. But I don't know how.
There is nothing really in the documentation or the forum.The only thing related filters, that I found, was 'volume.SendVolumeCommand()' but suppose, this is not meant to be used with the volume builder.
VolumeBuilder.GetSettingsContainerForIndex() will return None for filter layers - but that's also what the documentation says. I attached a file to demonstrate this.def main() -> None: settings = op.GetObject() volume_builder = settings[c4d.ID_USERDATA,1] for i in range( volume_builder.GetInputObjectCount() ): bc = volume_builder.GetSettingsContainerForIndex(i) print (bc) # returns: None # the filter layer <c4d.BaseContainer object at 0x0000024296092D40> # the cube object
When I drag the parameter, that I want to change, in the console it is called 'SDFDilateandErode[c4d.ID_VOLUMEFILTER_RESHAPE_OFFSET]' but again, I have no idea how to access it.
Help would be much appreciated.
-
RE: Prevent material preview update
hi @ferdinand,
thanks for the information.
found a workaround, that is good enough so far. I use the 3d-gradient in texture space and transform the texture tag matrix as I need it. the change in color will not occur that often. -
RE: Set value of a fieldlayer parameter
hi @ferdinand,
this solved it, thanks! I suspected, that I would have to write back the data, as in many other cases. but I didn't know how exactly.As for the executable code: will do so, next time!
cheers Sebastian