Got it. Thank you.
Posts made by kisaf
-
Plugin works with R23 and doesn't work with S24.
Hello guys!
There is a plugin for Cinema R23:Vertex Normal Tool
You could find it here https://frostsoft.blogspot.com/p/fssoftware.html.
And it doesn't work correctly with any version of Cinema newer than R23.
Unfortunately, an author doesn't respond to my emails. It seems like he doesn't support his products anymore.Is it possible to make this plugin run with modern versions of Cinema?
It seems like it should work. I found this here [URL-REMOVED]Plug-ins that were built for R23 should work with S24. They require to be rebuild against the R24 API in only a few cases. See C++ documentation for more informations.
Maybe there is any way to rebuild this plugin?
I forgot to say, the plugin is encrypted (.pypv), so I cannot edit it.P.S. Is there any alternative of this plugin?
[URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.
-
RE: fbx export plugin critical error
Hi there, I have a similar problem. But I use R25 version.
If I write
exporterID[c4d.FBXEXPORT_SDS] = True
orexporterID[c4d.FBXEXPORT_SDS] = False
I get error
AttributeError: parameter set failed
If I comment or remove this line, export works fine.
Maybe I should create a new topic with this issue.
-
Files and modules organization
Hello there
There is my main
module A
. It should use amodule B
(located in the same folder) and Python's standart moduleYAML
(which doesn't exist by default).
Whats the best solution? Should I just downloadYAML
and copy it tomodule A
folder?Right now
module A
is placed here%user%\AppData\Roaming\Maxon\Maxon Cinema 4D R25\library\scripts\
I'm not sure, but maybe I should use another folder, e.g.
E:\C4D_scripts
and use environment variableC4DPYTHONPATH39
?How do you orginize your files and modules?
-
Where to report a bug?
Hello guys,
where I can report a bug?There are Bug Reports but it looks dead.
-
RE: Mirror without duplicate using `MCOMMAND_MIRROR`
@fritz thank you very much, it works!
-
RE: Mirror without duplicate using `MCOMMAND_MIRROR`
Roger that, thanks again.
I wasn't sure that the developers were aware. Sorry for annoy you
Cheers -
RE: Mirror without duplicate using `MCOMMAND_MIRROR`
Hello guys,
This bug is still exists in S24. I made a video to show how it worked before (R21) and now (S22, R23, S24).For test I used the script from this page. The only difference I made is decreased
value
from1000.0
to0
. It's just for convenience.This script should mirrors selected object, when
settings[c4d.MDATA_MIRROR_DUPLICATE]
isFalse
. It works in R21 and doesn't work in any late releases.
Could you fix it? I'm still using R21 because of this bug -
RE: Mirror without duplicate using `MCOMMAND_MIRROR`
@m_magalhaes
Got it, thanks -
RE: Mirror without duplicate using `MCOMMAND_MIRROR`
Hi, I've just tested this script in R23. It doesn't work
One of my own scripts cannot work without this function.
Guys, you're really awesome! I love C4D, and hope you can fix itMay be I can help somehow? I can upload the example scene, if you need it.
-
RE: Script : Harden edges of all UV borders (break Phong shading)
Hello guys,
I rewritten scriptUV2PhongEdges
(weird name, I know :D) from scratch. Now it should works much faster. Also UNDO finally works, yyyeeeey!You can download it here
https://github.com/rocketjump4d/UV2PhongEdgesAnd here is an example
Also, if you just need to get edges indexes of all UV borders you can use this code:
ο»Ώimport c4d from c4d import utils def GetUVBorders(obj): edgesIndexes = set() abcd = tuple("abcd") tuvw = obj.GetTag(c4d.Tuvw) nbr = utils.Neighbor() nbr.Init(obj) # Create empty set for `edgesVV` # In this case `edgeVV` means `Edge between Vertex0 and Vertex1 (edgeVertexVertex)` # edgeVV is just a tuple(v0, v1), where v0 is index of the first vertex # and v1 is the second one allEdgesVV = set() for i in xrange(obj.GetPointCount()): # Find neighbor vertex for this one neighborIndexes = nbr.GetPointOneRingPoints(i) for ni in neighborIndexes: edgeTuple = (i, ni) allEdgesVV.add(edgeTuple) # At this point I've got a set of all `edgesVV` of the object # Something like this: # (0, 3) # (0, 5) # (5, 1) for edgeVV in allEdgesVV: # Find neighbour polygons for this edge # I called them polyA and polyB polyAIndex, polyBIndex = nbr.GetEdgePolys(edgeVV[0], edgeVV[1]) polyA = obj.GetPolygon(polyAIndex) if polyBIndex is c4d.NOTOK: # There is no polyB. It means that this edge is border of the object # eiA stands for `Edge Index in polyA for current edgeVV` eiA = polyAIndex * 4 + polyA.FindEdge(edgeVV[0], edgeVV[1]) edgesIndexes.add(eiA) continue polyB = obj.GetPolygon(polyBIndex) # piA0 stands for `Point Index in polyA for vertex edgeVV[0]` # the same for others piA0 = polyA.Find(edgeVV[0]) piA1 = polyA.Find(edgeVV[1]) piB0 = polyB.Find(edgeVV[0]) piB1 = polyB.Find(edgeVV[1]) # Replace "d" (3) to "c" (2) if polygon is triangle if polyA.IsTriangle() and piA0 == 3: piA0 = 2 if polyA.IsTriangle() and piA1 == 3: piA1 = 2 if polyB.IsTriangle() and piB0 == 3: piB0 = 2 if polyB.IsTriangle() and piB1 == 3: piB1 = 2 # Get UV coordinates for each point in each polygon uvCoordA0 = tuvw.GetSlow(polyAIndex)[abcd[piA0]] uvCoordA1 = tuvw.GetSlow(polyAIndex)[abcd[piA1]] uvCoordB0 = tuvw.GetSlow(polyBIndex)[abcd[piB0]] uvCoordB1 = tuvw.GetSlow(polyBIndex)[abcd[piB1]] if uvCoordA0 != uvCoordB0 or uvCoordA1 != uvCoordB1: eiA = polyAIndex * 4 + polyA.FindEdge(edgeVV[0], edgeVV[1]) eiB = polyBIndex * 4 + polyB.FindEdge(edgeVV[0], edgeVV[1]) edgesIndexes.add(eiA) edgesIndexes.add(eiB) return edgesIndexes
Let me know if you find bugs.
Btw, sorry any mistakes. My English is... meh -
Mirror without duplicate using `MCOMMAND_MIRROR`
Hello guys,
It's something weird withMCOMMAND_MIRROR
in S22.This script (thanks to m_adam) duplicates and mirrors the object.
import c4d def main(): # Checks if selected object is valid if op is None: raise ValueError("op is none, please select one object.") # Defines some general settings, take care MDATA_MIRROR_VALUE, MDATA_MIRROR_SYSTEM and MDATA_MIRROR_PLANE settings = c4d.BaseContainer() settings[c4d.MDATA_MIRROR_DUPLICATE] = True settings[c4d.MDATA_MIRROR_SELECTIONS] = True settings[c4d.MDATA_MIRROR_ONPLANE] = True settings[c4d.MDATA_MIRROR_WELD] = True settings[c4d.MDATA_MIRROR_TOLERANCE] = 0.01 # Corresponds to MDATA_MIRROR_VALUE, MDATA_MIRROR_SYSTEM and MDATA_MIRROR_PLANE value = 1000.0 system = 0 # 0 = Object, 1 = World plane = 1 # 0 = XY, 1 = ZY, 2 = XZ if not 0 <= system < 2: raise ValueError("System can only be 0 or 1") # Buffer position vector pos = c4d.Vector() # Calculates Local (Object) coordinates if system == 0: globalMatrix = op.GetMg() if plane == 0: pos = globalMatrix.v3 elif plane == 1: pos = globalMatrix.v1 elif plane == 2: pos = globalMatrix.v2 settings[c4d.MDATA_MIRROR_POINT] = globalMatrix.off + pos * value settings[c4d.MDATA_MIRROR_VECTOR] = pos # Calculates World coordinates elif system == 1: if plane == 0: pos = c4d.Vector(0.0, 0.0, 1.0) elif plane == 1: pos = c4d.Vector(1.0, 0.0, 0.0) elif plane == 2: pos = c4d.Vector(0.0, 1.0, 0.0) settings[c4d.MDATA_MIRROR_POINT] = pos * value settings[c4d.MDATA_MIRROR_VECTOR] = pos # Send the Modeling Operation res = c4d.utils.SendModelingCommand(c4d.MCOMMAND_MIRROR, [op], c4d.MODELINGCOMMANDMODE_ALL, settings, doc) c4d.EventAdd() if __name__ == "__main__": main()
However, if I change
settings[c4d.MDATA_MIRROR_DUPLICATE] = True
to
settings[c4d.MDATA_MIRROR_DUPLICATE] = False
Script doesn't make anything.
In R20 it works.
Is it ok? Is there any way to just mirror the object without duplicate it?P.S. Also, if I use
Mirror
(https://help.maxon.net/index.html#5633) with uncheckedDuplicate Points
everything works (in S22).Cinema 4D S22.118 Windows 10
-
RE: Setting `coordinate system` using `MCOMMAND_MIRROR`
Hi @m_adam
Thank you for your reply. It works perfectly! -
Setting `coordinate system` using `MCOMMAND_MIRROR`
Hi there, I'm trying to mirror object via
SendModelingCommand(c4d.MCOMMAND_MIRROR, ..)
But I cann't understand how to change a coordinate system.
According to the documentation this options is calledMDATA_MIRROR_SYSTEM
and it'sint
type.
Its description saysCoordinate system. (See dialog.)
I believe it is the dialog:
It seems like 0 means Object, 1 - World, 2 - Screen.
I tried different values from 0 to 30, but it didn't take any effect.The code I'm using:
settings = c4d.BaseContainer() settings[c4d.MDATA_MIRROR_SYSTEM] = 0 res = utils.SendModelingCommand(c4d.MCOMMAND_MIRROR, [obj], c4d.MODELINGCOMMANDMODE_ALL, settings, doc)
I cannot change
MDATA_MIRROR_PLANE
either.
There is no additional information in the documentation.
Drag'n'drop for these fields doesn't work. It's strange, because it works perfectly for other tools.I found this post (from 2011) https://developers.maxon.net/forum/topic/5497/5516_mirror-tool-bug
It seems that bug is still aliveVersion: R20
Platform: WindowsCheers
-
To grow selection in UVPolygon mode
Hi everyone!
When C4D is in Polygon mode
Grow selection
can be done usingSendModelingCommand
e.g.utils.SendModelingCommand( c4d.MCOMMAND_SELECTGROW, [op], c4d.MODELINGCOMMANDMODE_POLYGONSELECTION, c4d.BaseContainer(), doc )
After that, selection grows to neighbour polygons. Everithing is ok.
However, when active mode is UV Polygon then code above select neighbour polygons the same way how it was in previous case. Sometime it's ok, but not always.The second way to grow selection is to use
CallCommand
c4d.CallCommand(12558, 12558) # Grow Selection
In this case selection grows correctly in both modes.
I'll show an example. There is a simple sphere that separated by UVs in the middle. So it has 2 UV islands.From 1 selected polygon (the first image) I want to get the result which is shown on the last image.
But I don't know how to get it withoutCallCommand
Sorry for mistakes. English is not my szcznek language
Cheers -
RE: Save variables during current session (until C4D is closed)
Thank you very much guys!
I think that plugin will be better solution then script in this case.
Cheers -
RE: Script : Harden edges of all UV borders (break Phong shading)
Hi @mp5gosu, thank you for your feedback!
Yep, it has Undo problem. I assume, it's because the script usesCallCommand
. And there are 2 places where I still don't understand how to avoid thisthe selection should be restored after the process
Thank you for this remark. I'm gonna fix it asap.
Cheers.EDIT: I've fixed the script. Now it restores the selection after the process.
-
RE: Is there a script/plugin for converting UV borders to Phong Edges?
I've wrote it by myself
Its presentation is here: https://developers.maxon.net/forum/topic/11336/script-harden-edges-of-all-uv-borders-break-phong-shading
May be it'll be useful for someone
Cheers -
Script : Harden edges of all UV borders (break Phong shading)
Hi, I'd like to present you a simple script.
It let you automatically select all UV borders and break their Phong shading, that might be useful for game modeling, especially with hardsurface props.
More info about hard edges - http://www.polycount.com/forum/showthread.php?t=107196Unfortunately, the 'Texture View' window must be opened at least once for properly work
Just close 'Texture View' and continue work.Video:
Download link: https://github.com/rocketjump4d/UV2PhongEdges
-
Save variables during current session (until C4D is closed)
I've wrote a script which must make some calculations only once and then use these values until C4D is closed.
After C4D is opened again the script must recalculate values again, but only once.
It's not a plugin, but only python script.
Is it possible to realize?
Cheers