public void EndFigure(CanvasFigureLoop figureLoop) { if (figureLoop == CanvasFigureLoop.Closed) { _currentGlyph.Add(new LinePath(_lastPoint, _startPoint)); } allGlyphs.Add(_currentGlyph); // start a new block _currentGlyph = new TextGlyph(); System.Diagnostics.Debug.WriteLine(">>>>>"); }
// Adapted from Group.RenderText public static void TextTex(this Group group, TextGlyph glyph, IndentedTextWriter writer, Graphics g, RenderInformation rendinfo, Group refgroup, double scale, Hashtable fontTexTable) { writer.WriteLine("{"); writer.Indent += 1; CommentTex(glyph, group, writer); string text = glyph.GetTextToDraw(); RectangleF bound_rectangle = glyph.Bounds.toRect(); Font font = group.GetScaledFont(scale, refgroup); SizeF string_size = g.MeasureString(text, font); PointF text_coord = group.GetPoint(group, bound_rectangle); Color text_color = group.GetStrokeColor(rendinfo, refgroup); if (!text_color.Equals(Color.Empty)) { // refer stroke information to a ColorDefinition ID or assign a new colordefinition to "curLineColor" string strokeRef = FillColor.getStrokeRef(group, rendinfo, refgroup); if (String.IsNullOrEmpty(strokeRef) || !FillColor.isColorID(strokeRef, rendinfo.ColorDefinitions)) { strokeRef = "curLineColor"; FillColor.AssignColorRGBTex(text_color, "curLineColor", writer); } //adapted from Group.CorrectPosition switch (group.GetTextAnchor(group)) { // TikZ text is automatically centered at the drawing point case Text.TextAnchors.start: text_coord.X += string_size.Width / 2f; break; case Text.TextAnchors.end: text_coord.X -= string_size.Width / 2f; break; } writer.WriteLine("\\draw ({0}pt, {1}pt) node[text = {7}{2}, font = \\fontsize{{ {3} }} {{ {4} }}\\fontfamily{6}\\selectfont] {{ {5} }};", (text_coord.X).ToString(), (text_coord.Y).ToString(), FillColor.AlphaValTex(text_color), font.SizeInPoints, font.SizeInPoints, correctText(text), FontTex(font, fontTexTable), strokeRef); } writer.Indent -= 1; writer.WriteLine("}"); }
public static void Main(string[] args) { // // Creates an SBMLNamespaces object with the given SBML level, version // package name, package version. // // (NOTE) By defualt, the name of package (i.e. "layout") will be used // if the arugment for the prefix is missing or empty. Thus the argument // for the prefix can be added as follows: // // SBMLNamespaces sbmlns(3,1,"layout",1,"LAYOUT"); // SBMLNamespaces sbmlns = new SBMLNamespaces(3, 1, "layout", 1); // // (NOTES) The above code creating an SBMLNamespaces object can be replaced // with one of the following other styles. // // (1) Creates an SBMLNamespace object with a SBML core namespace and then // adds a layout package namespace to the object. // // SBMLNamespaces sbmlns(3,1); // sbmlns.addPkgNamespace("layout",1); // // OR // // SBMLNamespaces sbmlns(3,1); // sbmlns.addNamespace(LayoutExtension::XmlnsL3V1V1,"layout"); // // (2) Creates a LayoutPkgNamespaces object (SBMLNamespace derived class for // layout package. The class is basically used for createing an SBase derived // objects belonging to the layout package) with the given SBML level, version, // and package version // // LayoutPkgNamespaces sbmlns(3,1,1); // // create the document SBMLDocument document = new SBMLDocument(sbmlns); // set the "required" attribute of layout package to "true" document.setPkgRequired("layout", true); // create the Model Model model = document.createModel(); model.setId("TestModel"); document.setModel(model); // create the Compartment Compartment compartment = model.createCompartment(); compartment.setId("Compartment_1"); compartment.setConstant(true); // create the Species Species species1 = model.createSpecies(); species1.setId("Species_1"); species1.setCompartment(compartment.getId()); species1.setHasOnlySubstanceUnits(false); species1.setBoundaryCondition(false); species1.setConstant(false); Species species2 = model.createSpecies(); species2.setId("Species_2"); species2.setCompartment(compartment.getId()); species2.setHasOnlySubstanceUnits(false); species2.setBoundaryCondition(false); species2.setConstant(false); // create the Reactions Reaction reaction1 = model.createReaction(); reaction1.setId("Reaction_1"); reaction1.setReversible(false); reaction1.setFast(false); SpeciesReference reference1 = reaction1.createReactant(); reference1.setSpecies(species1.getId()); reference1.setId("SpeciesReference_1"); reference1.setConstant(false); SpeciesReference reference2 = reaction1.createProduct(); reference2.setSpecies(species2.getId()); reference2.setId("SpeciesReference_2"); reference2.setConstant(false); Reaction reaction2 = model.createReaction(); reaction2.setId("Reaction_2"); reaction2.setReversible(false); reaction2.setFast(false); SpeciesReference reference3 = reaction2.createReactant(); reference3.setSpecies(species2.getId()); reference3.setId("SpeciesReference_3"); reference3.setConstant(false); SpeciesReference reference4 = reaction2.createProduct(); reference4.setSpecies(species1.getId()); reference4.setId("SpeciesReference_4"); reference4.setConstant(false); // create the Layout // // set the LayoutPkgNamespaces for Level 3 Version1 Layout Version 1 // LayoutPkgNamespaces layoutns = new LayoutPkgNamespaces(3, 1, 1); // // Get a LayoutModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is SBasePlugin, and // thus the value needs to be casted for the corresponding derived class. // LayoutModelPlugin mplugin = (LayoutModelPlugin)(model.getPlugin("layout")); if (mplugin == null) { Console.Error.WriteLine("[Fatal Error] Layout Extension Level " + layoutns.getLevel() + " Version " + layoutns.getVersion() + " package version " + layoutns.getPackageVersion() + " is not registered."); Environment.Exit(1); } // // Creates a Layout object via LayoutModelPlugin object. // Layout layout = mplugin.createLayout(); layout.setId("Layout_1"); Dimensions dim = new Dimensions(layoutns, 400.0, 220.0); layout.setDimensions(dim); // create the CompartmentGlyph CompartmentGlyph compartmentGlyph = layout.createCompartmentGlyph(); compartmentGlyph.setId("CompartmentGlyph_1"); compartmentGlyph.setCompartmentId(compartment.getId()); BoundingBox bb = new BoundingBox(layoutns, "bb1", 5, 5, 390, 210); compartmentGlyph.setBoundingBox(bb); // create the SpeciesGlyphs SpeciesGlyph speciesGlyph1 = layout.createSpeciesGlyph(); speciesGlyph1.setId("SpeciesGlyph_1"); speciesGlyph1.setSpeciesId(species1.getId()); bb = new BoundingBox(layoutns, "bb2", 80, 26, 240, 24); speciesGlyph1.setBoundingBox(bb); TextGlyph textGlyph1 = layout.createTextGlyph(); textGlyph1.setId("TextGlyph_01"); bb = new BoundingBox(layoutns, "bbA", 92, 26, 228, 24); textGlyph1.setBoundingBox(bb); textGlyph1.setOriginOfTextId(speciesGlyph1.getId()); textGlyph1.setGraphicalObjectId(speciesGlyph1.getId()); SpeciesGlyph speciesGlyph2 = layout.createSpeciesGlyph(); speciesGlyph2.setId("SpeciesGlyph_2"); speciesGlyph2.setSpeciesId(species2.getId()); bb = new BoundingBox(layoutns, "bb3", 80, 170, 240, 24); speciesGlyph2.setBoundingBox(bb); TextGlyph textGlyph2 = layout.createTextGlyph(); textGlyph2.setId("TextGlyph_02"); bb = new BoundingBox(layoutns, "bbB", 92, 170, 228, 24); textGlyph2.setBoundingBox(bb); textGlyph2.setOriginOfTextId(speciesGlyph2.getId()); textGlyph2.setGraphicalObjectId(speciesGlyph2.getId()); // create the ReactionGlyphs ReactionGlyph reactionGlyph1 = layout.createReactionGlyph(); reactionGlyph1.setId("ReactionGlyph_1"); reactionGlyph1.setReactionId(reaction1.getId()); Curve reactionCurve1 = reactionGlyph1.getCurve(); LineSegment ls = reactionCurve1.createLineSegment(); Point p = new Point(layoutns, 165, 105); ls.setStart(p); p = new Point(layoutns, 165, 115); ls.setEnd(p); ReactionGlyph reactionGlyph2 = layout.createReactionGlyph(); reactionGlyph2.setId("ReactionGlyph_1"); reactionGlyph2.setReactionId(reaction2.getId()); Curve reactionCurve2 = reactionGlyph2.getCurve(); ls = reactionCurve2.createLineSegment(); p = new Point(layoutns, 235, 105); ls.setStart(p); p = new Point(layoutns, 235, 115); ls.setEnd(p); // add the SpeciesReferenceGlyphs SpeciesReferenceGlyph speciesReferenceGlyph1 = reactionGlyph1.createSpeciesReferenceGlyph(); speciesReferenceGlyph1.setId("SpeciesReferenceGlyph_1"); speciesReferenceGlyph1.setSpeciesGlyphId(speciesGlyph1.getId()); speciesReferenceGlyph1.setSpeciesReferenceId(reference1.getId()); speciesReferenceGlyph1.setRole(libsbml.SPECIES_ROLE_SUBSTRATE); Curve speciesReferenceCurve1 = speciesReferenceGlyph1.getCurve(); CubicBezier cb = speciesReferenceCurve1.createCubicBezier(); p = new Point(layoutns, 165, 105); cb.setStart(p); p = new Point(layoutns, 165, 90); cb.setBasePoint1(p); p = new Point(layoutns, 165, 90); cb.setBasePoint2(p); p = new Point(layoutns, 195, 60); cb.setEnd(p); SpeciesReferenceGlyph speciesReferenceGlyph2 = reactionGlyph1.createSpeciesReferenceGlyph(); speciesReferenceGlyph2.setId("SpeciesReferenceGlyph_2"); speciesReferenceGlyph2.setSpeciesGlyphId(speciesGlyph2.getId()); speciesReferenceGlyph2.setSpeciesReferenceId(reference2.getId()); speciesReferenceGlyph2.setRole(libsbml.SPECIES_ROLE_PRODUCT); Curve speciesReferenceCurve2 = speciesReferenceGlyph2.getCurve(); cb = speciesReferenceCurve2.createCubicBezier(); p = new Point(layoutns, 165, 115); cb.setStart(p); p = new Point(layoutns, 165, 130); cb.setBasePoint1(p); p = new Point(layoutns, 165, 130); cb.setBasePoint2(p); p = new Point(layoutns, 195, 160); cb.setEnd(p); SpeciesReferenceGlyph speciesReferenceGlyph3 = reactionGlyph2.createSpeciesReferenceGlyph(); speciesReferenceGlyph3.setId("SpeciesReferenceGlyph_3"); speciesReferenceGlyph3.setSpeciesGlyphId(speciesGlyph2.getId()); speciesReferenceGlyph3.setSpeciesReferenceId(reference3.getId()); speciesReferenceGlyph3.setRole(libsbml.SPECIES_ROLE_SUBSTRATE); Curve speciesReferenceCurve3 = speciesReferenceGlyph3.getCurve(); cb = speciesReferenceCurve3.createCubicBezier(); p = new Point(layoutns, 235, 115); cb.setStart(p); p = new Point(layoutns, 235, 130); cb.setBasePoint1(p); p = new Point(layoutns, 235, 130); cb.setBasePoint2(p); p = new Point(layoutns, 205, 160); cb.setEnd(p); SpeciesReferenceGlyph speciesReferenceGlyph4 = reactionGlyph2.createSpeciesReferenceGlyph(); speciesReferenceGlyph4.setId("SpeciesReferenceGlyph_4"); speciesReferenceGlyph4.setSpeciesGlyphId(speciesGlyph1.getId()); speciesReferenceGlyph4.setSpeciesReferenceId(reference4.getId()); speciesReferenceGlyph4.setRole(libsbml.SPECIES_ROLE_PRODUCT); Curve speciesReferenceCurve4 = speciesReferenceGlyph4.getCurve(); cb = speciesReferenceCurve4.createCubicBezier(); p = new Point(layoutns, 235, 105); cb.setStart(p); p = new Point(layoutns, 235, 90); cb.setBasePoint1(p); p = new Point(layoutns, 235, 90); cb.setBasePoint2(p); p = new Point(layoutns, 205, 60); cb.setEnd(p); libsbml.writeSBML(document, "layout_example1_L3-cs.xml"); Console.WriteLine("all done ..."); }