Jump to content


Regular Member
  • Content Count

  • Joined

  • Last visited

  • Days Won


C4DS last won the day on December 29 2018

C4DS had the most liked content!

Community Reputation

269 Good

About C4DS

  • Rank
    Cafe Regular
  • Birthday 06/04/1970

Profile Information

  • First Name
  • Last Name
  • C4D Ver
    R20.026 Studio
  • Location
  • Interests
    Electric guitars, Virtual Instruments, Radio controlled electric airplanes, 3D animation story telling, Video editing, C4D plugin development

Recent Profile Visitors

8,643 profile views
  1. I have been a Gold Support member for a long time. Just noticed I don't longer seem to carry the Gold Support tag. Which means it probably ran out. Haven't received a notification to renew, or anything similar. Still, as far as I remember, being a Gold Support member I still had ads popping up on every page, and between the first and seconds posts of each thread. As such, I am wondering, before renewing my membership, what would Gold Support entitle in the sense of ads free experience? Or would it mean an additional fee would be required on top of the Gold Support purchase? Just wondering.
  2. Both you and @RobertL should have received the updated version. I have added some documentation regarding the script, and even added a script example. Looking forward to both your feedback, before providing the update to other customers. As for Seamilar, PolyGnome (as well as Dials), they're currently still 15% off, and EasyUV is at 40% discount ... for the whole month of February.
  3. Yes, every output port requires it's variable to be defined as global. I was a little too fast with my response for the second script, and I omitted the 'global', as well as forgetting the namespace 'c4d' in front of the rotation attribute. As such, the working script should be # construct a matrix from Position and Rotation, # input ports are Position and Rotation, output port is NewMatrix import c4d def main(): global NewMatrix NewMatrix = c4d.utils.HPBToMatrix(Rotation, order=c4d.ROTATIONORDER_DEFAULT) NewMatrix.off = Position As you figured out by now, I hadn't tested the script before submitting ;-)
  4. As mentioned, name your input and output ports accordingly. These port names are used in the scripts. If these don't match you'll get the error you describe.
  5. OK, got it. As I thought, the input ports are "Position" and "Rotation", both of type vector, while the output port is "NewMatrix" of type matrix. So, when replacing the COFFEE node with a Python Node you should create the appropriate input and output ports. With the first scripts the input and output ports are floating point values. By default, when you create a Python node in Xpresso you get 2 input ports ... of type Real (or floating point), and an output port, again of type Real. What you need to do for the second script is create a Python node, remove the input and output ports, and create new ones of the appropriate types. I don't think you can change the port type (at least you could not in the past), therefore you need to remove the existing ports and create new ones. Name them accordingly and you'll be set!
  6. You could google this and find a better answer, but I'll try my best at explaining it. The "->" you see in COFFEE and other programming languages (C++), is a way to access an object's member or function. In the second script there is this "InMatrix" variable which refers to a matrix object, an instance of a matrix class. Be careful with "object". In this context it isn't a Cinema 4D mesh object or null object, nor deformer, nor generator, ... The object here is a "container" which holds some data and functions (members and methods in C++). The matrix class has a GetClone function which allows to create a copy of itself and pass it along. InMatrix->GetClone() thus means that from our InMatrix object, we call its internal function called GetClone, and the resulting copy is assigned to NewMatrix, a new object instantiated from the matrix class. EDIT: Well, for completeness. In C++ (other languages probably as well, but I am most familiar with C++) to access members and methods of an instantiated class or structure one can use "->" or sometimes just a dot. myObject->member myObject->method() - or - myOtherObject.member myOtherObject.method() It all depends how the object was instantiated, as a pointer or not. But I guess this all is getting beyond the scope of this forum.
  7. I can't seem to find the second COFFEE node you are referring to. All I see are 7 COFFEE nodes with the first script.
  8. Here is the first # Get the "shortest" angle between two vectors, provided via input ports Input1 and Input2, # The result is sent to output port Output1 import c4d def main(): global Output1 Output1 = c4d.utils.GetOptimalAngle(Input1, Input2, c4d.ROTATIONORDER_DEFAULT) And the second one As far as I can see this script is meant to create a matrix from a rotation and position, provided via input ports called Rotation and Position. The output port is then NewMatrix. I am not 100% sure this is what it is supposed to be, but without the actual scene file where the Xpresso and nodes can be investigated from, it is hard to tell. So, I'll go with my first assumption. The code for this is then # construct a matrix from Position and Rotation, # input ports are Position and Rotation, output prt is NewMatrix import c4d def main(): NewMatrix = c4d.utils.HPBToMatrix(Rotation, order=ROTATIONORDER_DEFAULT) NewMatrix.off = Position
  9. I will contact you when I get a release version ready. And will provide you with a link from a gmail account ... no blocking out anymore.
  10. It's Sunday morning, 6 AM. I just woke up with a possible solution to your request. I still need to see if I can get this solution implemented. But I guess I will have to get rid of the sticky key code as it kind of interferes with this new multi toolset shortcut solution. Since the sticky key didn't behave as expected on every version of Cinema 4D or OS platform, I was already more or less inclined to remove this anyway. Will report back when I have more news ... Edit: OK, the concept does work, but I had some trouble with the assignment of the different shortcuts. Basically what needs to be done is for the user to create a script per wanted toolset shortcut. Then assign a shortcut to each of these scripts ... and that's where Cinema didn't cooperate. It would allow me to assign a shortcut only to the last script of the set I had created. But restarting Cinema 4D after having created all the scripts does seem to do the trick. The script is simply passing the toolset number to Dials, so all scripts are equal except for the toolset number # Dials - toolset shortcut helper # 'TOOLSET' refers to the toolset number you would want to activate # Any number between 1 and N, where N is the total number of toolsets available. # Using toolset number 0 will activate the last used one. # When a toolset number is provided out of range the plugin will revert to using 0 # # Assign a shortcut to this script to activate the required Dials toolset # (for this to work you'll need Dials v1.2) import c4d TOOLSET = 1 if __name__=='__main__': c4d.CallCommand(1041321, TOOLSET) The above script uses TOOLSET = 1 to activate the first toolset, simply create different of these scripts, replacing the '1' with the required toolset number. @RobertLLet my know if you want to test this new version.
  11. Short answer: you can't. Cinema 4D is designed (as far as I know) to use a single shortcut for a single plugin. Before implementing the current toolsets via the middle ring, I researched possible solutions to provide multiple dials. One solution was to provide a command plugin per dial, which would allow users to define separate keyboard shortcuts per dial. This would also mean that the number of dials was predefined, as each dial would require a unique plugin ID obtained from MAXON. Furthermore, this would mean that the number of dials (thus toolsets) could not be created dynamically At that point, I assumed people would prefer having a single plugin, instead of one entry per dial, and be able to dynamically create the number of dials they wanted. As mentioned above, for each dial a separate plugin ID is required. I could provide 5, 10, 20 entries. Then someone comes along and requests 21 ;-) I would thus much more prefer a dynamic solution ... which I currently do not have. Let me sleep over it for a few nights, and I might come up with something. Nothing promised.
  12. There already are many tutorials available on the web related to UV unwrapping. Some are short, others more elaborate. Barely touching the subject or digging deep into the technical details. This cub, however, is aimed at the beginners who might have questions, how and when to apply particular seams ... and why. Tutorials are fine, they show you how to get things done. But when you have this particular mesh object, not matching any of the subjects handled in any tutorial ... how do you begin? With this club I hope to provide a starting point for those beginners, taking their first step into the world of UV unwrapping. Seasoned users are still welcome ... please share your knowledge. What this place is NOT meant to be: a simple collection of links to tutorials available on the web. Additionally, while I have written a few plugins and script related to UV editing, I don't consider myself an UV expert. But I will try to do my best at helping out, where possible.
  13. The free version of the plugin, available to download here at the C4DCafe, is not a demo version but has limited features. The fading in of the icons one by one is a limitation of this free 1.0 version. When you purchase the paid version (updated to 1.1), next to support you also obtain additional features such as the possibility to create multiple dials, as well as favorites per tool. This version does not have the limitation of fading in icons one by one. Features of the paid version are available in the demonstration video I provided a few posts back (https://www.c4dcafe.com/ipb/forums/topic/103440-dials-was-wheel-of-tools/?do=findComment&comment=687595)
  14. Here is a quick demonstration video I made. It shows most of the available tools in action, hoping it provides an idea of the features available. I don't have demo versions of my plugins, except for Dials. While I understand people would like to try out to see if a plugin does fit one's workflow, it isn't always manageable to make a demo version without crippling the plugin.
  15. I am planning to create some videos to demonstrate the available features of this plugin. Intended for beginners, as this is whom this plugin was focused for. However, since EasyUV is heavily based on Seamilar, the basic UV editing (move/rotate/scale) of points, edges, polygons and island is similar. You could thus check out the video created for Seamilar to get an idea how these tools are used. The original move, rotate and scale philosophy from the native core UV tools was kept. As such, these 3 operations use 3 different tools, each with their icon and Attribute Manager settings. In a future update I intend to merge these 3 tools into a single tool, as I myself have encountered scenarios where it would optimize the workflow in a great way having this single transform tool instead of the current separate actions. As said, this is future, so this should not be taken into account for your current decision making to use this plugin or not. As for the EasyUV tag versus the regular UVW tag: note that the EasyUV tag only stores the information related to seams and UV islands, the actual UV editing does happen on the regular UVW tag.



C4D Cafe is the largest CINEMA 4D community. We provide facilities for discussion, showcasing and learning our favorite software :)
  • Create New...