@kbar
I am interested in c4d (also cg) plugin development.
But your requirements are a little bit high for me, especially "Strong proficiency in C++ programming language".
I can use c++ for programming but not strongly. But I can also make a c++ plugin like this:
A part of my code:
Posts made by LingZA
-
RE: Plugin Developer Job opening at Greyscalegorilla
-
Is there any way to get MMB wheel scrolling in viewport?
Is there any way to stop MMB wheel to zoom the camera then get MMB wheel scrolling in viewport in Description Tool?
I need to scroll the MMB wheel in the viewport to change my tool's params?
For example, shift + scroll MMB wheel to increase the value.I know how to get MMB wheel scrolling in GeDialog like in asynctest.cpp. But MMB wheel scrolling can not got in MouseInput() in tools (ToolData, DescriptionToolData).
-
How to dynamically change the "STEP"of "REAL" tool description in c++?
I wanna dynamically control the "STEP"of a "REAl" description
parameter for my tool in c++.
But it is not as easy as the GeDialog in python. -
How to use GetChildren() in c++?
In python, I can op.GetChildren() easily.
But in c++, GetChildren() is under the
MAXON_METHOD.
Because I'm the new to c++, I can not understand the such complex grammar and the usage of this function in c++.
.
Please tell me how to get children of an object by using this function in c++. -
How to press the "Apply" button in the DescriptionToolData?
How to press the "Apply" button in the DescriptionToolData?
For c++ and python.
For python:import c4d def main() -> None: c4d.CallCommand(450000263) # C++ SDK - Pick Object Tool tool = c4d.plugins.FindPlugin(450000263, c4d.PLUGINTYPE_TOOL) tool[c4d.MDATA_INTERACTIVE] = True c4d.EventAdd() if tool is not None: c4d.CallButton(tool, c4d.MDATA_APPLY) c4d.CallButton(tool, c4d.MDATA_NEWTRANSFORM) c4d.EventAdd() print("execute") if __name__ == '__main__': main()
The python code can excute the settings of the tool. But the "Apply" button isn't pressed and disenabled like the manual pressing action to get the realtime update.
-
RE: Which are tool plugin flags for Brush Selection tool, even Move tool?
Thanks, @i_mazlov.
I know what you say. But that is not my question.
I don't make the selection tool but the tools maybe like modeling tools.PLUGINFLAG_TOOL_EVALUATEHANDLES means that I can see and drag the handles of the coordinate system.
PLUGINFLAG_TOOL_SINGLECLICK means that I can select the components (points, edges or polygons) of the object or the object itself.
PLUGINFLAG_TOOL_HIGHLIGHT means that I can highlight the components before I select them to perform a pre-select operation.
PLUGINFLAG_TOOL_SNAPSETTINGS means that I can run the tool with snapping operations.
But I don't know the performance of PLUGINFLAG_TOOL_DRAW_MULTIPLANE, PLUGINFLAG_TOOL_EDITSTATES, PLUGINFLAG_TOOL_SWITCHACTION and PLUGINFLAG_TOOL_NO_TOPOLOGY_EDIT.
But I also want to know the difference between PLUGINFLAG_TOOL_TWEAK and PLUGINFLAG_TOOL_TWEAK_NO_HIGHLIGHT.
You know,
before we use move tool to move sometings, we select them first by using the move tool itself.
before we use modeling tool to make a modeling operation, we select the components by using the modeling tool itself.
That are selection operations of them.
I want to simulate the selection operations like them. -
Which are tool plugin flags for Brush Selection tool, even Move tool?
Which are tool plugin flags abount Brush Selection tool, even Move tool?
I simulate the selection actions about Selection tool, even Move tool in my tool plugins. I want to get clear tool plugin flags about them. -
RE: Undo for InsertUnder() is not right. Why?
Thanks! Sorry, I am so careless that I ignore the message "Needs to be called before the change.".
UNDOTYPE_CHANGE:
Any change to an object, including hierarchy modifications; modification in positioning (object has been moved from A to B), substructures etc. (Needs to be called before the change.)
-
Undo for InsertUnder() is not right. Why?
Undo for InsertUnder() is not right. Why?
The code below:
The operations below:
After executing the script:
After several undo operations:
The first question is that the undo result is not right.
The second question is that the undo times are not right.
There should be one time for undo to get the correct undo result if there is no problem. -
Is it possible to change active view?
Is it possible to change active view via python but "c4d.CallCommand(13640) # Toggle Active View"?
Because "c4d.CallCommand(13640) # Toggle Active View" is used with a click on the view. I can not use python code to change a certain view to be active.
I want to change active view via the view ID from "range(doc.GetBaseDrawCount())". But I can not find the relevant APIs.
I can get the active view from "doc.GetActiveBaseDraw()" but there are no ways to set the active view.
-
RE: Why does "Symbols Parser" not work?
Great!!! It runs.
You are right. Thank you so much!
I think your answer is worth being written in the API document to make the workflow more clear. -
Why does "Symbols Parser" not work?
Why does "Symbols Parser" not work?
The API document is below.
https://developers.maxon.net/docs/py/2023_2/manuals/foundation/symbols.html?highlight=c4d_symbolsI changed "py-fresnel_r13.pyp" in official plugin examples.
Finally, I got the issues.
-
How can I update the deformer when I move the objects in the viewport?
How can I update the deformer like the "Spline" deformer when I move the objects in the viewport?
My splines for my deformer plugin are in the "c4d.InExcludeData" like the below.
I know that the callback function "Draw(self, op, drawpass, bd, bh)" is about the viewport.
But I don't know how to update the deformer when I move the spline objects or its affected polygon objects in the viewport.
My updated contents is same as the callback fuction "ModifyObject(self, mod, doc, op, op_mg, mod_mg, lod, flags, thread)".
-
Is there a "msgId" when I add a child to an object?
Is there a "msgId" in the function "GetDParameter(self, node, id, flags)" in the class "c4d.plugins.ObjectData" when I add a child to an object?
The object is a deformer.
I want to update the function "GetDDescription(self, node, description, flags)" via the function "GetDParameter(self, node, id, flags)" when I add a child to the deformer in the "Object Manager". -
Is there a fixed Manager ID like c4d.CONSTANT?
Does Manager ID change between different c4d versions such as R24, R25 and R26 If Manager ID is based on the options in "Restrict to" in Command Manager.
The Manager ID is explained here.
https://developers.maxon.net/docs/py/2023_2/modules/c4d.gui/index.html#c4d.gui.AddShortcut. -
RE: Is there a successful example of c4d.gui.SplineCustomGui?
@m_adam
Thanks so much!
You are a very professional guy!!! -
Is there a successful example of c4d.gui.SplineCustomGui?
I need a simple and successful example of c4d.gui.SplineCustomGui which has same params as the picture below.
I have tried directly code below. But it can not have the full control of c4d.gui.SplineCustomGui by bc[c4d.constant], and it is without the gui elements, such as "Point X", "Point Y" and so on.
class Dialog(c4d.gui.GeDialog):def __init__(self): compoId = 1000 i = 1 compoId += i self.groId_0 = compoId compoId += i self.spliId_0 = compoId def CreateLayout(self): bc = c4d.BaseContainer() # bc[c4d.SPLINECONTROL_GRID_H] = True # bc[c4d.SPLINECONTROL_GRID_V] = True # bc[c4d.SPLINECONTROL_VALUE_LABELS_H_LEGACY] = True # bc[c4d.SPLINECONTROL_VALUE_LABELS_V_LEGACY] = True bc[c4d.SPLINECONTROL_X_MIN] = 0 bc[c4d.SPLINECONTROL_X_MAX] = 1 # bc[c4d.SPLINECONTROL_X_STEPS] = 0.1 bc[c4d.SPLINECONTROL_Y_MIN] = 0 bc[c4d.SPLINECONTROL_Y_MAX] = 1 # bc[c4d.SPLINECONTROL_Y_STEPS] = 0.1 # bc[c4d.SPLINECONTROL_PRESET_BTN_LEGACY] = True # bc[c4d.SPLINECONTROL_ROUND_SLIDER_LEGACY] = True # bc[c4d.SPLINECONTROL_GRIDLINES_H_LEGACY] = 10 # bc[c4d.SPLINECONTROL_GRIDLINES_V_LEGACY] = 10 # bc[c4d.SPLINECONTROL_MINSIZE_H] = 0.1 # bc[c4d.SPLINECONTROL_MINSIZE_V] = 0.1 # bc[c4d.SPLINECONTROL_X_MIN_TEXT_LEGACY] = "True" # bc[c4d.SPLINECONTROL_X_MAX_TEXT_LEGACY] = "True" # bc[c4d.SPLINECONTROL_Y_MIN_TEXT_LEGACY] = "True" # bc[c4d.SPLINECONTROL_Y_MAX_TEXT_LEGACY] = "True" # bc[c4d.SPLINECONTROL_X_TEXT] = "Density" # bc[c4d.SPLINECONTROL_Y_TEXT] = "Vertex Weight" # bc[c4d.SPLINECONTROL_NEW_NO_HORIZ_LEGACY] = False # bc[c4d.SPLINECONTROL_NEW_NO_VERT_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_GRID_H_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_GRID_V_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_PRESET_BTN_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_ROUND_SLIDER_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_VALUE_EDIT_H_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_VALUE_EDIT_V_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_VALUE_LABELS_H_LEGACY] = False # bc[c4d.SPLINECONTROL_HIDE_VALUE_LABELS_V_LEGACY] = False # bc[c4d.SPLINECONTROL_ALLOW_HORIZ_SCALE_MOVE] = True # bc[c4d.SPLINECONTROL_ALLOW_VERT_SCALE_MOVE] = True # bc[c4d.SPLINECONTROL_OPTIMAL] = True # bc[c4d.SPLINECONTROL_OPTIMAL_X_MIN] = 0.01 # bc[c4d.SPLINECONTROL_OPTIMAL_Y_MIN] = 0.01 # bc[c4d.SPLINECONTROL_OPTIMAL_X_MAX] = 0.01 # bc[c4d.SPLINECONTROL_OPTIMAL_Y_MAX] = 0.01 # bc[c4d.SPLINECONTROL_SQUARE] = False # bc[c4d.SPLINECONTROL_CUSTOMCOLOR_SET] = True # bc[c4d.SPLINECONTROL_CUSTOMCOLOR_COL] = c4d.Vector(1,1,1) bc[c4d.SPLINECONTROL_NO_FLOATING_WINDOW] = True # bc[c4d.SPLINECONTROL_NO_PRESETS] = False self.spli = self.AddCustomGui(self.spliId_0, c4d.CUSTOMGUI_SPLINE, "", c4d.BFH_SCALEFIT|c4d.BFV_SCALEFIT, 0, 0, bc) return True
The second way with description files, I also have tried
https://developers.maxon.net/forum/topic/13499/splinecustomgui-settings-issue/10?_=1653814204664.
But I failed.
If it can have all params like the picture in the second way, I want a successful and simple example including its description files(.res and .h).