<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Wings 3D Development Forum - Programming]]></title>
		<link>https://www.wings3d.com/forum/</link>
		<description><![CDATA[Wings 3D Development Forum - https://www.wings3d.com/forum]]></description>
		<pubDate>Thu, 07 May 2026 15:33:00 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA["How to" about context menus]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=3116</link>
			<pubDate>Wed, 24 May 2023 15:00:05 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=10">micheus</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=3116</guid>
			<description><![CDATA[I'm going to try share here a little about how to read and try to understand the menus when reading the source code the way I understood it. <br />
It's not finished yet, so I going to keep adding any other information I remember here.<br />
<br />
I hope this can at least help other to get a start point to find their own understanding. <img src="https://www.wings3d.com/forum/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_35" /><br />
<br />
<br />
I'm going to start by spotting that in order to support multiple languages (translations) we must to use the macro <span style="font-family: Courier;" class="mycode_font"><span style="font-style: italic;" class="mycode_i">?__(&lt;index&gt;, &lt;label&gt;)</span></span> in every place a text needs to be translated. This means menus, dialogs, windows, etc. The <span style="font-style: italic;" class="mycode_i">index</span> must be unique for functions with the same name, which means we can reuse them in any other function in the same module without any problem.<br />
<br />
All module/plugin that implements menus/sub-menus must export a menu/2 function;<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>export([menu/2, ...])</code></div></div><br />
<br />
The function get two parameters which the first is the parent's <span style="font-style: italic;" class="mycode_i">Id</span> and the second a list having its <span style="font-style: italic;" class="mycode_i">options</span> (the menu itself);<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>menu({&lt;id&gt;}, &lt;options_list&gt;)</code></div></div><br />
So, to append an menu option to the main menu as the Tools we can check for that this way:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">menu</span><span style="color: #007700">({</span><span style="color: #0000BB">tolls</span><span style="color: #007700">},&nbsp;</span><span style="color: #0000BB">Menu</span><span style="color: #007700">)&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">MyMenu&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Menu&nbsp;</span><span style="color: #007700">++&nbsp;</span><span style="color: #0000BB">MyMenu</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">menu</span><span style="color: #007700">(</span><span style="color: #0000BB">_</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Menu</span><span style="color: #007700">)&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Menu</span><span style="color: #007700">.<br /><br /></span><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;single&nbsp;option&nbsp;for&nbsp;LMB"</span><span style="color: #007700">)}].&nbsp;<br /></span></code></div></div></div><br />
<br />
In Wings3D, a menu option can have three different responses depending on which mouse button was used to select it. We refer them as <span style="font-style: italic;" class="mycode_i">LMB</span>, <span style="font-style: italic;" class="mycode_i">MMB</span> and <span style="font-style: italic;" class="mycode_i">RMB</span> action (Left, Middle and Right mouse button, respectively).<br />
<br />
A <span style="font-weight: bold;" class="mycode_b">simple option</span>, which the action is activated by pressing LMB, is constructed by using a tuple with three elements:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;}</code></div></div><br />
It will look like this (option and description/hint/tooltip):<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/XvQ07n6t/w3d-menu-single.png" loading="lazy"  alt="[Image: w3d-menu-single.png]" class="mycode_img" /></a><br />
<br />
If the the action will have the option to show the user a input dialog instead of only to run the action directly, then the item must includes a 4th parameter to indicate that which will result in a small gerar icon be shown in the right corner of the option when the menu is shown:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [option]}</code></div></div><br />
in this case our menu item would look like this:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;single&nbsp;option&nbsp;for&nbsp;LMB"</span><span style="color: #007700">)},&nbsp;[</span><span style="color: #0000BB">option</span><span style="color: #007700">]].&nbsp;<br /></span></code></div></div></div><br />
It will look like this (the [option] parameter will automatically add a second command/hint for RMB):<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/26yN1gzy/w3d-menu-single-option.png" loading="lazy"  alt="[Image: w3d-menu-single-option.png]" class="mycode_img" /></a><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Multiple options</span>, which the action is activated by others buttons than only pressing LMB, is constructed by using a list of tuples similar to the single option one, but the <span style="font-style: italic;" class="mycode_i">id</span> will be get from a pick option function which will handle the button clicked and now the 3rd parameter is a tuple that contains the description for each button option. If an mouse option will not be used its respective description must be an empty list (<span style="font-style: italic;" class="mycode_i">[]</span>). The 4th parameter stays optional and will keep working for LMB option only:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;click_function&gt;, {&lt;description/hint LMB&gt;, &lt;description/hint MMB&gt;, &lt;description/hint RMB&gt;}}</code></div></div><br />
This <span style="font-style: italic;" class="mycode_i">click_function</span> is a function that will return the real function that handle the mouse buttons pressed (or <span style="font-style: italic;" class="mycode_i">help</span> atom). The mouse_button value is <span style="font-style: italic;" class="mycode_i">1</span>, <span style="font-style: italic;" class="mycode_i">2</span> and <span style="font-style: italic;" class="mycode_i">3</span> for <span style="font-style: italic;" class="mycode_i">LMB</span>, <span style="font-style: italic;" class="mycode_i">MMB</span> and <span style="font-style: italic;" class="mycode_i">RMB</span> respectively:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;click_function&gt;() -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;fun<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt;help|mouse_button&gt;, _Ns) -&gt; &lt;command&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(_, _) -&gt; ignore<br />
&nbsp;&nbsp;&nbsp;&nbsp;end.</code></div></div>* that <span style="font-style: italic;" class="mycode_i">_Ns</span> parameter I don't know exactly what it stands for, but it is used in <span style="font-style: italic;" class="mycode_i">directions</span> function we can find in <span style="font-style: italic;" class="mycode_i">wings_util.erl</span> and is used to assembly commands and help information for menus.<br />
<br />
in this case our menu item would be defined like this:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">(),&nbsp;{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;1&nbsp;for&nbsp;LMB"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;2&nbsp;for&nbsp;MMB"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;3&nbsp;for&nbsp;RMB"</span><span style="color: #007700">)}&nbsp;}].<br /><br /></span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fun<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt1</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt2</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt3</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">_</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;</span><span style="color: #0000BB">ignore<br />&nbsp;&nbsp;&nbsp;&nbsp;end</span><span style="color: #007700">.&nbsp;<br /></span></code></div></div></div><br />
and it will look like this:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/bJ5ckLJT/w3d-menu-multiple-3.png" loading="lazy"  alt="[Image: w3d-menu-multiple-3.png]" class="mycode_img" /></a><br />
<br />
if we define only options for LMB and RMB, for instance, it can look like this:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/dVcF5W9N/w3d-menu-multiple-2.png" loading="lazy"  alt="[Image: w3d-menu-multiple-2.png]" class="mycode_img" /></a><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">"Pure" sub-menus</span> are constructed in a similar way as menu items, but it doesn't need a description (because it's not used) and we use a set &lt;id,function&gt; to create the menu cascade. This function will return a list of menu items. In case on of these items have a sub-menu we repeat this structure all over:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;{id, build_submenu_fun}&gt;}<br />
<br />
build_submenu_fun() -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;[{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [option]},<br />
&nbsp;&nbsp;&nbsp;&nbsp; :<br />
&nbsp;&nbsp;&nbsp;&nbsp; {&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [option]}]</code></div></div><br />
and then it can have this look:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #DD0000">"My&nbsp;menu"</span><span style="color: #007700">),&nbsp;{</span><span style="color: #0000BB">my_menu</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">build_submenu</span><span style="color: #007700">()}}]<br /><br /></span><span style="color: #0000BB">build_submenu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;1&nbsp;for&nbsp;submenu&nbsp;level&nbsp;1"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">id_option1</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Description&nbsp;of&nbsp;my&nbsp;option&nbsp;1"</span><span style="color: #007700">)},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;2&nbsp;for&nbsp;submenu&nbsp;level&nbsp;1"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">()&nbsp;,&nbsp;{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Description&nbsp;of&nbsp;my&nbsp;option&nbsp;2&nbsp;LMB"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Description&nbsp;of&nbsp;my&nbsp;option&nbsp;2&nbsp;RMB"</span><span style="color: #007700">)}].<br /><br /></span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fun<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt1</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt2</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">_</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;</span><span style="color: #0000BB">ignore<br />&nbsp;&nbsp;&nbsp;&nbsp;end</span><span style="color: #007700">.&nbsp;<br /></span></code></div></div></div><br />
Here is how a "pure" sub-menu item will look like:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/25zDDVM4/w3d-menu-submenu.png" loading="lazy"  alt="[Image: w3d-menu-submenu.png]" class="mycode_img" /></a><br />
<br />
and in this one there are three actions for the item which the action for LMB will call a sub-menu (lets call it <span style="font-weight: bold;" class="mycode_b">mixed menu/sub-menus</span>):<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/vZ7skWqY/w3d-menu-multiple-submenu.png" loading="lazy"  alt="[Image: w3d-menu-multiple-submenu.png]" class="mycode_img" /></a><br />
<br />
<br />
Menus can also have <span style="font-weight: bold;" class="mycode_b">check marked options</span>. We create them by providing as 4th parameter with a list with a single tuple this way:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [{crossmark, &lt;boolean_value&gt;}]}</code></div></div><br />
in this case our menu item would look like this:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_check_option</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;single&nbsp;option&nbsp;for&nbsp;LMB"</span><span style="color: #007700">),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{</span><span style="color: #0000BB">crossmark</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">wings_pref</span><span style="color: #007700">:</span><span style="color: #0000BB">get_value</span><span style="color: #007700">(</span><span style="color: #0000BB">my_check_pref</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">)}]].&nbsp;<br /></span></code></div></div></div>In this case we are checking for the <span style="font-family: Courier;" class="mycode_font">my_check_pref</span> id stored in the preferences and giving it a default value <span style="font-family: Courier;" class="mycode_font">false</span>.<br />
<br />
The result is something like this:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/tCr4vbhz/menus-checkmark.png" loading="lazy"  alt="[Image: menus-checkmark.png]" class="mycode_img" /></a><br />
<br />
Default preferences values can be defined in a module using the <span style="font-family: Courier;" class="mycode_font">init/0</span> function.<br />
<br />
<br />
<br />
<span style="color: #9400A3;" class="mycode_color">p.s.: The elements not delimited by <span style="font-style: italic;" class="mycode_i">'&lt;'</span> and <span style="font-style: italic;" class="mycode_i">'&gt;'</span> are kept as they are in the code.</span>]]></description>
			<content:encoded><![CDATA[I'm going to try share here a little about how to read and try to understand the menus when reading the source code the way I understood it. <br />
It's not finished yet, so I going to keep adding any other information I remember here.<br />
<br />
I hope this can at least help other to get a start point to find their own understanding. <img src="https://www.wings3d.com/forum/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_35" /><br />
<br />
<br />
I'm going to start by spotting that in order to support multiple languages (translations) we must to use the macro <span style="font-family: Courier;" class="mycode_font"><span style="font-style: italic;" class="mycode_i">?__(&lt;index&gt;, &lt;label&gt;)</span></span> in every place a text needs to be translated. This means menus, dialogs, windows, etc. The <span style="font-style: italic;" class="mycode_i">index</span> must be unique for functions with the same name, which means we can reuse them in any other function in the same module without any problem.<br />
<br />
All module/plugin that implements menus/sub-menus must export a menu/2 function;<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>export([menu/2, ...])</code></div></div><br />
<br />
The function get two parameters which the first is the parent's <span style="font-style: italic;" class="mycode_i">Id</span> and the second a list having its <span style="font-style: italic;" class="mycode_i">options</span> (the menu itself);<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>menu({&lt;id&gt;}, &lt;options_list&gt;)</code></div></div><br />
So, to append an menu option to the main menu as the Tools we can check for that this way:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">menu</span><span style="color: #007700">({</span><span style="color: #0000BB">tolls</span><span style="color: #007700">},&nbsp;</span><span style="color: #0000BB">Menu</span><span style="color: #007700">)&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">MyMenu&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Menu&nbsp;</span><span style="color: #007700">++&nbsp;</span><span style="color: #0000BB">MyMenu</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">menu</span><span style="color: #007700">(</span><span style="color: #0000BB">_</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">Menu</span><span style="color: #007700">)&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">Menu</span><span style="color: #007700">.<br /><br /></span><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;single&nbsp;option&nbsp;for&nbsp;LMB"</span><span style="color: #007700">)}].&nbsp;<br /></span></code></div></div></div><br />
<br />
In Wings3D, a menu option can have three different responses depending on which mouse button was used to select it. We refer them as <span style="font-style: italic;" class="mycode_i">LMB</span>, <span style="font-style: italic;" class="mycode_i">MMB</span> and <span style="font-style: italic;" class="mycode_i">RMB</span> action (Left, Middle and Right mouse button, respectively).<br />
<br />
A <span style="font-weight: bold;" class="mycode_b">simple option</span>, which the action is activated by pressing LMB, is constructed by using a tuple with three elements:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;}</code></div></div><br />
It will look like this (option and description/hint/tooltip):<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/XvQ07n6t/w3d-menu-single.png" loading="lazy"  alt="[Image: w3d-menu-single.png]" class="mycode_img" /></a><br />
<br />
If the the action will have the option to show the user a input dialog instead of only to run the action directly, then the item must includes a 4th parameter to indicate that which will result in a small gerar icon be shown in the right corner of the option when the menu is shown:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [option]}</code></div></div><br />
in this case our menu item would look like this:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;single&nbsp;option&nbsp;for&nbsp;LMB"</span><span style="color: #007700">)},&nbsp;[</span><span style="color: #0000BB">option</span><span style="color: #007700">]].&nbsp;<br /></span></code></div></div></div><br />
It will look like this (the [option] parameter will automatically add a second command/hint for RMB):<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/26yN1gzy/w3d-menu-single-option.png" loading="lazy"  alt="[Image: w3d-menu-single-option.png]" class="mycode_img" /></a><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Multiple options</span>, which the action is activated by others buttons than only pressing LMB, is constructed by using a list of tuples similar to the single option one, but the <span style="font-style: italic;" class="mycode_i">id</span> will be get from a pick option function which will handle the button clicked and now the 3rd parameter is a tuple that contains the description for each button option. If an mouse option will not be used its respective description must be an empty list (<span style="font-style: italic;" class="mycode_i">[]</span>). The 4th parameter stays optional and will keep working for LMB option only:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;click_function&gt;, {&lt;description/hint LMB&gt;, &lt;description/hint MMB&gt;, &lt;description/hint RMB&gt;}}</code></div></div><br />
This <span style="font-style: italic;" class="mycode_i">click_function</span> is a function that will return the real function that handle the mouse buttons pressed (or <span style="font-style: italic;" class="mycode_i">help</span> atom). The mouse_button value is <span style="font-style: italic;" class="mycode_i">1</span>, <span style="font-style: italic;" class="mycode_i">2</span> and <span style="font-style: italic;" class="mycode_i">3</span> for <span style="font-style: italic;" class="mycode_i">LMB</span>, <span style="font-style: italic;" class="mycode_i">MMB</span> and <span style="font-style: italic;" class="mycode_i">RMB</span> respectively:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;click_function&gt;() -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;fun<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt;help|mouse_button&gt;, _Ns) -&gt; &lt;command&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(_, _) -&gt; ignore<br />
&nbsp;&nbsp;&nbsp;&nbsp;end.</code></div></div>* that <span style="font-style: italic;" class="mycode_i">_Ns</span> parameter I don't know exactly what it stands for, but it is used in <span style="font-style: italic;" class="mycode_i">directions</span> function we can find in <span style="font-style: italic;" class="mycode_i">wings_util.erl</span> and is used to assembly commands and help information for menus.<br />
<br />
in this case our menu item would be defined like this:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">(),&nbsp;{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;1&nbsp;for&nbsp;LMB"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;2&nbsp;for&nbsp;MMB"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;3&nbsp;for&nbsp;RMB"</span><span style="color: #007700">)}&nbsp;}].<br /><br /></span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fun<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt1</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt2</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt3</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">_</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;</span><span style="color: #0000BB">ignore<br />&nbsp;&nbsp;&nbsp;&nbsp;end</span><span style="color: #007700">.&nbsp;<br /></span></code></div></div></div><br />
and it will look like this:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/bJ5ckLJT/w3d-menu-multiple-3.png" loading="lazy"  alt="[Image: w3d-menu-multiple-3.png]" class="mycode_img" /></a><br />
<br />
if we define only options for LMB and RMB, for instance, it can look like this:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/dVcF5W9N/w3d-menu-multiple-2.png" loading="lazy"  alt="[Image: w3d-menu-multiple-2.png]" class="mycode_img" /></a><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">"Pure" sub-menus</span> are constructed in a similar way as menu items, but it doesn't need a description (because it's not used) and we use a set &lt;id,function&gt; to create the menu cascade. This function will return a list of menu items. In case on of these items have a sub-menu we repeat this structure all over:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;{id, build_submenu_fun}&gt;}<br />
<br />
build_submenu_fun() -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;[{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [option]},<br />
&nbsp;&nbsp;&nbsp;&nbsp; :<br />
&nbsp;&nbsp;&nbsp;&nbsp; {&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [option]}]</code></div></div><br />
and then it can have this look:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #DD0000">"My&nbsp;menu"</span><span style="color: #007700">),&nbsp;{</span><span style="color: #0000BB">my_menu</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">build_submenu</span><span style="color: #007700">()}}]<br /><br /></span><span style="color: #0000BB">build_submenu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;1&nbsp;for&nbsp;submenu&nbsp;level&nbsp;1"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">id_option1</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Description&nbsp;of&nbsp;my&nbsp;option&nbsp;1"</span><span style="color: #007700">)},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;option&nbsp;2&nbsp;for&nbsp;submenu&nbsp;level&nbsp;1"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">()&nbsp;,&nbsp;{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Description&nbsp;of&nbsp;my&nbsp;option&nbsp;2&nbsp;LMB"</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Description&nbsp;of&nbsp;my&nbsp;option&nbsp;2&nbsp;RMB"</span><span style="color: #007700">)}].<br /><br /></span><span style="color: #0000BB">my_menu_items</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fun<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt1</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;{</span><span style="color: #0000BB">my_option</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">opt2</span><span style="color: #007700">};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000BB">_</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">_</span><span style="color: #007700">)&nbsp;-&gt;&nbsp;</span><span style="color: #0000BB">ignore<br />&nbsp;&nbsp;&nbsp;&nbsp;end</span><span style="color: #007700">.&nbsp;<br /></span></code></div></div></div><br />
Here is how a "pure" sub-menu item will look like:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/25zDDVM4/w3d-menu-submenu.png" loading="lazy"  alt="[Image: w3d-menu-submenu.png]" class="mycode_img" /></a><br />
<br />
and in this one there are three actions for the item which the action for LMB will call a sub-menu (lets call it <span style="font-weight: bold;" class="mycode_b">mixed menu/sub-menus</span>):<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/vZ7skWqY/w3d-menu-multiple-submenu.png" loading="lazy"  alt="[Image: w3d-menu-multiple-submenu.png]" class="mycode_img" /></a><br />
<br />
<br />
Menus can also have <span style="font-weight: bold;" class="mycode_b">check marked options</span>. We create them by providing as 4th parameter with a list with a single tuple this way:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{&lt;label&gt;, &lt;id&gt;, &lt;description/hint&gt;, [{crossmark, &lt;boolean_value&gt;}]}</code></div></div><br />
in this case our menu item would look like this:<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">build_my_menu</span><span style="color: #007700">()&nbsp;-&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;[{?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;Option"</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">my_check_option</span><span style="color: #007700">,&nbsp;?</span><span style="color: #0000BB">__</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"My&nbsp;single&nbsp;option&nbsp;for&nbsp;LMB"</span><span style="color: #007700">),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[{</span><span style="color: #0000BB">crossmark</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">wings_pref</span><span style="color: #007700">:</span><span style="color: #0000BB">get_value</span><span style="color: #007700">(</span><span style="color: #0000BB">my_check_pref</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">)}]].&nbsp;<br /></span></code></div></div></div>In this case we are checking for the <span style="font-family: Courier;" class="mycode_font">my_check_pref</span> id stored in the preferences and giving it a default value <span style="font-family: Courier;" class="mycode_font">false</span>.<br />
<br />
The result is something like this:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://i.postimg.cc/tCr4vbhz/menus-checkmark.png" loading="lazy"  alt="[Image: menus-checkmark.png]" class="mycode_img" /></a><br />
<br />
Default preferences values can be defined in a module using the <span style="font-family: Courier;" class="mycode_font">init/0</span> function.<br />
<br />
<br />
<br />
<span style="color: #9400A3;" class="mycode_color">p.s.: The elements not delimited by <span style="font-style: italic;" class="mycode_i">'&lt;'</span> and <span style="font-style: italic;" class="mycode_i">'&gt;'</span> are kept as they are in the code.</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Export to a temp .obj and import from temp .obj]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2978</link>
			<pubDate>Sun, 17 Jan 2021 04:07:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=6498">morikan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2978</guid>
			<description><![CDATA[Hi<br />
<br />
I do not know anything about Erlang. I am wondering how hard it would be to implement a simple plugin that would let me implement exporting to a temp.obj and importing from temp.obj <br />
<br />
I want this so that I can exchange files between other apps and Wings quickly.<br />
<br />
thanks]]></description>
			<content:encoded><![CDATA[Hi<br />
<br />
I do not know anything about Erlang. I am wondering how hard it would be to implement a simple plugin that would let me implement exporting to a temp.obj and importing from temp.obj <br />
<br />
I want this so that I can exchange files between other apps and Wings quickly.<br />
<br />
thanks]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[New UV Mapping Option]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2901</link>
			<pubDate>Sun, 26 Jan 2020 20:48:28 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=107">some_yahoo</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2901</guid>
			<description><![CDATA[So I have a wheel, (basically a cylinder).  I have marked ALL the edges for cut, and I want to overlay all the segments so that they all have the same uv coordinates.<br />
<br />
Wings wants to unwrap it all in a pinwheel.  What I'd like is a way to perform the following "macro"<br />
<br />
<ol type="1" class="mycode_list"><li>Find the longest side of the polygon (object level of course, not face)<br />
</li>
<li>Rotate until that side is horizontal.<br />
</li>
<li>Do this on as many items as are selected.<br />
</li>
</ol>
<br />
After that, I can align them all center, do a 180 flip on any that are upside down, and scale to taste.<br />
<br />
Is there anything like that, or alternately how do I get started writing a plugin for this beast?<br />
<br />
Because I have hundreds of these to rotate and align, and a computer would be able to do this in a flash.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.wings3d.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=596" target="_blank" title="">Capture.JPG</a> (Size: 115.83 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[So I have a wheel, (basically a cylinder).  I have marked ALL the edges for cut, and I want to overlay all the segments so that they all have the same uv coordinates.<br />
<br />
Wings wants to unwrap it all in a pinwheel.  What I'd like is a way to perform the following "macro"<br />
<br />
<ol type="1" class="mycode_list"><li>Find the longest side of the polygon (object level of course, not face)<br />
</li>
<li>Rotate until that side is horizontal.<br />
</li>
<li>Do this on as many items as are selected.<br />
</li>
</ol>
<br />
After that, I can align them all center, do a 180 flip on any that are upside down, and scale to taste.<br />
<br />
Is there anything like that, or alternately how do I get started writing a plugin for this beast?<br />
<br />
Because I have hundreds of these to rotate and align, and a computer would be able to do this in a flash.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.wings3d.com/forum/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=596" target="_blank" title="">Capture.JPG</a> (Size: 115.83 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[fixed]can't find the cl.exe]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2882</link>
			<pubDate>Fri, 03 Jan 2020 08:25:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=3196">nigec</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2882</guid>
			<description><![CDATA[I manage to make W3D last night on Windows 10 however on the "rebar compile" command it fails to find cl.exe.<br />
The path for cl.exe is set for vs2017 but I'm guessing something is wrong for my msys64 setup?<br />
<br />
the header files for OpenCL and the lib are there from the nvidia sdk<br />
C:\wingsdev\msys64\usr\include\opencl.h (and the other files in the sdk folder)<br />
C:\wingsdev\msys64\usr\lib\OpenCL.lib<br />
<br />
I don't "need" it working but I guess it would be nice if it did lol<br />
<br />
I'm currently looking at my Thea script but I'm considering porting it for Luxcore.. which is probably the best free option these days<br />
if Wings had a ply exporter that would be really easy!!<br />
<br />
edit..<br />
after some messing about I now get:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; rebar compile<br />
==&gt; cl (compile)<br />
make: Entering directory '/c/wingsdev/src/cl/c_src'<br />
make nif TYPE=release<br />
make[1]: Entering directory '/c/wingsdev/src/cl/c_src'<br />
gcc -c -ocl_nif.o -Wall -Wextra -Wswitch-default -Wswitch-enum -D_THREAD_SAFE -D_REENTRANT -fno-common -Wno-deprecated-declarations -Wno-missing-field-initializers -I"c:/Program Files/erl10.5/usr/include" cl_nif.c<br />
/bin/sh: gcc: command not found<br />
make[1]: *** [Makefile:188: cl_nif.o] Error 127<br />
make[1]: Leaving directory '/c/wingsdev/src/cl/c_src'<br />
make: *** [Makefile:167: all] Error 2<br />
make: Leaving directory '/c/wingsdev/src/cl/c_src'<br />
ERROR: Command [compile] failed!</code></div></div><br />
<br />
edit2:<br />
you can get the include and lib files here:<br />
<a href="https://github.com/GPUOpen-LibrariesAndSDKs/OCL-SDK/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/GPUOpen-LibrariesAndS...K/releases</a>]]></description>
			<content:encoded><![CDATA[I manage to make W3D last night on Windows 10 however on the "rebar compile" command it fails to find cl.exe.<br />
The path for cl.exe is set for vs2017 but I'm guessing something is wrong for my msys64 setup?<br />
<br />
the header files for OpenCL and the lib are there from the nvidia sdk<br />
C:\wingsdev\msys64\usr\include\opencl.h (and the other files in the sdk folder)<br />
C:\wingsdev\msys64\usr\lib\OpenCL.lib<br />
<br />
I don't "need" it working but I guess it would be nice if it did lol<br />
<br />
I'm currently looking at my Thea script but I'm considering porting it for Luxcore.. which is probably the best free option these days<br />
if Wings had a ply exporter that would be really easy!!<br />
<br />
edit..<br />
after some messing about I now get:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; rebar compile<br />
==&gt; cl (compile)<br />
make: Entering directory '/c/wingsdev/src/cl/c_src'<br />
make nif TYPE=release<br />
make[1]: Entering directory '/c/wingsdev/src/cl/c_src'<br />
gcc -c -ocl_nif.o -Wall -Wextra -Wswitch-default -Wswitch-enum -D_THREAD_SAFE -D_REENTRANT -fno-common -Wno-deprecated-declarations -Wno-missing-field-initializers -I"c:/Program Files/erl10.5/usr/include" cl_nif.c<br />
/bin/sh: gcc: command not found<br />
make[1]: *** [Makefile:188: cl_nif.o] Error 127<br />
make[1]: Leaving directory '/c/wingsdev/src/cl/c_src'<br />
make: *** [Makefile:167: all] Error 2<br />
make: Leaving directory '/c/wingsdev/src/cl/c_src'<br />
ERROR: Command [compile] failed!</code></div></div><br />
<br />
edit2:<br />
you can get the include and lib files here:<br />
<a href="https://github.com/GPUOpen-LibrariesAndSDKs/OCL-SDK/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/GPUOpen-LibrariesAndS...K/releases</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[32bit Linux]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2878</link>
			<pubDate>Thu, 02 Jan 2020 08:12:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=3196">nigec</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2878</guid>
			<description><![CDATA[I have 2.1.7 installed on Raspbian os but its crashing a lot<br />
Raspbian is installed on a laptop not a Pi, I had considered trying to build Wings but the tut is out of date and I get the feeling I'm setting myself up to fail, I'm not Linux savvy so if it goes wrong I doubt I could solve it..<br />
Is there a recent  32bit version?<br />
<br />
I have Raspbian because its faster than Lubuntu but sadly the desktop environment is 32bit]]></description>
			<content:encoded><![CDATA[I have 2.1.7 installed on Raspbian os but its crashing a lot<br />
Raspbian is installed on a laptop not a Pi, I had considered trying to build Wings but the tut is out of date and I get the feeling I'm setting myself up to fail, I'm not Linux savvy so if it goes wrong I doubt I could solve it..<br />
Is there a recent  32bit version?<br />
<br />
I have Raspbian because its faster than Lubuntu but sadly the desktop environment is 32bit]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[how to make plugins from the command line]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2681</link>
			<pubDate>Sat, 08 Sep 2018 22:00:27 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=4741">hartsantler</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2681</guid>
			<description><![CDATA[I am trying to figure out how to create simple shapes from the command line (using expressions and not compiling it as a plugin), here is what i have so far that is not working yet.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>BuildShape = fun(Prefix, Fs, Vs, PostFix) -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;We = wings_we:build(Fs, Vs),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Name = Prefix++PostFix,<br />
&nbsp;&nbsp;&nbsp;&nbsp;St = wpa:get_state(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Shapes0 = element(1, St),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Shapes = gb_trees:insert(0, We, Shapes0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;erlang:setelement(1, St, Shapes) end.<br />
<br />
Tetrahedron = fun(L, PostFix) -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Xi = L/2.0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Hp = math:sqrt(3.0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Li = Xi*Hp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Zi = Xi/Hp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Yi = L * math:sqrt(2.0/3.0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Yf = Yi / 3.0,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Fs = [[2,1,0],[1,2,3],[1,3,0],[3,2,0]],<br />
&nbsp;&nbsp;&nbsp;&nbsp;Vs0 = [{ 0.0,&nbsp;&nbsp;Yi-Yf,&nbsp;&nbsp;0.0},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 0.0, -Yf,&nbsp;&nbsp; Li-Zi},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { -Xi, -Yf,&nbsp;&nbsp;&nbsp;&nbsp; -Zi},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;Xi, -Yf,&nbsp;&nbsp;&nbsp;&nbsp; -Zi}],<br />
&nbsp;&nbsp;&nbsp;&nbsp;BuildShape("tetrahedron", Fs, Vs0, PostFix) end.<br />
<br />
Tetrahedron(1.0, "1").</code></div></div><br />
The error i get is:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>** exception error: no function clause matching <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gb_trees:insert(0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{we,undefined,0,[],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {array,6,10,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{edge,0,1,2,0,4,2,1,3},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,0,2,0,3,3,0,2,5},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,0,3,3,2,5,1,0,4},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,1,2,1,0,5,4,0,1},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,1,3,2,1,2,0,3,5},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,2,3,1,3,4,3,1,2},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none,none,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {4,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{2,0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,3,{0,0,nil,nil},nil},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {3,1,nil,nil}}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,nil},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {array,4,10,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0,0,1,2,undefined,undefined,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {array,4,10,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{0.0,0.5443310539518174,0.0},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0.0,-0.2721655269759087,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.5773502691896257},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {-0.5,-0.2721655269759087,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.2886751345948129},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0.5,-0.2721655269759087,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.2886751345948129},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,nil},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default,6,none,none,[]},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st) (gb_trees.erl, line 276)</code></div></div>]]></description>
			<content:encoded><![CDATA[I am trying to figure out how to create simple shapes from the command line (using expressions and not compiling it as a plugin), here is what i have so far that is not working yet.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>BuildShape = fun(Prefix, Fs, Vs, PostFix) -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;We = wings_we:build(Fs, Vs),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Name = Prefix++PostFix,<br />
&nbsp;&nbsp;&nbsp;&nbsp;St = wpa:get_state(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Shapes0 = element(1, St),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Shapes = gb_trees:insert(0, We, Shapes0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;erlang:setelement(1, St, Shapes) end.<br />
<br />
Tetrahedron = fun(L, PostFix) -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Xi = L/2.0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Hp = math:sqrt(3.0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Li = Xi*Hp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Zi = Xi/Hp,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Yi = L * math:sqrt(2.0/3.0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;Yf = Yi / 3.0,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Fs = [[2,1,0],[1,2,3],[1,3,0],[3,2,0]],<br />
&nbsp;&nbsp;&nbsp;&nbsp;Vs0 = [{ 0.0,&nbsp;&nbsp;Yi-Yf,&nbsp;&nbsp;0.0},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 0.0, -Yf,&nbsp;&nbsp; Li-Zi},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { -Xi, -Yf,&nbsp;&nbsp;&nbsp;&nbsp; -Zi},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;Xi, -Yf,&nbsp;&nbsp;&nbsp;&nbsp; -Zi}],<br />
&nbsp;&nbsp;&nbsp;&nbsp;BuildShape("tetrahedron", Fs, Vs0, PostFix) end.<br />
<br />
Tetrahedron(1.0, "1").</code></div></div><br />
The error i get is:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>** exception error: no function clause matching <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gb_trees:insert(0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{we,undefined,0,[],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {array,6,10,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{edge,0,1,2,0,4,2,1,3},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,0,2,0,3,3,0,2,5},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,0,3,3,2,5,1,0,4},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,1,2,1,0,5,4,0,1},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,1,3,2,1,2,0,3,5},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {edge,2,3,1,3,4,3,1,2},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none,none,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {4,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{2,0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {1,3,{0,0,nil,nil},nil},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {3,1,nil,nil}}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,nil},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {array,4,10,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0,0,1,2,undefined,undefined,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {array,4,10,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{0.0,0.5443310539518174,0.0},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0.0,-0.2721655269759087,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.5773502691896257},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {-0.5,-0.2721655269759087,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.2886751345948129},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0.5,-0.2721655269759087,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.2886751345948129},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undefined,undefined,undefined}},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0,nil},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default,6,none,none,[]},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st) (gb_trees.erl, line 276)</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[batch importer]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2680</link>
			<pubDate>Sat, 08 Sep 2018 16:12:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=4741">hartsantler</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2680</guid>
			<description><![CDATA[I am trying to figure out how to batch import multiple obj and collada files when wings starts up.<br />
I'm new to erlang, and taken a look at the code in: e3d_obj.erl, wings_console.erl, wings_start.erl, wpa.erl, wpc_collada.erl, and wings_plugin.erl.<br />
<br />
So far i have this code, which loads my obj, but then fails to update the view or show it in the Wings UI.  What am i missing?<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{ok, E3DFile} = e3d_obj:import("/home/username/test.obj").<br />
St0 = wpa:get_state().<br />
wings_import:import(E3DFile, St0).</code></div></div><br />
<a href="https://github.com/dgud/wings/issues/298" target="_blank" rel="noopener" class="mycode_url">https://github.com/dgud/wings/issues/298</a>]]></description>
			<content:encoded><![CDATA[I am trying to figure out how to batch import multiple obj and collada files when wings starts up.<br />
I'm new to erlang, and taken a look at the code in: e3d_obj.erl, wings_console.erl, wings_start.erl, wpa.erl, wpc_collada.erl, and wings_plugin.erl.<br />
<br />
So far i have this code, which loads my obj, but then fails to update the view or show it in the Wings UI.  What am i missing?<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>{ok, E3DFile} = e3d_obj:import("/home/username/test.obj").<br />
St0 = wpa:get_state().<br />
wings_import:import(E3DFile, St0).</code></div></div><br />
<a href="https://github.com/dgud/wings/issues/298" target="_blank" rel="noopener" class="mycode_url">https://github.com/dgud/wings/issues/298</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[About the windows hierarchy]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2671</link>
			<pubDate>Mon, 30 Jul 2018 15:33:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=10">micheus</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2671</guid>
			<description><![CDATA[I'm sharing some sketches I need to create in order to help me to "visualize" the relationship between the windows (frames/panels/sizers) introduced with the adoption of the <a href="https://www.wxwidgets.org/" target="_blank" rel="noopener" class="mycode_url">wxWidgets library</a> as the new UI (user interface). Maybe it can be useful to any (future) new coders too.<br />
Not all controls/events/functions - available in the wxWidgets library - are exposed to us by Erlang. To know what is available we can check the help page for <a href="http://erlang.org/doc/man/wx.html" target="_blank" rel="noopener" class="mycode_url">wx</a> module.<br />
<br />
In this layout we can see the way the windows are stored in the preferences file as well as how they are constructed in the memory. The windows are arranged from the <span style="font-style: italic;" class="mycode_i">left</span> to <span style="font-style: italic;" class="mycode_i">right</span> and from <span style="font-style: italic;" class="mycode_i">bottom</span> to <span style="font-style: italic;" class="mycode_i">top</span>:<br />
<br />
<a href="https://postimg.cc/image/qchtp5qt7/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/6hvs31blr/wings_windows_layout.png" loading="lazy"  alt="[Image: wings_windows_layout.png]" class="mycode_img" /></a><br />
<br />
<br />
The <span style="font-style: italic;" class="mycode_i">wings_frame.erl</span> module is the one where the main window (<span style="font-style: italic;" class="mycode_i">top_frame</span>) is constructed and the sub-windows are created/loaded/stored.<br />
The docked windows are related to the <span style="font-style: italic;" class="mycode_i">split</span> record which will always define the way the frame (<span style="font-style: italic;" class="mycode_i">wxMiniFrame</span>) will be splitted (<span style="font-style: italic;" class="mycode_i">vertically</span> or <span style="font-style: italic;" class="mycode_i">horizontally</span>) and the two windows docked (<span style="font-style: italic;" class="mycode_i">win1</span> and <span style="font-style: italic;" class="mycode_i">win2</span>). All float windows are related to the <span style="font-style: italic;" class="mycode_i">loose</span> record:<br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/nv62hv4bz/wings_frame.png" loading="lazy"  alt="[Image: wings_frame.png]" class="mycode_img" /></a><br />
<br />
<br />
The <span style="font-style: italic;" class="mycode_i">wings_wm.erl</span> module manages all the events related to the windows in Wings3D as well as it "keeps" the windows list (<span style="font-style: italic;" class="mycode_i">wm_windows</span>):<br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/jm1cfotcv/wings_win_geometry.png" loading="lazy"  alt="[Image: wings_win_geometry.png]" class="mycode_img" /></a><br />
<br />
<br />
All sub-windows are created in the same way, but the <span style="font-style: italic;" class="mycode_i">Geometry</span> one is handled in a different way by the <span style="font-style: italic;" class="mycode_i">wings_wm.erl</span> module:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/hu8dkspfj/wings_win_outliner.png" loading="lazy"  alt="[Image: wings_win_outliner.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/52u7eandb/wings_win_palette.png" loading="lazy"  alt="[Image: wings_win_palette.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/kobiy9u6n/wings_win_sel_group.png" loading="lazy"  alt="[Image: wings_win_sel_group.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/res07ou73/wings_win_tweak.png" loading="lazy"  alt="[Image: wings_win_tweak.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/a1hpsu6lr/wings_win_views.png" loading="lazy"  alt="[Image: wings_win_views.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/5uwvdmhbj/wings_win_snap_image.png" loading="lazy"  alt="[Image: wings_win_snap_image.png]" class="mycode_img" /></a>]]></description>
			<content:encoded><![CDATA[I'm sharing some sketches I need to create in order to help me to "visualize" the relationship between the windows (frames/panels/sizers) introduced with the adoption of the <a href="https://www.wxwidgets.org/" target="_blank" rel="noopener" class="mycode_url">wxWidgets library</a> as the new UI (user interface). Maybe it can be useful to any (future) new coders too.<br />
Not all controls/events/functions - available in the wxWidgets library - are exposed to us by Erlang. To know what is available we can check the help page for <a href="http://erlang.org/doc/man/wx.html" target="_blank" rel="noopener" class="mycode_url">wx</a> module.<br />
<br />
In this layout we can see the way the windows are stored in the preferences file as well as how they are constructed in the memory. The windows are arranged from the <span style="font-style: italic;" class="mycode_i">left</span> to <span style="font-style: italic;" class="mycode_i">right</span> and from <span style="font-style: italic;" class="mycode_i">bottom</span> to <span style="font-style: italic;" class="mycode_i">top</span>:<br />
<br />
<a href="https://postimg.cc/image/qchtp5qt7/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/6hvs31blr/wings_windows_layout.png" loading="lazy"  alt="[Image: wings_windows_layout.png]" class="mycode_img" /></a><br />
<br />
<br />
The <span style="font-style: italic;" class="mycode_i">wings_frame.erl</span> module is the one where the main window (<span style="font-style: italic;" class="mycode_i">top_frame</span>) is constructed and the sub-windows are created/loaded/stored.<br />
The docked windows are related to the <span style="font-style: italic;" class="mycode_i">split</span> record which will always define the way the frame (<span style="font-style: italic;" class="mycode_i">wxMiniFrame</span>) will be splitted (<span style="font-style: italic;" class="mycode_i">vertically</span> or <span style="font-style: italic;" class="mycode_i">horizontally</span>) and the two windows docked (<span style="font-style: italic;" class="mycode_i">win1</span> and <span style="font-style: italic;" class="mycode_i">win2</span>). All float windows are related to the <span style="font-style: italic;" class="mycode_i">loose</span> record:<br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/nv62hv4bz/wings_frame.png" loading="lazy"  alt="[Image: wings_frame.png]" class="mycode_img" /></a><br />
<br />
<br />
The <span style="font-style: italic;" class="mycode_i">wings_wm.erl</span> module manages all the events related to the windows in Wings3D as well as it "keeps" the windows list (<span style="font-style: italic;" class="mycode_i">wm_windows</span>):<br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/jm1cfotcv/wings_win_geometry.png" loading="lazy"  alt="[Image: wings_win_geometry.png]" class="mycode_img" /></a><br />
<br />
<br />
All sub-windows are created in the same way, but the <span style="font-style: italic;" class="mycode_i">Geometry</span> one is handled in a different way by the <span style="font-style: italic;" class="mycode_i">wings_wm.erl</span> module:<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/hu8dkspfj/wings_win_outliner.png" loading="lazy"  alt="[Image: wings_win_outliner.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/52u7eandb/wings_win_palette.png" loading="lazy"  alt="[Image: wings_win_palette.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/kobiy9u6n/wings_win_sel_group.png" loading="lazy"  alt="[Image: wings_win_sel_group.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/res07ou73/wings_win_tweak.png" loading="lazy"  alt="[Image: wings_win_tweak.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/a1hpsu6lr/wings_win_views.png" loading="lazy"  alt="[Image: wings_win_views.png]" class="mycode_img" /></a><br />
<br />
<a href="https://postimages.org/" target="_blank" rel="noopener" class="mycode_url"><img src="https://s25.postimg.cc/5uwvdmhbj/wings_win_snap_image.png" loading="lazy"  alt="[Image: wings_win_snap_image.png]" class="mycode_img" /></a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[emacs setup]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2614</link>
			<pubDate>Sun, 21 Jan 2018 19:42:08 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=3196">nigec</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2614</guid>
			<description><![CDATA[I've setup emacs as described on the forum and I have it so its using erlang syntax highlighting.<br />
Is it possible to get it to show errors in the code? I'm used to C# and Visual Studio which finds errors straight away.<br />
is it possible to include.... "include("wings.hrl")."  paths?<br />
I'm using Win10<br />
C:\wingsdev<br />
C:\wingsdev\emacs<br />
C:\wingsdev\src\wings]]></description>
			<content:encoded><![CDATA[I've setup emacs as described on the forum and I have it so its using erlang syntax highlighting.<br />
Is it possible to get it to show errors in the code? I'm used to C# and Visual Studio which finds errors straight away.<br />
is it possible to include.... "include("wings.hrl")."  paths?<br />
I'm using Win10<br />
C:\wingsdev<br />
C:\wingsdev\emacs<br />
C:\wingsdev\src\wings]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Erlang Run Time Errors]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2421</link>
			<pubDate>Thu, 02 Mar 2017 21:06:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=12">oort</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2421</guid>
			<description><![CDATA[Starting a thread with questions about how to read Run Time errors.<br />
<br />
I am back to playing with converting the Stereoscopic patch to a plugin.<br />
<br />
Still working with Wings 1.4.1, since that was where I had already started.<br />
<br />
How do we read the information in the error that is generated?<br />
<br />
I get an undef error, which is described as follows: "The function cannot be found when evaluating a function call."<br />
<br />
How do we know which function is the problem and what does the rest of the information in the report mean? See report below.<br />
<br />
Thanks,<br />
oort<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>wpc_stereoscopic:command/3: bad return value: {'EXIT',<br />
                                               {undef,<br />
                                                [{wings,geom_title,[{geom,2}]},<br />
                                                 {wpc_stereoscopic,<br />
                                                  new_viewer,6},<br />
                                                 {wpc_stereoscopic,<br />
                                                  new_viewer_stereo,1},<br />
                                                 {wpc_stereoscopic,command,2},<br />
                                                 {wings_develop,time_command,<br />
                                                  2},<br />
                                                 {wings_plugin,command,3},<br />
                                                 {wings,raw_command_1,3},<br />
                                                 {wings,raw_command,4}]}}</blockquote>
]]></description>
			<content:encoded><![CDATA[Starting a thread with questions about how to read Run Time errors.<br />
<br />
I am back to playing with converting the Stereoscopic patch to a plugin.<br />
<br />
Still working with Wings 1.4.1, since that was where I had already started.<br />
<br />
How do we read the information in the error that is generated?<br />
<br />
I get an undef error, which is described as follows: "The function cannot be found when evaluating a function call."<br />
<br />
How do we know which function is the problem and what does the rest of the information in the report mean? See report below.<br />
<br />
Thanks,<br />
oort<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>wpc_stereoscopic:command/3: bad return value: {'EXIT',<br />
                                               {undef,<br />
                                                [{wings,geom_title,[{geom,2}]},<br />
                                                 {wpc_stereoscopic,<br />
                                                  new_viewer,6},<br />
                                                 {wpc_stereoscopic,<br />
                                                  new_viewer_stereo,1},<br />
                                                 {wpc_stereoscopic,command,2},<br />
                                                 {wings_develop,time_command,<br />
                                                  2},<br />
                                                 {wings_plugin,command,3},<br />
                                                 {wings,raw_command_1,3},<br />
                                                 {wings,raw_command,4}]}}</blockquote>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Build error under Arch Linux]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2409</link>
			<pubDate>Sat, 18 Feb 2017 06:04:41 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=3740">haawda</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2409</guid>
			<description><![CDATA[Hello, I am new to this forum and to wings3d and erlang. I tried to build the version 2.1.5 of wings3d.<br />
<br />
build() {<br />
  LANG=C<br />
  export ESDL_PATH=&#36;(echo /usr/lib/erlang/lib/esdl-*)<br />
  make -C "&#36;_pkgname-&#36;pkgver" all lang<br />
}<br />
<br />
This does not work:<br />
<br />
make: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5'<br />
WINGS_VSN = 2.1.5<br />
(cd intl_tools; make)<br />
make[1]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
make TYPE=opt common<br />
make[2]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
erlc  -Werror +debug_info +debug_info -o. tools.erl<br />
escript gen_char_hrl<br />
make[2]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
make[1]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
(cd src; make)<br />
make[1]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
make TYPE=opt common<br />
make[2]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_lang.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin user_default.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_align.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_body.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_camera.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_cl.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_cc.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_cc_ref.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_collapse.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_color.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_console.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_deform.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_develop.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_dialog.erl<br />
wings_dialog.erl:15: can't find include lib "wings/e3d/e3d_image.hrl"<br />
wings_dialog.erl:1593: record e3d_image undefined<br />
make[2]: *** [Makefile:168: ../ebin/wings_dialog.beam] Error 1<br />
make[2]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
make[1]: *** [Makefile:149: opt] Error 2<br />
make[1]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
make: *** [Makefile:15: all] Error 2<br />
make: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5'<br />
==&gt; ERROR: A failure occurred in build().<br />
    Aborting...<br />
<br />
I did not build the dependencies myself but tried the packages Arch Linux provides.]]></description>
			<content:encoded><![CDATA[Hello, I am new to this forum and to wings3d and erlang. I tried to build the version 2.1.5 of wings3d.<br />
<br />
build() {<br />
  LANG=C<br />
  export ESDL_PATH=&#36;(echo /usr/lib/erlang/lib/esdl-*)<br />
  make -C "&#36;_pkgname-&#36;pkgver" all lang<br />
}<br />
<br />
This does not work:<br />
<br />
make: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5'<br />
WINGS_VSN = 2.1.5<br />
(cd intl_tools; make)<br />
make[1]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
make TYPE=opt common<br />
make[2]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
erlc  -Werror +debug_info +debug_info -o. tools.erl<br />
escript gen_char_hrl<br />
make[2]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
make[1]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/intl_tools'<br />
(cd src; make)<br />
make[1]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
make TYPE=opt common<br />
make[2]: Entering directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_lang.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin user_default.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_align.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_body.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_camera.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_cl.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_cc.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_cc_ref.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_collapse.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_color.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_console.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_deform.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_develop.erl<br />
erlc -Werror -I ../e3d +debug_info '-Dwings_version="2.1.5"' -pa ../intl_tools  -o../ebin wings_dialog.erl<br />
wings_dialog.erl:15: can't find include lib "wings/e3d/e3d_image.hrl"<br />
wings_dialog.erl:1593: record e3d_image undefined<br />
make[2]: *** [Makefile:168: ../ebin/wings_dialog.beam] Error 1<br />
make[2]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
make[1]: *** [Makefile:149: opt] Error 2<br />
make[1]: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5/src'<br />
make: *** [Makefile:15: all] Error 2<br />
make: Leaving directory '/home/haawda/paketierung/not_maintained_by_me/wings3d/src/wings-2.1.5'<br />
==&gt; ERROR: A failure occurred in build().<br />
    Aborting...<br />
<br />
I did not build the dependencies myself but tried the packages Arch Linux provides.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Spanish Translation]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2407</link>
			<pubDate>Thu, 16 Feb 2017 18:27:28 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=270">Asticles</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2407</guid>
			<description><![CDATA[Hi all, <br />
<br />
Just finished Spanish translation, made a Pull request, but manually from the web because my repository at github does not update from changes on my local repository (followed Micheus tutorial).<br />
<br />
Also, I would like to change es-ES form language menu to Español(España)<br />
<br />
Can anybody help me? <img src="https://www.wings3d.com/forum/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_25" /><br />
<br />
Thanks!]]></description>
			<content:encoded><![CDATA[Hi all, <br />
<br />
Just finished Spanish translation, made a Pull request, but manually from the web because my repository at github does not update from changes on my local repository (followed Micheus tutorial).<br />
<br />
Also, I would like to change es-ES form language menu to Español(España)<br />
<br />
Can anybody help me? <img src="https://www.wings3d.com/forum/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_25" /><br />
<br />
Thanks!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[undefined parse transform 'tools']]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2329</link>
			<pubDate>Thu, 05 Jan 2017 12:55:50 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=3403">kugelfang</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2329</guid>
			<description><![CDATA[I'm playing around trying to figure out how to compile plugins for Wings. I'm using Linux Mint OS using Erlang/OTP 19. In order to keep things as simple as possible I'm simply calling 'erlc' on the *.erl files to create a *.beam. (I haven't used a compiled language since performing Y2K work in COBOL!) <br />
<br />
When I try to compile wpc_collada.erl (and other plugin sources) --after changing paths to point to the correct included sources from my working directory-- I keep getting this error: 'undefined parse transform 'tools''. <br />
<br />
so I follow the includes:<br />
 -include_lib("wings-2.1.4.1/src/wings.hrl"). -&gt;<br />
 -include("../intl_tools/wings_intl.hrl") -&gt; <br />
 -compile({parse_transform,tools}).<br />
<br />
And I look at the Erlang reference manual to find that :<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>{parse_transform,Module}<br />
<br />
    Causes the parse transformation function Module:parse_transform/2 to be applied to the parsed code before the code is checked for errors.</blockquote>
<br />
Now what? Seems to me that 'parse_transform' is part of Erlang itself, not part of Wings. Has there been a change in Erlang/OTP 19 that causes this error?<br />
<br />
Thanks,<br />
<br />
--jeff]]></description>
			<content:encoded><![CDATA[I'm playing around trying to figure out how to compile plugins for Wings. I'm using Linux Mint OS using Erlang/OTP 19. In order to keep things as simple as possible I'm simply calling 'erlc' on the *.erl files to create a *.beam. (I haven't used a compiled language since performing Y2K work in COBOL!) <br />
<br />
When I try to compile wpc_collada.erl (and other plugin sources) --after changing paths to point to the correct included sources from my working directory-- I keep getting this error: 'undefined parse transform 'tools''. <br />
<br />
so I follow the includes:<br />
 -include_lib("wings-2.1.4.1/src/wings.hrl"). -&gt;<br />
 -include("../intl_tools/wings_intl.hrl") -&gt; <br />
 -compile({parse_transform,tools}).<br />
<br />
And I look at the Erlang reference manual to find that :<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>{parse_transform,Module}<br />
<br />
    Causes the parse transformation function Module:parse_transform/2 to be applied to the parsed code before the code is checked for errors.</blockquote>
<br />
Now what? Seems to me that 'parse_transform' is part of Erlang itself, not part of Wings. Has there been a change in Erlang/OTP 19 that causes this error?<br />
<br />
Thanks,<br />
<br />
--jeff]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[draw more colored edges plugin]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2311</link>
			<pubDate>Sat, 24 Dec 2016 08:52:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=11">ggaliens</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2311</guid>
			<description><![CDATA[Any chance to get a wpc_raw_colored_edges module (written as plugin) which would somehow allow a plugin programmer to "attach" raw edges (segments) and color for each of those ... to be drawn as an annotation over an existing object in Wings3D ? <br />
<br />
Very often I find myself wanting colored edges. And I have written and re-written just this plugin a few times.  Last time I looked at it all ... the drawing requirements had changed enough so as to invalidate my plugins quite a bit. <br />
<br />
So I am here asking for (wishing for) professional help. Maybe from Dan. <br />
<br />
I think this particular plugin would make a good "learning" plugin. Certainly has potential to be very simple plugin.<br />
<br />
I miss programming in Erlang.]]></description>
			<content:encoded><![CDATA[Any chance to get a wpc_raw_colored_edges module (written as plugin) which would somehow allow a plugin programmer to "attach" raw edges (segments) and color for each of those ... to be drawn as an annotation over an existing object in Wings3D ? <br />
<br />
Very often I find myself wanting colored edges. And I have written and re-written just this plugin a few times.  Last time I looked at it all ... the drawing requirements had changed enough so as to invalidate my plugins quite a bit. <br />
<br />
So I am here asking for (wishing for) professional help. Maybe from Dan. <br />
<br />
I think this particular plugin would make a good "learning" plugin. Certainly has potential to be very simple plugin.<br />
<br />
I miss programming in Erlang.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Minimum dev environment for plugins...]]></title>
			<link>https://www.wings3d.com/forum/showthread.php?tid=2281</link>
			<pubDate>Wed, 07 Dec 2016 11:35:39 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.wings3d.com/forum/member.php?action=profile&uid=3403">kugelfang</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.wings3d.com/forum/showthread.php?tid=2281</guid>
			<description><![CDATA[I have no desire to be able to compile Wings in its entirety. But I would like to play around with creating a plugin (basically an exporter which exports UV coordinates as SVG). Clearly, I need to have Erlang installed in order to compile *.beam files. Is there anything else I need? <br />
<br />
Does the version of Erlang make a difference? I have '1:16.b.3-dfsg-1ubuntu2.1' available in my package manager (I'm using Linux Mint) but I'm assuming this is not the most current version.  <br />
<br />
Thanks,<br />
<br />
--jeff]]></description>
			<content:encoded><![CDATA[I have no desire to be able to compile Wings in its entirety. But I would like to play around with creating a plugin (basically an exporter which exports UV coordinates as SVG). Clearly, I need to have Erlang installed in order to compile *.beam files. Is there anything else I need? <br />
<br />
Does the version of Erlang make a difference? I have '1:16.b.3-dfsg-1ubuntu2.1' available in my package manager (I'm using Linux Mint) but I'm assuming this is not the most current version.  <br />
<br />
Thanks,<br />
<br />
--jeff]]></content:encoded>
		</item>
	</channel>
</rss>