algorithmic modeling for Rhino
I was wondering if there is a way to access the karamba.gha via python? Is there an API for karamba? Or another way to get structured information about an assembled karamba-model.
I'm currently trying to make a code where I store all my model-info in a .Json file, to then be able to interpret this in multiple FEM-packages, but I'm having trouble adding Mesh-loads. By disassembling a model in grasshopper, a structural line model is not a problem, the mesh-load however is not specific at all. It just gives:
"Mesh-load: Load(x/y/z) [kN/m2]; global; LC[x]; Area:xx[m2]; Resultant:(x/y/z)[kN]"
Nothing about where the load is applied. How would I go about extracting this information?
you can access the Karamba functionality via Python and IronPython. Both ways are described in the 'Karamba 1.1.0 Hacker's Essentials' (see http://www.karamba3d.com/download/hackers-essentials-2/?wpdmdl=4348...). The manual is not up to date, however you can use ILSpy to decompile 'karamba.gha' in order to see how it works.
The MeshLoad-component is converted to point-loads on nodes and uniformly distributed loads on beams and trusses via the Assemble-component.
Using ILSpy you will see that there is a class 'Component_AssembleModel' and a class 'Component_AssembleModel_GUI'. The former performs the acutal task via the static method solve(), the latter provides the visual component. The easiest way to get the information from a MeshLoad would be to initiate the assemble process and then retrieve the load-data from the model.
Thanks a lot! as always!
I write here because I'd want to do your same process but passing from a .txt file.
I'm a very beginner of programming and I'm trying to use the GHPython component for write the model-info in a .txt file, but I don't understand how to do it.
I think the main problem is that I don't know how to get the informations. I downloaded the 'karamba_1_1_0_hackers_essentials' (linked above by Clemens) but in the Guide I don't find the python syntax.
For example I'd want to write in the GHPython component something that allow me to write for every node " 'Node' + str(ID) + str(XYZcoordinates)". I think I have to find a karamba function that gets the nodes coordinates, but I don't find it. I saw that there is a 'Displacement vector of the node' but I'm not able to call it.
I'm not sure, but I think that's the way that allow me to be able to get the informations and write it how I want.
I'm thinking wrong?
There is an easy way?
the 'Node'-class possesses the public property 'pos' which returns the initial position of a node. The property 'ind' gives you the index of the node.
Thank you for the answer.
I searched 'pos' in the Guide and I find it in 'Fields' of 'Node Class'.
In the GHPyhton component after connecting 'Pt' from a 'Disassemble model' I write:
clr.AddReferenceToFileAndPath("C:\Program Files (x86)\Rhinoceros 5\Plug-ins\Karamba.gha")
import Karamba.Nodes.Node as Node
but returns printed <field# pos on Node>.
How can I print that property correctly?
And an other question. I noticed that every class have 'Fields' and 'Properties'. They seems me quite similar, such as a kind of classes information.
What's the difference? I can get the information by 'Properties' like for the 'Fields'?
Sorry if the questions are too simple
in the above code-snippet you seem to forget to input a node object.
Maybe it helps if you take a look at the 'Karamba 1.1.0 Hacker's Essentials' (see above).
For a basic introduction into Python please consult a text book or on-line resources (e.g. sourceforge).
you're right I forgot to input a node object, but however I don't understand how to use it. I tried in different ways.
As I said above I've already download the 'Karamba 1.1.0 Hacker's Essentials' but I don't find the python syntax in the 'Karamba110_HackersGuide' or samples of python scripting. There is only the example 'SimpleShellEso' but I can not figure out how to do it in my case.
I just asking how to get xyz coordinates of my model nodes.
So maybe I could understand how to use 'Fields' and 'Properties' of the classes for what I need.
ok I finally understood
for node in inModel.nodes:
I understood that there are some words not defined that work, now I'm beginning to do what I want and to work with 'Field' and 'Properties'.