using Karamba.CrossSections;
private void RunScript(object Model_in, ref object XML)
var model = Model_in as Model;
throw new ArgumentException("The input is not of type model!");
var builder = new BuilderXML();
var director = new Karamba.Exporters.ExportDirector();
director.ConstructExport(model, builder);
XML = builder.getProduct();
// <Custom additional code>
public class BuilderXML : Karamba.Exporters.ExportBuilder {
private XmlDocument doc_ = new XmlDocument();
// the model inside the xml-document
private XmlElement model_;
public override void newProduct() {
model_ = (XmlElement) doc_.AppendChild(doc_.CreateElement("K3DModel"));
public override void buildMaterial(FemMaterial m, int ind) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("FemMaterial"));
xml_node.InnerText = "ind: " + ind + ":" + m.ToString();
public override void buildVertex(Node v) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("Node"));
xml_node.InnerText = v.ToString();
public override void buildCroSec(CroSec crosec) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("CroSec"));
xml_node.InnerText = crosec.ToString();
public override void buildElement(ModelElement e, Model model) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("ModelElement"));
xml_node.InnerText = e.ToString();
public override void buildElementLoad(ModelElement elem, Model model) {
foreach (var l in elem.Elem_loads) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("ElementLoad"));
xml_node.InnerText = l.ToString();
public override void buildLoadCase(int lc_ind, Model model) {
Vector3 g_vec = new Vector3(0, 0, 0);
foreach (GravityLoad g in model.gravities.Values) {
if (g.loadcase < 0 || g.loadcase == lc_ind) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("LoadCase"));
xml_node.InnerText = "load-case: " + lc_ind + " g =" + g_vec;
public override void buildSupport(Support s) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("Support"));
xml_node.InnerText = s.ToString();
public override void buildPointLoad(PointLoad p) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("PointLoad"));
xml_node.InnerText = p.ToString();
public override void buildMeshLoad(MeshLoad m) {
var xml_node = (XmlElement) model_.AppendChild(doc_.CreateElement("MeshLoad"));
xml_node.InnerText = m.ToString();
public string getProduct() {
StringWriter sw = new StringWriter();
XmlTextWriter tx = new XmlTextWriter(sw);
string str = sw.ToString();//
// </Custom additional code>