no worries, the first line is so big because of a stray "=" on the next line, underlining the first to be interpreted as a heading.
I'll move this thread to the General Programming & Plugin Discussions category, because in the end C4D does not provide any means to provoke UAC, nor do we deem it necessary inside our API as it is a pretty system specific thing. Yet, the discussion might lead back to C4D related questions, and then I'll either happily move it back or we'll have a new thread in the Cinema 4D Development category.
In general I think, it would probably be better to convince your users to install the plugin into either the plugins folder in the "user folder" or even (assuming R20+) a completely separate directory added to the users prefs.
Another thought, while definitely possible with Python, I'd say an update mechanism should change/replace files while the main application is running. After all you can not be completely sure, which files the application decides to lock at certain points off time, in which case your updater would probably run into issues. My recommendation is to rather update by restarting the main app (for C++ it's inevitable anyway).
CallCommand() is exactly the same as a user choosing a command from the menu or clicking a palette button. So, indeed using CallCommand() most likely involves the creation of an undo step, and there no means to avoid. So, as soon as your code creates additional custom undo steps or makes use of CallCommand() multiple times, multiple undo steps are inevitable.
The only workaround would be to do the work done in a command manually. For certain commands it may be easily achievable as the API provides functions toi achieve the same directly, for other (and unfortunately most) commands it will involve more work, up to the point of re-engineering the internals of one of our commands.
This does not belong here. This site is about developing plugins and the SDK in general.
You may want to visit the support website
By the way, if you own C4D R15, you already have TeamRender available. Just run your installation disc on a node of your choice and select TeamRender Client.
Hi Shir, thanks for following up and providing your additional info.
Showing parameter in the Attribute Manager or a custom icon in the Object Manager is not such a big issue: you can start looking at Py-RoundedTube which is an ObjectData derived plugin where all such a stuff (and more) is shown.
That said, the real question is instead to understand what your rig is actually doing and see if it's reasonable to implement the Xpresso functionality from a set of "primitive" functions you implement in your plugin or if would be instead easier to programmatically recreate the Xpresso rig in an XpressoTag then attached to the object generated by your plugin.
Actually this assessment can't be done from here where the final functionality and the complexity of your Xpresso network is unknown.
So far I do see three approches:
start on your own, step-by-step, dissect the code from the example I mentioned above and try to move your steps alone
outsource the task to some paid developer
call for volunteers in our very helpful PluginCafe community.
I'm sorry not be more helpful but, as said in the first post, we can't deliver turn-key plugins or scripts but rather help our customer to learn from our resources.
i see. thx, nevertheless.
well, as said, the only way to avoid that collision seems to be: put the plugins into the plugin-folder of the main application.
while discussing the other part of my problem (see symbolcache-topic) on other forums (the german c4dnetwork, that is), it became apparent, that other ppl also do have those collision-messages with r20 - and they, too, do not experience those plugins to be not working.
if at any time this "problem" should become of interest for you, let me know, if there's something that i could do/deliver/add any detail, to support you in your efforts.
Hi @cmpxchg8b and @a_block ,
I don't know much about matrix, but here is what I found.
If the point with arrow should rotate to aim, then all the possible position of the point must lay on the sphere surface which sphere's center is the parent object.
And one point and a vector can form a line in space.
So the question becomes a line-sphere intersection problem.
After solving the equations, we can get 2 points: original point and transformed point(s).
After that, we can find the transform matrix between 2 points.
welcome in our small developer forum.
Unfortunately, it's not the right place to discuss issues with MAXON Labs plugins. This forum is really focused on discussing development related topics with 3rd party developers. The comment you posted on MAXON Labs directly already was the right approach.
The thing with MAXON Labs is, that these are all side projects of our developers, often done in spare time. As the page states, MAXON does not promise any support or future maintenance. With that said, usually our developers provide support nevertheless, just because the want these projects top work ok. But then it also heavily depends on their current workload. I made the developer aware of the issue and it can be reproduced (which is always the first step to a fix), but I can't make any promises when he might find the time to look into it.
you might have to add the pyp file path to the system path using:
in Cinema 4D R20 the environment variable C4D_PLUGINS_DIR has been removed.
It has been replaced with g_additionalModulePath. You can use this command also as a command line argument.
See Environment Variables.
Please notice that you can mark your post also as a question. See Q&A New Functionality.
Set Driven Keys is just some workflow to create an Xpresso setup connecting two parameters. This has nothing to do with scripting or CallCommand().
Can you maybe explain somehow differently what you want to achieve?
Hi! You could go for CTracks via Python. You'd have to get the track for a position parameter, for example, or create one, then get curve, then add keys. Later, you could simply range map it back to your Xpresso rig. it It's definitely doable!