• c4dpy crashes

    python r20 windows
    4
    1
    0 Votes
    4 Posts
    694 Views
    P
    Ok, I will give it a try and let you know. Thanks.
  • Retrieve the World Rotation of a Selected Edge?

    r20 python
    4
    0 Votes
    4 Posts
    1k Views
    ManuelM
    hello, To answer this question if someone want to do it by code. import c4d from c4d import gui # Welcome to the world of Python # Main function def main(): #get the selected object op = doc.GetActiveObject() if not op: raise TypeError("there's no object selected") if not op.IsInstanceOf(c4d.Opolygon): raise TypeError("obj should be a polygon object") #setup neighbor nbr = c4d.utils.Neighbor() nbr.Init(op) #get the selected edge bs = op.GetSelectedEdges(nbr,c4d.EDGESELECTIONTYPE_SELECTION) #maximum number of edge should be number of polygon * 4 sel = bs.GetAll(op.GetPolygonCount() * 4) #get all polygon vadr = op.GetAllPolygons() #init point a and b index to -1 for error check a = b = -1 #initialise a counter to check in sel array. countEdge = 0 #we can check now every edge to find the corresponding points. So for each polygon for i in xrange(op.GetPolygonCount()): #get the polygon information pli = nbr.GetPolyInfo(i) for side in xrange(4): # Test all 4 sides of a polygon # Only proceed if edge is marked # and edge really exists (for triangles side 2 from c..d does not exist as c==d) if pli["mark"][side] or (side==2 and vadr[i].c == vadr[i].d): continue #if the edge is marked as selected in our sel array if sel[countEdge]: if side==0: a=vadr[i].a; b=vadr[i].b elif side==1: a=vadr[i].b; b=vadr[i].c elif side==2: a=vadr[i].c; b=vadr[i].d elif side==3: a=vadr[i].d; b=vadr[i].a countEdge +=1 if a == -1 or b == -1: raise ValueError("points index can't be negatives") #get all points array points = op.GetAllPoints() #Get the direction of the edge in global coordinate (multiply the points'vector by the matrix of the object) opmg = op.GetMg() #i've picked a direction from point a to point b so the angle could need to be reverted. dirVector = points[b]*opmg - points[a]*opmg #normalize a vector is often a good idea. dirVector.Normalize() #transform the vector to hpb note the result is in radian hpb = c4d.utils.VectorToHPB(dirVector) #transform radian to degree hpb.x = c4d.utils.RadToDeg(hpb.x) hpb.y = c4d.utils.RadToDeg(hpb.y) hpb.z = c4d.utils.RadToDeg(hpb.z) print "the edge is poiting to",dirVector,"the corresponding angle is", hpb # Execute main() if __name__=='__main__': main() Cheers Manuel
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    3 Views
    No one has replied
  • Saving & Loading User Preset

    3
    0 Votes
    3 Posts
    657 Views
    P
    Hi Maxime, thank you very much! Good to know. I would otherwise searched forever. Cheers, PdZ
  • Cinema Gradient, weird behaviour

    r20 sdk python
    7
    0 Votes
    7 Posts
    1k Views
    M
    Don't feel sorry yes this is the issue and since Knot ID are not ordered from right to left but from creation order its why it's confused you. Moreover, using a for loop will make way more sense and help you to avoid this kind of stuff. grad1 = shdr1[c4d.SLA_GRADIENT_GRADIENT] grad2 = shdr2[c4d.SLA_GRADIENT_GRADIENT] for knotId in xrange(grad1.GetKnotCount()): knot = grad1.GetKnot(knotId) grad2.InsertKnot(col=knot['col'], pos=knot['pos'],index=knot['index']) grad2.FlushKnots() shdr2[c4d.SLA_GRADIENT_GRADIENT] = grad2 Finally, a BaseShader is derived from BaseList2D which is derived from C4DAtom that mean you can use GetClone to retrieves a clone of this shader so your code can look like. import c4d def main(): mat = doc.GetFirstMaterial() colorShader = mat[c4d.MATERIAL_COLOR_SHADER] if colorShader is None: return copyColor = colorShader.GetClone() mat[c4d.MATERIAL_DIFFUSION_SHADER] = copyColor mat.InsertShader(copyColor) mat.Message(c4d.MSG_UPDATE) mat.Update(True, True) c4d.EventAdd() # Execute main() if __name__=='__main__': main() Cheers, Maxime.
  • How to keep data in tag plugin even if restart Cinema 4D

    python
    7
    0 Votes
    7 Posts
    1k Views
    M
    Please consider to sets the topic as solved if it's the case. Cheers, Maxime. EDIT: I've done it, but feel free to set it back to Open if you feel the need to ask more questions.
  • Make Objects Editable (Streamlined)?

    r20 python
    5
    0 Votes
    5 Posts
    1k Views
    ManuelM
    Just to add some side notes : SendModelingCommand is waiting for a list of objects in case you want to execute that command on several objects. In your case, you only got one element in your list. You can have more informations about list here
  • Node-Based Materials

    r20 sdk windows
    6
    0 Votes
    6 Posts
    1k Views
    M
    As stated before, we are working on it and it will be released in the future. I can't say more. Regarding your question @Aaron this will be possible.
  • Buttons ids

    python
    2
    0 Votes
    2 Posts
    778 Views
    ManuelM
    Hello, there's no real list where you can find easily those IDs. @m_adam came with this idea : open the Script log (menu script > script log) and click the button you want to call. in the console you will see something like c4d.CallButton(tool(), c4d.MDATA_NEWTRANSFORM) so you know that the ID is c4d.MDATA_NEWTRANSFORM Another place to look for, is the folder ressource/modules where you can find the files .res that build the ui. (using your OS search function will help a lot) Openning those file you will find the information BUTTON MDATA_NEWTRANSFORM { FIT_H; } and you can maybe open the file with the same name with the extention .h where you will find the id MDATA_NEWTRANSFORM = 701, // Button Other than that, there are the enums on the documentation like this page but it's not really "user friendly" Let me know. Cheers Manuel
  • Dialogue Box/Manager through Plug-in vs Vanilla Script?

    r20 python
    5
    0 Votes
    5 Posts
    939 Views
    B
    @m_adam Thanks for further clarification specially the catch with the dialog's on the script. Will now closed the thread. Have a great day ahead!
  • Cinema 4D R20.059 bug with many RegisterShaderPlugin() calls

    r20 windows c++
    7
    0 Votes
    7 Posts
    3k Views
    A
    Hi Riccardo, I think the issue is solved because there is no any issue. Some not good methods of software distribution just confused us. Btw, what benefits different parameters of SetPluginPriority() give to us? For example the xdll has several plugins like materials, shader, tags and renderer. Even some icons with plugin ids. What priority is better to use in this case? I see https://developers.maxon.net/docs/cpp/2023_2/page_manual_module_functions.html For example, what is C4DPL_INIT_PRIORITY_ADVANCEDRENDER: Does it give higher thread priority during some PV rendering task? Or does it just load the plugin before other renderers and give the chance to lock system resources before others?
  • Output Current Sound Track Name

    python r20
    12
    3
    0 Votes
    12 Posts
    3k Views
    S
    Hello, it seems you just write the name of the last track into your user data field: obj[c4d.ID_USERDATA,19] = trak.GetName() Since you do not extend that string, it can only show one name. best wishes, Sebastian
  • Access Custom User Data By Name (not by ID)

    r20 python
    5
    0 Votes
    5 Posts
    1k Views
    B
    Thanks for the response @m_adam Have a great day ahead!
  • How to cancel FileLoad error message.

    3
    0 Votes
    3 Posts
    775 Views
    V
    Thanks for the reply! I'll try that, though I thought that SCENEFILTER_IGNOREXREFS would keep xrefs from being loaded, and since my plugin edits the xref path/name, this would not work. But then again, perhaps I assumed wrong. I appreciate the help! By the way, the idea of classification by tags appears to be a good way to escape the messy folding out tree of classification system that we are all used to. I'll use it next time.
  • Updating old code: Vector > LONG

    c++ sdk
    4
    0 Votes
    4 Posts
    638 Views
    fwilleke80F
    Yeah, definitely. When porting old code that I didn't write to new C4D releases, I always add lots of comments, so people who come after me won't have the same problems
  • Source Processor: Platform-dependent function signatures

    c++ r20
    5
    0 Votes
    5 Posts
    841 Views
    fwilleke80F
    It builds, and the source processor does not complain. Thank you!
  • How to use code to control the model

    6
    0 Votes
    6 Posts
    1k Views
    r_giganteR
    Hi pennay, thanks for following up. Our Team's mission is to deliver a punctual and effective support on Cinema SDK related topic, and we usually don't engage in discussion where turn-key solutions are requested. We provide explanations, recommendations and best-practices on the development tools that Cinema 4D comes with, but it's not on us to recommend how to use them to achieve a certain goal. With regard to your further comment on the final goal, considering the range of the topic, I'd start having a look at the network-related APIs - note: it's not completely covered - that Cinema 4D comes with and to come back with more defined questions addressing Cinema API. Hoping to hear from you soon, give best.
  • Convert Joints to Spline (Limited to only 2 with Bezier Handles)

    r20 python
    3
    0 Votes
    3 Posts
    781 Views
    B
    HI @r_gigante Thanks for the response. With regard to 2CV-only Bezier curve: Yes, I only need 2 CV maximum. I understand that it will not interpolate complicated shapes properly but as you can see in my example, it's only a simple shape. Looking at it now. I have a feeling I am biting more than I can chew. I'm not sure I can solve it at the moment given my current knowledge. Will just perform it manually at the moment. Anyhow, thanks for responding. Have a great day ahead!
  • The python SDK is running in error

    sdk c++ python
    2
    1
    0 Votes
    2 Posts
    502 Views
    r_giganteR
    Hi panney, thanks for reaching out us. With regard to the issue you're experiencing, it's pretty likely that the cause is a different revision between the c4dpy executable and the Cinema 4D revision. Please be sure that they both matches (20.059 c4dpy is available here[URL-REMOVED]). Last but not least, here you can find more detail on the c4dpy executable. Best, R. [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.
  • access sound attributes using python API

    r20 python
    7
    0 Votes
    7 Posts
    2k Views
    M
    Hey @mrittman, i cant find the id names in documentation but i think CID_SOUND_START would be the timecode of when the audio starts (notice you are assigning a BaseTime object to it) CID_SOUND_NAME which i'm using is the audio file path. My application is taking the audio file path and the image sequence output (as defined by the render output settings) and combining them via a subprocess using ffmpeg. If there was a way i could do it straight through c4d id prefer that! Mainly cos ffmpeg is a mission! especially when you need to shift/delay audio and what not.