Navigation

    • Register
    • Login
    • Search
    1. Home
    2. lasselauch
    3. Posts
    • Profile
    • More
      • Following
      • Followers
      • Topics
      • Posts
      • Best
      • Groups

    Posts made by lasselauch

    RE: How to find the CallCommand id for Redshift 'Convert and Replace with Nodes'

    AFK currently, but I think you can open the "Script Log..." from the Extensions Menu to check the ID's right!?

    posted in Cinema 4D SDK •
    RE: Detect Menu/Manager while hovering...

    Thanks, for the clarification. @ferdinand

    posted in Cinema 4D SDK •
    Detect Menu/Manager while hovering...

    With "Customize Commands..." we are able to "restrict" certain commands to certain "managers" or "menus". I'm wondering if it's possible to detect these managers within a cmd-data-plugin while the mouse is hovering over a certain area.

    Imagine a popup filled with different content based on the currently hovered manager i.e. object-manager, material-manager, take-manager...!

    customize-cmds.png

    Is there a way to detect the underlying context of the mouse via python..?

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    RE: Arranging Objects by order of Object Manager

    I could make a recursive iteration to go through all of the document's objects but that would slow it down significantly...

    Yeah, but that's basically the way to go... Not sure if the following yields faster results:

    def get_next_element(op):
        if not op:
            return
        if op.GetDown():
            return op.GetDown()
        while (not op.GetNext()) and op.GetUp():
            op = op.GetUp()
        return op.GetNext()
    
    def main():
        obj = doc.GetFirstObject()
            
        while obj:
            # act on obj
            print(obj.GetName())
    
            obj = get_next_element(obj)
    

    Always wondered what approach would yield faster results...

    Feel free to do some testing, would love to hear your results. :)

    posted in Cinema 4D SDK •
    RE: Arranging Objects by order of Object Manager

    My guess is that iterating over with enumerate BaseDocument.GetObjects(self) would be efficient enough..?

    For example:

    all_objs = doc.GetObjects()
    for i, obj in enumerate(all_objs):
        # Distance can be whatever float or integer
        your_dist = i * 27
        pos = c4d.Vector(your_dist, 0, 0) 
        obj.SetAbsPos(pos)
    
    posted in Cinema 4D SDK •
    Japanese Language Interface – Problems

    Hi there,

    I'm currently having a japanese customer for my AEC4D-PRO plugin that complains, that the plugin isn't behaving correctly in R23. In older C4D-Versions the plugin seems to behave correctly.

    At first, I thought the problem lies within string encoding. However at further testing, it works for the customer if he changes his "Interface Language" to English. So it's not the typical string encoding when transferring Objects between the two programs.

    I'm actually a bit lost, how this language setup is intertwined with the plugin itself. Sadly, I don't have the time to test the Japanese Language myself, so I thought if anyone has experienced these kind of issues before he or she might jump in and help.

    If you want to test it yourself, feel free to download the 14-day trial here:
    https://aescripts.com/aec4d/

    Thanks so much.

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    RE: Detect closing of Document

    I guess I found a workaround... I cannot show the whole code involved but something along those lines:

    I have a Treeview that stores an absolute path abs_path of different documents... Now, I just check if one of these filepaths is in my open documents paths via: get_all_docs_paths()

    def get_all_docs_paths():
    
        all_docs_paths = []
    
        first = c4d.documents.GetFirstDocument()
        while first:
            folder = first.GetDocumentPath()
            abs_path = os.path.join(folder, first.GetDocumentName())
            all_docs_paths.append(abs_path)
            first = first.GetNext()
        
        return all_docs_paths
    

    If yes, the document is open, if not it is closed.

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    RE: Detect closing of Document

    Thanks, @mp5gosu ...!

    @zipit said in Detect closing of Document:

    The easiest way would be to use some kind of plugin node for that. I currently do not see a way to do this in a GeDialog, but I might be wrong. We will discuss that tomorrow in the SDK Team, to see if the others know a clever way to do that. Just wanted to make sure that you do not run down a rabbit hole with no exit ;)

    Hehe, yeah that's exactly what I thought when looking at MSG_DOCUMENTINFO . Thanks for the quick answer, Ferdinand. Looking forward to your thoughts and ideas...

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    Detect closing of Document

    I basically want to react in my GeDialog if my active document has been closed.
    I'm currently looking at MSG_DOCUMENTINFO but there's no flag for a closed document... one other idea would be to listen to a CallCommand for example via c4d.MSG_DESCRIPTION_COMMAND?

    What would be the best way to approach this..?

    Thanks,
    Lasse

    posted in Cinema 4D SDK •
    RE: Drag and Drop "Command" from Treeview

    @mp5gosu Damn. That's really not the answer I wanted to hear, Robert! :smile_cat:

    posted in Cinema 4D SDK •
    Drag and Drop "Command" from Treeview

    Hey everyone,

    I'm currently developing a treeview-plugin for all my scripts/presets etc.. I was wondering if it is possible to drag and drop items of said treeview directly to my layout.

    I'm currently thinking along those lines:

    In my declared ListItem (obj) I have a property of Instance which can hold the reference to the CommandPlugin for each script.

        @property
        def Instance(self):
            # of course this just a placeholder (but a valid one...)
            return c4d.plugins.FindPlugin(600000174)
    

    In the GenerateDragArray I will create an Array with my said Instance/Reference, also I've tried setting different flags for GetDragType to c4d.DRAGTYPE_COMMAND etc....

        def GenerateDragArray(self, root, userdata, obj):
            if obj.IsSelected:
                return [obj.Instance]
            return None
    
        def GetDragType(self, root, userdata, obj):
            return c4d.DRAGTYPE_COMMAND
    
        def SetDragObject(self, root, userdata, obj):
            return obj.Instance
    

    Drag and Drop "Command" from Treeview

    ...but, sadly it's NOT working as I would expect... :)

    Is this possible with python in general, or a limitation? What am I missing?

    Thanks,
    Lasse

    posted in Cinema 4D SDK •
    RE: developers.maxon.net – Offline?

    Had one aswell....

    explorer_2020-11-23_12-19-58.png

    a rather old one... :face_with_rolling_eyes: ...haha.

    posted in General Talk •
    RE: developers.maxon.net – Offline?

    :construction_worker: yep, back online... here in hamburg. :grin:

    posted in General Talk •
    developers.maxon.net – Offline?

    Hi there,

    https://developers.maxon.net/ appears to be offline? Is this just a short outage..?

    firefox_2020-11-23_10-37-30.png

    Cheers,
    Lasse

    posted in General Talk •
    RE: Rename object by filename

    @zipit said in Rename object by filename:

    PS: @lasselauch I know that you meant this in a light-hearted manner, but "let-me-google-that-for-you" can be misconstrued. People have different information needs and things that seem trivial or obvious to you, are not for them. Programming can be a confusing topic and we would like this to be a welcoming place for everyone and subsequently stay away from all "RTFM"-notions.

    Yep, definitely meant in a light-hearted manner!!! :)
    You're totally right.. that's why I provided the correct answer.

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    RE: Rename object by filename

    Of course there are a lot of ways to spin this, but I guess in most cases this should be enough:

    # import os
    import c4d
    
    def main():
        if not doc:
            return
        docname = doc.GetDocumentName()
    
        # docname, _ = os.path.splitext(docname)
        docname = docname.replace('.c4d', '')
        
        null = op.GetMain()
        if not null:
            return
    
        null.SetName(docname)
    

    Download: null-docname.c4d

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    RE: Rename object by filename

    http://letmegooglethat.com/?q=split+extension+from+filename+python

    :grin:

    posted in Cinema 4D SDK •
    RE: Rename object by filename

    You just need to add a python tag to your object and paste the following code.

    Simple as that:

    import c4d
    
    def main():
        if not doc:
            return
        doc_name = doc.GetDocumentName()
    
        null = op.GetMain()
        if not null:
            return
    
        null.SetName(doc_name)
    

    Download here: null-docname.c4d

    Hope it helps.

    Cheers,
    Lasse

    posted in Cinema 4D SDK •
    RE: Plugin not loaded in R23 on macOS

    Just FYI – I just double checked both customers are running Mac OS 10.13.6

    posted in Cinema 4D SDK •
    RE: Plugin not loaded in R23 on macOS

    Oh, nice that is something to work with..
    I'll try to contact the customer with that info!

    Thanks, @r_gigante

    posted in Cinema 4D SDK •