<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jsxgraph.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=132.180.233.197</id>
	<title>JSXGraph Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://jsxgraph.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=132.180.233.197"/>
	<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Special:Contributions/132.180.233.197"/>
	<updated>2026-04-06T03:29:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://jsxgraph.org/wiki/index.php?title=Extension&amp;diff=276</id>
		<title>Extension</title>
		<link rel="alternate" type="text/html" href="https://jsxgraph.org/wiki/index.php?title=Extension&amp;diff=276"/>
		<updated>2008-10-23T14:06:03Z</updated>

		<summary type="html">&lt;p&gt;132.180.233.197: New page: Because of the dynamic of JavaScript JSXGraph can easily be extended without touching the project&amp;#039;s source files.  == Triangle ==  For a very simple example we will implement a simple tria...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Because of the dynamic of JavaScript JSXGraph can easily be extended without touching the project&#039;s source files.&lt;br /&gt;
&lt;br /&gt;
== Triangle ==&lt;br /&gt;
&lt;br /&gt;
For a very simple example we will implement a simple triangle. This example is extremely minimal and uses only two methods which are required by every geometry element in JSXGraph: One function is written to create the element and one is invoked to register the element in JSXGraph.&lt;br /&gt;
&lt;br /&gt;
== Create-function ==&lt;br /&gt;
&lt;br /&gt;
This create function is used to construct a geometry element based on given parent elements. The function&#039;s definition is the same for every geometry element. It takes three parameters &#039;&#039;board&#039;&#039;, &#039;&#039;parents&#039;&#039;, &#039;&#039;attributes&#039;&#039; and returns the created object or an object which members are the created objects.&lt;br /&gt;
* &#039;&#039;board&#039;&#039; is a reference to the [http://jsxgraph.uni-bayreuth.de/docs/symbols/JXG.Board.html JXG.Board] the parents are on and the geometry element shall be put on,&lt;br /&gt;
* &#039;&#039;parents&#039;&#039; is an array of parent elements which define the element to construct,&lt;br /&gt;
* &#039;&#039;attributes&#039;&#039; define the look and feel of the element e.g. colors or if a point shall be fixed or free.&lt;br /&gt;
&lt;br /&gt;
E.g. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;JXG.createTriangle = function(board, parents, attributes) [...]&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The function doesn&#039;t have to be placed in the JXG namespace.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;...to be continued...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Register-method ==&lt;br /&gt;
&lt;br /&gt;
The [http://jsxgraph.uni-bayreuth.de/docs/symbols/JXG.JSXGraph.html JSX.JSXGraph] singleton has a method called [http://jsxgraph.uni-bayreuth.de/docs/symbols/JXG.JSXGraph.html#.registerElement registerElement] which takes two parameters &#039;&#039;element&#039;&#039; and &#039;&#039;creator&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&amp;lt;static&amp;gt; JXG.JSXGraph.registerElement(element, creator)&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;Element&#039;&#039; is a identification string like the strings passed in the first parameter of the [http://jsxgraph.uni-bayreuth.de/docs/symbols/JXG.Board.html#createElement createElement] method, e.g. &#039;point&#039;, &#039;circle&#039; or &#039;polygon&#039;. For our triangle we&#039;ll choose &#039;triangle&#039;,&lt;br /&gt;
* &#039;&#039;creator&#039;&#039; is a reference to the create-function for the geometry element. In case of our example it is JXG.createTriangle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;JXG.JSXGraph.registerElement(&#039;triangle&#039;, JXG.createTriangle);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The complete example code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
JXG.createTriangle = function(board, parents, attributes) {&lt;br /&gt;
    if(JXG.IsPoint(parents[0]) &amp;amp;&amp;amp; JXG.IsPoint(parents[1]) &amp;amp;&amp;amp; JXG.IsPoint(parents[2])) {&lt;br /&gt;
        var p1 = parents[0], p2 = parents[1], p3 = parents[2];&lt;br /&gt;
        var l1, l2, l3;&lt;br /&gt;
&lt;br /&gt;
        if((attributes == null) || (typeof attribues == undefined))&lt;br /&gt;
            attributes = new Object();&lt;br /&gt;
&lt;br /&gt;
        attributes.straightFirst = false;&lt;br /&gt;
        attributes.straightLast = false;&lt;br /&gt;
&lt;br /&gt;
        l1 = board.createElement(&#039;line&#039;, [p1, p2], attributes);&lt;br /&gt;
        l2 = board.createElement(&#039;line&#039;, [p2, p3], attributes);&lt;br /&gt;
        l3 = board.createElement(&#039;line&#039;, [p3, p1], attributes);&lt;br /&gt;
&lt;br /&gt;
        var g = new JXG.Group(board);&lt;br /&gt;
        g.addPoints([p1, p2, p3]);&lt;br /&gt;
&lt;br /&gt;
        return {A: p1, B: p2, C: p3, a: p4, b: l1, c: l2, G: g};&lt;br /&gt;
    } else {&lt;br /&gt;
        throw (&amp;quot;Can&#039;t create triangle with parent types &#039;&amp;quot; + (typeof parents[0]) + &amp;quot;&#039; and &#039;&amp;quot; + (typeof parents[1]) + &amp;quot;&#039; and &#039;&amp;quot; + (typeof parents[2]) + &amp;quot;&#039;.&amp;quot;);    &lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
JXG.JSXGraph.registerElement(&#039;triangle&#039;, JXG.createTriangle);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>132.180.233.197</name></author>
	</entry>
</feed>