Oh, you've edited your previous message! Thanks! I will try it.
Posts made by yaya
-
RE: Plugin does not appear in Expression on client's Cinema 4D
-
RE: Plugin does not appear in Expression on client's Cinema 4D
I know what is projectdefitnion.txt. I just do not understand how to use the line: AdditionalLibraryDirectories.Win64.Debug =../../curl
And do I need to launch again the buildsdk23.bat right after each time I change this file.
I have not added the static curl library in my project yet. -
RE: Plugin does not appear in Expression on client's Cinema 4D
@ferdinand thank you for you answer.
I was thinking that:- if at the beginning (when I just started to add the curl and openSSL to a code) the code in the VS 2019 worked fine. But after making a build the plugin does not loaded in Cinema, throwing an error about missing dlls.
But, if I managed to fix it just via:
- adding few dlls (libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll)
- to Windows/System32 and by editing system variables...
...But in this case the plugin does not work on the client's side, because of:
- clients do not have that dlls on their side,
Then:
- I can "simply" make the plugin work on the client's side just (somehow) adding missing dlls => to a plugin's res/libs and shipping them with the plugin.
I was thinking it is easy to do. But if you say that it is not (or as I understand), then I will try your solution. Which seems harder for me because my lack of knowledges.
F.e. I did not understood how to set up an exact path in the projectdefitnion.txt via that command. If f.e. I have this text in the projectdefitnion.txt:Platform=Win64;OSX Type=Solution Solution=\ plugins/cinema4dsdk;\ plugins/maxonsdk.module;\ plugins/microsdk;\ plugins/ragdoll
where the last line means the root folder of my plugin.
And if I need to include "curl" folder via your line:AdditionalLibraryDirectories.Win64.Debug =../../curl AdditionalDependencies.Win64.Debug =libcurl_a_debug.lib AdditionalIncludeDirectories=../../curl
where "curl" is a folder exactly in "ragdoll" and the "libcurl_a_debug.lib" is a file directly in the "curl"
So how to edit the line accordingly? I mean all that "../..." :AdditionalLibraryDirectories.Win64.Debug =../../curl
-
RE: Plugin does not appear in Expression on client's Cinema 4D
@ferdinand Yes, I will not ship the debug version of dlls. It is just for testing.
But are you sure that your that you wrote me right? Your hint is about the linking of static library but libcurl_a_debug.lib does not work for me.
Or did you mean that if I do as you described above it, the error 1>LINK : fatal error LNK1104: cannot open file 'curl/libcurl_a_debug.lib'. - will disappear? Then thank you about this solution, in this case I will need to get back again to a static library (which I already have deleted)
But what about the linking dlls to make libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll linked from res/libs during Cinema 4D startup (and for shipping first two to clients)? Is there some option for this? -
RE: Plugin does not appear in Expression on client's Cinema 4D
I've managed to reproduce the problem: the Cinema does not load the plugin (r23 and 2025).
To do it, I not only deleted libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll from Windows/System32. It was enough for r23. For 2025 I was needed also to delete the variable from a PATH to Windows/System32.
Then I've tried to build the static lib of curl. I was thinking that this way will be better. I will not explain all the details, but it didn't - it just finished every build with:1>LINK : fatal error LNK1104: cannot open file 'curl/libcurl_a_debug.lib'.
And nothing helped to fix that.
So I decided to return to the dynamic libraries. Actually I do not mind to supply the above dlls with my plugin.
I have reverted the binding to the dynamic version of curl and openSSL. Also I have added libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll to *plugin root/res/libs (not so hoping plugin will start to take them from there).
And I've delete the variable from a PATH (Windows/System32) to make sure it won't catch on these dlls from the System32.
Now I am making the build and it finishes with the success. And when I am starting the r23 - of course there is no plugin.
Yes, -g_console says:WARNING: Error loading file:///H:/Code/r23/sdk/plugins/firstplugin/ragdoll.xdl64: Could not load dll because of Could not load libcrypto-3-x64.dll due to Windows System Error #126: The specified module could not be found. [win_dll.cpp(304)]. Could not load libcurl-d.dll due to Windows System Error #126: The specified module could not be found. [win_dll.cpp(304)].. (file:///H:/Code/r23/sdk/plugins/firstplugin/ragdoll.xdl64) [win_dll.cpp(324)] Cause: Windows System Error #126: The specified module could not be found. [win_dll.cpp(318)] [general.cpp(401)]
Expected. The same problem which clients have.
(And yes, if I will back libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll to the System32, then my plugin appears in Expression)So right now I need somehow to fix it so the plugin catch on libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll not from my Windows/System32 but from *res/libs.
How to do it?
DeepSeek gives me a hint that I can usevoid SetDllSearchPath() { // Set the DLL search path to the res/libs folder SetDllDirectory(L"res\\libs"); } // Call this function during plugin initialization SetDllSearchPath();
But I am not sure is it right?
If it is not, then how to achieve this with maybe the other correct way? -
RE: Plugin does not appear in Expression on client's Cinema 4D
Actually I am not fully correct: the plugin now does not loading in C4D r23 and C4D 2024. But still appears in C4D 2025
Frustrating... -
RE: Plugin does not appear in Expression on client's Cinema 4D
Hmm, after delete libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll from Windows/System32 I can't reproduce the problem on my side ("Error loading file:// Could not load libcurl.dll ...Could not load libcrypto-3-x64.dll"). The plugin still loads...
I understand that it is my problem, and you do not provide help with 3rd party libraries.
Just was dreaming that I will fix everything quickly.
Just delete libcurl.dll, libcrypto-3-x64.dll, libcurl-d.dll from Windows/System32 (where I've put them before), check if the same problem appears (the plugin does not loading), then put these files into res/libs.
But it turned out that I delete files, but the plugin still loadsI'll dig further...
-
RE: Plugin does not appear in Expression on client's Cinema 4D
@ferdinand hmm, now I think I understand.
Actually I had a problem last week with including these libcurl.dll and libcrypto-3-x64.dll into my VS2019 project. Even adding these .lib linking into the additional lib derectories and additional dependancies, I think I got the same error you quote above : Could not load libcurl.dll, libcrypto-3-x64.dll.
And only the manually adding these tow dlls into Windows/System32 fixed that problems.So now after your explanation I understand that I did not make everything correctly.
The question is now: how to properly add the
\curl_x64-windows\debug\lib
\openssl_x64-windows\debug\lib
libcurl-d.lib
libcrypto.lib
into a project (do not shipping the exact .dlls with a plugin to clients)?... -
RE: Plugin does not appear in Expression on client's Cinema 4D
@Havremunken thanks for the idea. I've sent to the customer the little debug version to check the log when the plugin are registered by Cinema 4D at a startup process. Will wait what he will answer me.
@ferdinand thank you for your answer. Yes, I use these dlls in my plugin. And yes, I've added them just in last update (which means that exactly the plugin instance with these dlls does not work on the client's side).
But what is confusing me - this absolutely the same plugin version loads on my side.
Plugin ID is unique. It did not caused any problems for years.
Sorry, I've not fully understood you: you are confirming that your Cinema 4D does not load the plugin too?
Then how it can be that the absolutely the same plugin file works on my side, but does not work on yours (and client's)?
PS. In some reason I can't perform adding of -g_console like you show. It says "the wrong folder".@ferdinand said in Plugin does not appear in Expression on client's Cinema 4D:
your plugin package seems to simply miss these DLLs, as neither libcurl.dll nor libcrypto-3-x64.dll are native Windows libraries.
I was thinking that during the build the Visual Studio will add all the required code from these dlls to a binary. So I was wrong and now have to fix it?... If yes, then what exactly should I perform?
-
RE: Plugin does not appear in Expression on client's Cinema 4D
@Havremunken I have a logging for a licensing system. And in the debugging we can see the process of plugin initialization (of course testing it on the developer's side).
But on my side the plugin initializes as expected.
Client has some rare problem which I cannot even understand a possible root. -
Plugin does not appear in Expression on client's Cinema 4D
Hello experts.
My client reports me that his instance of my plugin does not work for him.
It does not appear in Expression at all. Cinema 4D does not see it.
It is 2024.5.1, but the problem exists with other versions.I am checking the same setup (same C4D version, files location and files) - and it works for me! Also previously it worked for a lot of other clients for years. But these days I've made an update - maybe it is some my uncommon mistake?....
AM I right - it is a Windows on the screen, yes? (my plugin works on the Win)Can you give me a hint, what it can be?
Because I've already broken my mind. I have no any idea left about what the problem can be.P.S. Here is the files if you need it: ragdollplugin.com/wp-content/uploads/release/Ragdoll_plugin.zip
Would be really appreciated if you can also confirm that it does not appear in your Expressions or contrary - it does. -
RE: New Simulation system: the Compound Collision Shape is no longer available?
Hello Ilia.
Thank you for you answer.
As I mentioned in the very first message
@yaya said in New Simulation system: the Compound Collision Shape is no longer available?:There is only a "Hierarchy merge level" option, which does not do the same.
Just try this workflow from your video but with the OJoint and not with the Clone object.
For some reason it works with the Clone object but with Joint it does not. The tag does not consider the child of joint as an object for physics calculation at all. I've added the project-file in my first message to show it.And it is pretty strange. Because I was thinking in the same manner as you: that it will be easy, just to need use the workflow like you show.
-
RE: New Simulation system: the Compound Collision Shape is no longer available?
Hello @i_mazlov ,
As I mentioned, as a developer I am trying to provide to users the option of newly added Simulation system to use it in the my ragdoll plugin. Ideally, I want to use the new trigidbody tag in my code the same way as I use the old Bullet Dynamic Body now.
But I can't understand how to do instead of this:BaseTag* const DBtag = BaseTag::Alloc(180000102); DBtag->SetParameter(ConstDescID(DescLevel(RIGID_BODY_SHAPE)), 11, DESCFLAGS_SET::NONE);
this:
BaseTag* const DBtag = BaseTag::Alloc(trigidbody); DBtag->SetParameter(ConstDescID(DescLevel(???)), ???, DESCFLAGS_SET::NONE);
As I mentioned above, for a ragdoll I need a compound collision shape. Where the top of a hierarchy is a joint object and it owns the trigidbody tag. The second level of a hierarchy is the child mesh object - it represents the shape of the joint. In the settings of trigidbody tag I want to set it as a Compound collision shape. And then connect these nodes via Connectors to create the ragdoll structure.
So my question is:- is my desires are possible on this stage of provided simulation engine?
- if it does not, then is it in plans to add it in the near future? Because this option already exists in old Bullet tag.
-
RE: New Simulation system: the Compound Collision Shape is no longer available?
Is it something too complicated what I am asking?
-
New Simulation system: the Compound Collision Shape is no longer available?
I am trying to use the new Rigid body tag to create ragdolls. My plugin was using the old Bullet Dynamic body tag for this task. And it worked well. But now after new Simulation system has been presented clients start asking about using GPU for ragdolls, which should be much faster.
Also new Simulation System was added the possibility when a Connector object has became to be able to connect two objects under a new SimSystem. And even in the Ragdoll mode.
So it is pretty logical to use new physics to create ragdolls. And even the crowd of ragdolls which with old bullet physics worked slow due its known limitation. So the new Simulation system potentially could be a salvationAnd I was thinking it will require just to replace the old Bullet Dynamic body tag to a new Rigid body tag.
But what I've found - there is not option in new system to use the Rigid body tag with the compound collision shapes anymore. There is only a "Hierarchy merge level" option, which does not do the same.
Am I right? It is not possible to use the new RB-tag for compound shapes?
Old bullet tag worked in a way when I: 1) put DB-tag on a Joint object, 2) added the mesh collider shape under the Joint as its child and 3) set DB-tag as a Compound collision shape to consider joint and its child as a physical object.A new Simulation System does not allow this workflow anymore? Is this a missing feature?
Or if there is a some way I can code it to achieve the desired result, then how to do this? -
RE: 3d Connector problem after 2024.4 update
Hello @ferdinand
I've found that if I create the connector via the code above, I can fix the problem with the itemtree/inexdata and joint settings (reference_axis parameter) successfully.But by testing it, I've found another issue.
As I mentioned in my first message, instead of the legacy FORCE_TYPE DescID now there are two DescIDs: FORCE_TYPE_GROUP and FORCE_TYPE_MODE.
And if I am trying to set the Connector mode by them, then after the creation of the Connector the "Type" and the "Mode" of the Connector object are selected correctly, but in the viewport they are not.
F.e. I do this:connector->SetParameter(ConstDescID(DescLevel(FORCE_TYPE_GROUP)), 3, DESCFLAGS_SET::NONE); connector->SetParameter(ConstDescID(DescLevel(FORCE_TYPE_MODE)), 3, DESCFLAGS_SET::NONE);
Here I am trying to create the Connector in the Ragdoll mode.
But in the viewport I see the mode as the "Ball and Socket" mode. And it works if I hit Play as a Ball and Socket.
But in the parameters section it is selected correctly: type=Spherical, mode=Ragdoll.So, I've found this problem and then I've decided to use the old FORCE_TYPE instead of new FORCE_TYPE_GROUP and FORCE_TYPE_MODE:
connector->SetParameter(ConstDescID(DescLevel(FORCE_TYPE)), 3, DESCFLAGS_SET::NONE);
And in this case the created Connector become in the correct Ragdoll mode.
Actually it is what I need. And it works for all other modes.
...Except for a "Fixed".
The old "Fixed" mode was under the int number = 6.
The new Fixed is equal to 0.
Anyway I've found the way to fix it in my plugin. But it requires to add another new if-statements (#if API_VERSION >= 2024500) in all places where the Fixed connectors should be used .I do not know is it a bug or feature, just will leave it here to get back in 2 years and remember why I've added all that #ifs in my code
-
3d Connector problem after 2024.4 update
Hi.
After 2024.4 I got a message from the customer that now my plugin broken.
It seems the old Dynamic Connector was rewritten in the 2024.4 release and was significantly changed. But the release page says: "Legacy Connectors will be compatible".I've realized that the Dynamic Connector which my plugin creates is not compatible anymore.
F.e. Instead of legacy FORCE_TYPE DescID now there are two DescIDs: FORCE_TYPE_GROUP and FORCE_TYPE_MODE.
It is pretty frustrating, because now all legacy force_types (like Fixed, Slider, Ragdoll, Hinge, etc) have different ID values. The "Fixed" was 6 before the 2024.4. Now it is 0. Etc.I've rewrote my plugin in part of FORCE_TYPE and now my plugin creates correct force_types. But now I can't understand what is going on with the old OBJECT_A and OBJECT_B settings of the Connector? In previous versions we were able to add the Joint object here. Now I can't. I am trying to drag and drop my character's joint into the new "Objects" field but nothing happens.
My plugin really depends on the Joint object in this field.
Is it not possible to use Joint objects with the Bullet Dynamic tag as objects which Connector connects anymore?
If yes, then legacy Connectors are not compatible anymore.If I am not right and Joint object is still valid I can't understand how this code should look in a new version?
connector->SetParameter(ConstDescID(DescLevel(FORCE_OBJECT_A)), objectA, DESCFLAGS_SET::NONE); connector->SetParameter(ConstDescID(DescLevel(FORCE_REFERENCE_A)), 2, DESCFLAGS_SET::NONE);
-
RE: BaseSelect::Free() in 2024 - Access violation reading location
Hello @ferdinand,
Yeah, it will hard to debug, I am agree with you. This problem was strange and hard to debug even in previous versions. I almost blindly found that time that BaseSelect::Free(polyS) somehow has fixed that issue (yeah, I understand how it sounds for you). I just think that two piece of code 2023 and 2024, the second is without BaseSelect::Free(polyS), the second one works wrong, the first one works entirely correctly, despite that this line should do nothing. That's why I assume it should do something behind.
Have you tried flushing polyS before leaving the scope, because that is the implicit effect of freeing the selection? I.e., call polyS->DeselectAll()
My plugin in this module takes the character's mesh and cuts it for parts to make ragdoll's colliders. So each new iteration of -
BaseSelect* polyS = polyObj->GetWritablePolygonS();
-the polyObj is (become) a new mesh.
Before the polyS->DeselectAll(); I change the meshes structure in other parts of code: make cuts, delete polygons, delete points, MCOMMAND_SPLIT, triangulate polys, add new edges etc. Of course ->DeselectAll() too. Then in the piece of code above I grab the resulting mesh and trying to delete isolated islands. But if I do not do the BaseSelect::Free(polyS) before, then I do not get the "Access violation" but in the result "happens something" and it selects not the polygons which should to be deleted... -
RE: BaseSelect::Free() in 2024 - Access violation reading location
Hey @ferdinand,
Thanks for your explanation. I understand what you say, and you have a logic, and most of all I am not right and you are, but I just remember that when I putted a lot of efforts to this code, everytime I got an incorrect work of mesh slicing in my plugin. Before I've added this line. Without freeing of BaseSelect it worked like the wrong version on the video above. It was very strange problem, which was looked like a bug, I couldnot understand its root. But when I've added BaseSelect::Free(polyS) it has started to slice my mesh correctly.
Could there be a small, most incredible possibility that this line did something?
-
RE: BaseSelect::Free() in 2024 - Access violation reading location
Hello @ferdinand ,
Actually this code works perfectly in 2023.2. And in r21, 23, 24, 25, 26 too.
Now, in 2024 I've started to get the error above. So I decided to do not Free the base select as you say. But now my plugin starts to work incorrectly.
Here is the video of the comparison:
It is the same code, except BaseSelect::Free(polyS); which is now commented in version for 2024
This line (BaseSelect::Free(polyS);) was really necessary when I worked on it, and it does the stuff.