snipt

Ctrl+h for KB shortcuts

VB.net

Arrange (распределение объектов)

dim infoText as string
	infoText = "mkArrange version 2.0.0"

dim buttonsColumns as array[string]
	buttonsColumns.Push("Left")
	buttonsColumns.Push("Center")
	buttonsColumns.Push("Right")
dim buttonsRows as array[string]
	buttonsRows.Push("Front")
	buttonsRows.Push("Middle")
	buttonsRows.Push("Back")
dim buttonsLevels as array[string]
	buttonsLevels.Push("Front")
	buttonsLevels.Push("Middle")
	buttonsLevels.Push("Back")

dim buttonsGrid as array[string]
	buttonsGrid.Push("Matrix")
	buttonsGrid.Push("Circle")

sub OnInitParameters()
	RegisterInfoText(infoText)
	RegisterParameterInt("elementsCount", "Elements Count", 51, 0, 500)
	RegisterParameterInt("columns", "Columns", 17, 1, 500)
	RegisterParameterInt("rows", "Rows", 3, 1, 500)
	RegisterParameterInt("offsetColumns", "Offset Columns", 26, -10000, 10000)
	RegisterParameterInt("offsetRows", "Offset Rows", 26, -10000, 10000)
	RegisterParameterInt("offsetLevels", "Offset Levels", 0, -10000, 10000)
	RegisterRadioButton("centerColumns", "Center Columns", 1, buttonsColumns)
	SetAnimateParameter(false)
	RegisterRadioButton("centerRows", "Center Rows", 1, buttonsRows)
	SetAnimateParameter(false)
	RegisterRadioButton("centerLevels", "Center Levels", 1, buttonsLevels)
	SetAnimateParameter(false)
	RegisterParameterDouble("radiusOne", "Radius 1", 150.0, 0.0, 10000.0)
	RegisterParameterDouble("radiusTwo", "Radius 2", 150.0, 0.0, 10000.0)
	RegisterParameterDouble("startAngle", "Start Angle", 0.0, 0.0, 360.0)
	RegisterParameterDouble("endAngle", "End Angle", 180.0, 0.0, 360.0)
	RegisterRadioButton("arrangeGrid", "Arrange Grid", 1, buttonsGrid)
	SetAnimateParameter(false)
	RegisterPushButton("rebuild", "Rebuild", 0)
end sub

sub OnExecAction(buttonId As Integer)
	Open = false
	if ChildContainerCount = 0 and GetParameterInt("elementsCount") > 0 then
		AddContainer(3)
	end if
	if ChildContainerCount > 0 then
		this.CreateElements()
	end if
	if GetParameterInt("elementsCount") < ChildContainerCount then
		do while ChildContainerCount > GetParameterInt("elementsCount")
			GetChildContainerByIndex(GetParameterInt("elementsCount")).Delete()
		loop
	end if
	if GetParameterInt("arrangeGrid") = 0 then
		this.ArrangeMatrix()
	else
		this.ArrangeCircle()
	end if
	Scene.UpdateSceneTree()
end sub

sub OnParameterChanged(parameterName As String)
	Select Case parameterName
		Case "elementsCount"
			for index = 1 to GetParameterInt("elementsCount")
				GetChildContainerByIndex(index - 1).Active = true
			next
			for index = GetParameterInt("elementsCount") to ChildContainerCount - 1
				GetChildContainerByIndex(index).Active = false
			next
		Case "columns", "rows", "offsetColumns", "offsetRows", "offsetLevels", "centerColumns", "centerRows", "centerLevels", "radiusOne", "radiusTwo", "startAngle", "endAngle"
			if GetParameterInt("arrangeGrid") = 0 then
				this.ArrangeMatrix()
			else
				this.ArrangeCircle()
			end if
			for index = 1 to GetParameterInt("elementsCount")
				GetChildContainerByIndex(index - 1).Active = true
			next
			for index = GetParameterInt("columns") * GetParameterInt("rows") to ChildContainerCount
'				GetChildContainerByIndex(index).Position.x = 0
'				GetChildContainerByIndex(index).Position.y = 0
'				GetChildContainerByIndex(index).Position.z = 0
				GetChildContainerByIndex(index).Active = false
			next
		Case "arrangeGrid"
			if GetParameterInt("arrangeGrid") = 0 then
				SendGuiParameterShow("centerColumns", 1)
				SendGuiParameterShow("centerRows", 1)
				SendGuiParameterShow("centerLevels", 1)
				SendGuiParameterShow("radiusOne", 0)
				SendGuiParameterShow("radiusTwo", 0)
				SendGuiParameterShow("startAngle", 0)
				SendGuiParameterShow("endAngle", 0)
				SendGuiRefresh()
				this.ArrangeMatrix()
			else
				SendGuiParameterShow("centerColumns", 0)
				SendGuiParameterShow("centerRows", 0)
				SendGuiParameterShow("centerLevels", 0)
				SendGuiParameterShow("radiusOne", 1)
				SendGuiParameterShow("radiusTwo", 1)
				SendGuiParameterShow("startAngle", 1)
				SendGuiParameterShow("endAngle", 1)
				SendGuiRefresh()
				this.ArrangeCircle()
			end if
	End Select
end sub

sub CreateElements()
	for index = 1 to GetParameterInt("elementsCount")
		GetChildContainerByIndex(index - 1).AddContainer(1)
		GetChildContainerByIndex(index - 1).Name = cStr(index - 1)
		if not Geometry = null then
			Geometry.Active = false
			if Geometry.Uuid.FullString = "<00000000-0000-0000-0000000000000000>" then
				GetChildContainerByIndex(index - 1).CreateGeometry("BUILT_IN*GEOM*"&Geometry.Name)
			else
				dim geomPath as string
				geomPath = System.SendCommand("#"&Geometry.VizId&"*LOCATION_PATH GET")
				GetChildContainerByIndex(index - 1).CreateGeometry(geomPath)
			end if
		end if
		GetChildContainerByIndex(index - 1).CreateMaterial()
		GetChildContainerByIndex(index - 1).Scaling.xyz = 0.25
	next
end sub

sub ArrangeMatrix()
	if ChildContainerCount > 0 then
		dim index as integer
		for i = 0 to GetParameterInt("columns") - 1
			for j = 0 to GetParameterInt("rows") - 1
				GetChildContainerByIndex(index).Position.x = cDbl(GetParameterInt("offsetColumns") * i)
				GetChildContainerByIndex(index).Position.y = cDbl(GetParameterInt("offsetRows") * j)
				GetChildContainerByIndex(index).Position.z = cDbl(GetParameterInt("offsetLevels") * j)
				Select Case GetParameterInt("centerColumns")
					Case 0
						Center.x = 0
					Case 1
						Center.x = -cDbl(GetParameterInt("offsetColumns") * i) / 2
					Case 2
						Center.x = -cDbl(GetParameterInt("offsetColumns") * i)
				End Select
				Select Case GetParameterInt("centerRows")
					Case 0
						Center.y = 0
					Case 1
						Center.y = -cDbl(GetParameterInt("offsetRows") * j) / 2
					Case 2
						Center.y = -cDbl(GetParameterInt("offsetRows") * j)
				End Select
				Select Case GetParameterInt("centerLevels")
					Case 0
						Center.z = 0
					Case 1
						Center.z = -cDbl(GetParameterInt("offsetLevels") * j) / 2
					Case 2
						Center.z = -cDbl(GetParameterInt("offsetLevels") * j)
				End Select
				GetChildContainerByIndex(index).Rotation.z = 0.0
				index = index + 1
			next
		next
	end if
end sub

dim pi as double = 3.1415926

sub ArrangeCircle()
	if ChildContainerCount > 0 then
		dim index as integer
		for i = 0 to GetParameterInt("columns") - 1
			dim angle as double
			angle = -(GetParameterDouble("endAngle") - GetParameterDouble("startAngle")) * cDbl(i) * pi / cDbl(GetParameterInt("columns") - 1) / 180.0 - (GetParameterDouble("startAngle") + cdbl(i) * cDbl(1 / GetParameterInt("columns"))) * pi / 180.0
			for j = 0 to GetParameterInt("rows") - 1
				GetChildContainerByIndex(index).Position.x = cDbl(GetParameterInt("offsetColumns") * j) * -cos(angle) + (GetParameterDouble("radiusOne") * -cos(angle)) + cDbl(GetParameterInt("offsetColumns") * i) * 0.0
				GetChildContainerByIndex(index).Position.y = cDbl(GetParameterInt("offsetRows") * j) * -sin(angle) + (GetParameterDouble("radiusTwo") * -sin(angle)) + cDbl(GetParameterInt("offsetRows") * j) * 0.0
				GetChildContainerByIndex(index).Position.z = cDbl(GetParameterInt("offsetLevels") * j)
				Center.xyz = 0.0
				GetChildContainerByIndex(index).Rotation.z = angle * 180.0 / pi + cDbl(i) * 0.0 / cDbl(GetParameterInt("columns") - 1)
				index = index + 1
			next
		next
	end if
end sub
https://snipt.net/embed/9282197c0f6eae154349c11c4cd25292/
/raw/9282197c0f6eae154349c11c4cd25292/
9282197c0f6eae154349c11c4cd25292
vb.net
VB.net
191
2019-08-20T22:31:11
True
False
False
Jul 21, 2016 at 09:41 AM
/api/public/snipt/142856/
arrange
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10"> 10</a> <a href="#L-11"> 11</a> <a href="#L-12"> 12</a> <a href="#L-13"> 13</a> <a href="#L-14"> 14</a> <a href="#L-15"> 15</a> <a href="#L-16"> 16</a> <a href="#L-17"> 17</a> <a href="#L-18"> 18</a> <a href="#L-19"> 19</a> <a href="#L-20"> 20</a> <a href="#L-21"> 21</a> <a href="#L-22"> 22</a> <a href="#L-23"> 23</a> <a href="#L-24"> 24</a> <a href="#L-25"> 25</a> <a href="#L-26"> 26</a> <a href="#L-27"> 27</a> <a href="#L-28"> 28</a> <a href="#L-29"> 29</a> <a href="#L-30"> 30</a> <a href="#L-31"> 31</a> <a href="#L-32"> 32</a> <a href="#L-33"> 33</a> <a href="#L-34"> 34</a> <a href="#L-35"> 35</a> <a href="#L-36"> 36</a> <a href="#L-37"> 37</a> <a href="#L-38"> 38</a> <a href="#L-39"> 39</a> <a href="#L-40"> 40</a> <a href="#L-41"> 41</a> <a href="#L-42"> 42</a> <a href="#L-43"> 43</a> <a href="#L-44"> 44</a> <a href="#L-45"> 45</a> <a href="#L-46"> 46</a> <a href="#L-47"> 47</a> <a href="#L-48"> 48</a> <a href="#L-49"> 49</a> <a href="#L-50"> 50</a> <a href="#L-51"> 51</a> <a href="#L-52"> 52</a> <a href="#L-53"> 53</a> <a href="#L-54"> 54</a> <a href="#L-55"> 55</a> <a href="#L-56"> 56</a> <a href="#L-57"> 57</a> <a href="#L-58"> 58</a> <a href="#L-59"> 59</a> <a href="#L-60"> 60</a> <a href="#L-61"> 61</a> <a href="#L-62"> 62</a> <a href="#L-63"> 63</a> <a href="#L-64"> 64</a> <a href="#L-65"> 65</a> <a href="#L-66"> 66</a> <a href="#L-67"> 67</a> <a href="#L-68"> 68</a> <a href="#L-69"> 69</a> <a href="#L-70"> 70</a> <a href="#L-71"> 71</a> <a href="#L-72"> 72</a> <a href="#L-73"> 73</a> <a href="#L-74"> 74</a> <a href="#L-75"> 75</a> <a href="#L-76"> 76</a> <a href="#L-77"> 77</a> <a href="#L-78"> 78</a> <a href="#L-79"> 79</a> <a href="#L-80"> 80</a> <a href="#L-81"> 81</a> <a href="#L-82"> 82</a> <a href="#L-83"> 83</a> <a href="#L-84"> 84</a> <a href="#L-85"> 85</a> <a href="#L-86"> 86</a> <a href="#L-87"> 87</a> <a href="#L-88"> 88</a> <a href="#L-89"> 89</a> <a href="#L-90"> 90</a> <a href="#L-91"> 91</a> <a href="#L-92"> 92</a> <a href="#L-93"> 93</a> <a href="#L-94"> 94</a> <a href="#L-95"> 95</a> <a href="#L-96"> 96</a> <a href="#L-97"> 97</a> <a href="#L-98"> 98</a> <a href="#L-99"> 99</a> <a href="#L-100">100</a> <a href="#L-101">101</a> <a href="#L-102">102</a> <a href="#L-103">103</a> <a href="#L-104">104</a> <a href="#L-105">105</a> <a href="#L-106">106</a> <a href="#L-107">107</a> <a href="#L-108">108</a> <a href="#L-109">109</a> <a href="#L-110">110</a> <a href="#L-111">111</a> <a href="#L-112">112</a> <a href="#L-113">113</a> <a href="#L-114">114</a> <a href="#L-115">115</a> <a href="#L-116">116</a> <a href="#L-117">117</a> <a href="#L-118">118</a> <a href="#L-119">119</a> <a href="#L-120">120</a> <a href="#L-121">121</a> <a href="#L-122">122</a> <a href="#L-123">123</a> <a href="#L-124">124</a> <a href="#L-125">125</a> <a href="#L-126">126</a> <a href="#L-127">127</a> <a href="#L-128">128</a> <a href="#L-129">129</a> <a href="#L-130">130</a> <a href="#L-131">131</a> <a href="#L-132">132</a> <a href="#L-133">133</a> <a href="#L-134">134</a> <a href="#L-135">135</a> <a href="#L-136">136</a> <a href="#L-137">137</a> <a href="#L-138">138</a> <a href="#L-139">139</a> <a href="#L-140">140</a> <a href="#L-141">141</a> <a href="#L-142">142</a> <a href="#L-143">143</a> <a href="#L-144">144</a> <a href="#L-145">145</a> <a href="#L-146">146</a> <a href="#L-147">147</a> <a href="#L-148">148</a> <a href="#L-149">149</a> <a href="#L-150">150</a> <a href="#L-151">151</a> <a href="#L-152">152</a> <a href="#L-153">153</a> <a href="#L-154">154</a> <a href="#L-155">155</a> <a href="#L-156">156</a> <a href="#L-157">157</a> <a href="#L-158">158</a> <a href="#L-159">159</a> <a href="#L-160">160</a> <a href="#L-161">161</a> <a href="#L-162">162</a> <a href="#L-163">163</a> <a href="#L-164">164</a> <a href="#L-165">165</a> <a href="#L-166">166</a> <a href="#L-167">167</a> <a href="#L-168">168</a> <a href="#L-169">169</a> <a href="#L-170">170</a> <a href="#L-171">171</a> <a href="#L-172">172</a> <a href="#L-173">173</a> <a href="#L-174">174</a> <a href="#L-175">175</a> <a href="#L-176">176</a> <a href="#L-177">177</a> <a href="#L-178">178</a> <a href="#L-179">179</a> <a href="#L-180">180</a> <a href="#L-181">181</a> <a href="#L-182">182</a> <a href="#L-183">183</a> <a href="#L-184">184</a> <a href="#L-185">185</a> <a href="#L-186">186</a> <a href="#L-187">187</a> <a href="#L-188">188</a> <a href="#L-189">189</a> <a href="#L-190">190</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="k">dim</span> <span class="n">infoText</span> <span class="ow">as</span> <span class="kt">string</span> </span><span id="L-2"><a name="L-2"></a> <span class="n">infoText</span> <span class="o">=</span> <span class="s">&quot;mkArrange version 2.0.0&quot;</span> </span><span id="L-3"><a name="L-3"></a> </span><span id="L-4"><a name="L-4"></a><span class="k">dim</span> <span class="n">buttonsColumns</span> <span class="ow">as</span> <span class="n">array</span><span class="o">[</span><span class="kt">string</span><span class="o">]</span> </span><span id="L-5"><a name="L-5"></a> <span class="n">buttonsColumns</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Left&quot;</span><span class="p">)</span> </span><span id="L-6"><a name="L-6"></a> <span class="n">buttonsColumns</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Center&quot;</span><span class="p">)</span> </span><span id="L-7"><a name="L-7"></a> <span class="n">buttonsColumns</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Right&quot;</span><span class="p">)</span> </span><span id="L-8"><a name="L-8"></a><span class="k">dim</span> <span class="n">buttonsRows</span> <span class="ow">as</span> <span class="n">array</span><span class="o">[</span><span class="kt">string</span><span class="o">]</span> </span><span id="L-9"><a name="L-9"></a> <span class="n">buttonsRows</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Front&quot;</span><span class="p">)</span> </span><span id="L-10"><a name="L-10"></a> <span class="n">buttonsRows</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Middle&quot;</span><span class="p">)</span> </span><span id="L-11"><a name="L-11"></a> <span class="n">buttonsRows</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Back&quot;</span><span class="p">)</span> </span><span id="L-12"><a name="L-12"></a><span class="k">dim</span> <span class="n">buttonsLevels</span> <span class="ow">as</span> <span class="n">array</span><span class="o">[</span><span class="kt">string</span><span class="o">]</span> </span><span id="L-13"><a name="L-13"></a> <span class="n">buttonsLevels</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Front&quot;</span><span class="p">)</span> </span><span id="L-14"><a name="L-14"></a> <span class="n">buttonsLevels</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Middle&quot;</span><span class="p">)</span> </span><span id="L-15"><a name="L-15"></a> <span class="n">buttonsLevels</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Back&quot;</span><span class="p">)</span> </span><span id="L-16"><a name="L-16"></a> </span><span id="L-17"><a name="L-17"></a><span class="k">dim</span> <span class="n">buttonsGrid</span> <span class="ow">as</span> <span class="n">array</span><span class="o">[</span><span class="kt">string</span><span class="o">]</span> </span><span id="L-18"><a name="L-18"></a> <span class="n">buttonsGrid</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Matrix&quot;</span><span class="p">)</span> </span><span id="L-19"><a name="L-19"></a> <span class="n">buttonsGrid</span><span class="p">.</span><span class="n">Push</span><span class="p">(</span><span class="s">&quot;Circle&quot;</span><span class="p">)</span> </span><span id="L-20"><a name="L-20"></a> </span><span id="L-21"><a name="L-21"></a><span class="k">sub</span> <span class="nf">OnInitParameters</span><span class="p">()</span> </span><span id="L-22"><a name="L-22"></a> <span class="n">RegisterInfoText</span><span class="p">(</span><span class="n">infoText</span><span class="p">)</span> </span><span id="L-23"><a name="L-23"></a> <span class="n">RegisterParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">,</span> <span class="s">&quot;Elements Count&quot;</span><span class="p">,</span> <span class="mi">51</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span> </span><span id="L-24"><a name="L-24"></a> <span class="n">RegisterParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">,</span> <span class="s">&quot;Columns&quot;</span><span class="p">,</span> <span class="mi">17</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span> </span><span id="L-25"><a name="L-25"></a> <span class="n">RegisterParameterInt</span><span class="p">(</span><span class="s">&quot;rows&quot;</span><span class="p">,</span> <span class="s">&quot;Rows&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span> </span><span id="L-26"><a name="L-26"></a> <span class="n">RegisterParameterInt</span><span class="p">(</span><span class="s">&quot;offsetColumns&quot;</span><span class="p">,</span> <span class="s">&quot;Offset Columns&quot;</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="o">-</span><span class="mi">10000</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span> </span><span id="L-27"><a name="L-27"></a> <span class="n">RegisterParameterInt</span><span class="p">(</span><span class="s">&quot;offsetRows&quot;</span><span class="p">,</span> <span class="s">&quot;Offset Rows&quot;</span><span class="p">,</span> <span class="mi">26</span><span class="p">,</span> <span class="o">-</span><span class="mi">10000</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span> </span><span id="L-28"><a name="L-28"></a> <span class="n">RegisterParameterInt</span><span class="p">(</span><span class="s">&quot;offsetLevels&quot;</span><span class="p">,</span> <span class="s">&quot;Offset Levels&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">10000</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)</span> </span><span id="L-29"><a name="L-29"></a> <span class="n">RegisterRadioButton</span><span class="p">(</span><span class="s">&quot;centerColumns&quot;</span><span class="p">,</span> <span class="s">&quot;Center Columns&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">buttonsColumns</span><span class="p">)</span> </span><span id="L-30"><a name="L-30"></a> <span class="n">SetAnimateParameter</span><span class="p">(</span><span class="k">false</span><span class="p">)</span> </span><span id="L-31"><a name="L-31"></a> <span class="n">RegisterRadioButton</span><span class="p">(</span><span class="s">&quot;centerRows&quot;</span><span class="p">,</span> <span class="s">&quot;Center Rows&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">buttonsRows</span><span class="p">)</span> </span><span id="L-32"><a name="L-32"></a> <span class="n">SetAnimateParameter</span><span class="p">(</span><span class="k">false</span><span class="p">)</span> </span><span id="L-33"><a name="L-33"></a> <span class="n">RegisterRadioButton</span><span class="p">(</span><span class="s">&quot;centerLevels&quot;</span><span class="p">,</span> <span class="s">&quot;Center Levels&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">buttonsLevels</span><span class="p">)</span> </span><span id="L-34"><a name="L-34"></a> <span class="n">SetAnimateParameter</span><span class="p">(</span><span class="k">false</span><span class="p">)</span> </span><span id="L-35"><a name="L-35"></a> <span class="n">RegisterParameterDouble</span><span class="p">(</span><span class="s">&quot;radiusOne&quot;</span><span class="p">,</span> <span class="s">&quot;Radius 1&quot;</span><span class="p">,</span> <span class="mf">150.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">10000.0</span><span class="p">)</span> </span><span id="L-36"><a name="L-36"></a> <span class="n">RegisterParameterDouble</span><span class="p">(</span><span class="s">&quot;radiusTwo&quot;</span><span class="p">,</span> <span class="s">&quot;Radius 2&quot;</span><span class="p">,</span> <span class="mf">150.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">10000.0</span><span class="p">)</span> </span><span id="L-37"><a name="L-37"></a> <span class="n">RegisterParameterDouble</span><span class="p">(</span><span class="s">&quot;startAngle&quot;</span><span class="p">,</span> <span class="s">&quot;Start Angle&quot;</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">360.0</span><span class="p">)</span> </span><span id="L-38"><a name="L-38"></a> <span class="n">RegisterParameterDouble</span><span class="p">(</span><span class="s">&quot;endAngle&quot;</span><span class="p">,</span> <span class="s">&quot;End Angle&quot;</span><span class="p">,</span> <span class="mf">180.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">360.0</span><span class="p">)</span> </span><span id="L-39"><a name="L-39"></a> <span class="n">RegisterRadioButton</span><span class="p">(</span><span class="s">&quot;arrangeGrid&quot;</span><span class="p">,</span> <span class="s">&quot;Arrange Grid&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">buttonsGrid</span><span class="p">)</span> </span><span id="L-40"><a name="L-40"></a> <span class="n">SetAnimateParameter</span><span class="p">(</span><span class="k">false</span><span class="p">)</span> </span><span id="L-41"><a name="L-41"></a> <span class="n">RegisterPushButton</span><span class="p">(</span><span class="s">&quot;rebuild&quot;</span><span class="p">,</span> <span class="s">&quot;Rebuild&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-42"><a name="L-42"></a><span class="k">end</span> <span class="k">sub</span> </span><span id="L-43"><a name="L-43"></a> </span><span id="L-44"><a name="L-44"></a><span class="k">sub</span> <span class="nf">OnExecAction</span><span class="p">(</span><span class="n">buttonId</span> <span class="ow">As</span> <span class="kt">Integer</span><span class="p">)</span> </span><span id="L-45"><a name="L-45"></a> <span class="n">Open</span> <span class="o">=</span> <span class="k">false</span> </span><span id="L-46"><a name="L-46"></a> <span class="k">if</span> <span class="n">ChildContainerCount</span> <span class="o">=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-47"><a name="L-47"></a> <span class="n">AddContainer</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> </span><span id="L-48"><a name="L-48"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-49"><a name="L-49"></a> <span class="k">if</span> <span class="n">ChildContainerCount</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-50"><a name="L-50"></a> <span class="n">this</span><span class="p">.</span><span class="n">CreateElements</span><span class="p">()</span> </span><span id="L-51"><a name="L-51"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-52"><a name="L-52"></a> <span class="k">if</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">ChildContainerCount</span> <span class="k">then</span> </span><span id="L-53"><a name="L-53"></a> <span class="k">do</span> <span class="k">while</span> <span class="n">ChildContainerCount</span> <span class="o">&gt;</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> </span><span id="L-54"><a name="L-54"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)).</span><span class="n">Delete</span><span class="p">()</span> </span><span id="L-55"><a name="L-55"></a> <span class="k">loop</span> </span><span id="L-56"><a name="L-56"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-57"><a name="L-57"></a> <span class="k">if</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;arrangeGrid&quot;</span><span class="p">)</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-58"><a name="L-58"></a> <span class="n">this</span><span class="p">.</span><span class="n">ArrangeMatrix</span><span class="p">()</span> </span><span id="L-59"><a name="L-59"></a> <span class="k">else</span> </span><span id="L-60"><a name="L-60"></a> <span class="n">this</span><span class="p">.</span><span class="n">ArrangeCircle</span><span class="p">()</span> </span><span id="L-61"><a name="L-61"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-62"><a name="L-62"></a> <span class="n">Scene</span><span class="p">.</span><span class="n">UpdateSceneTree</span><span class="p">()</span> </span><span id="L-63"><a name="L-63"></a><span class="k">end</span> <span class="k">sub</span> </span><span id="L-64"><a name="L-64"></a> </span><span id="L-65"><a name="L-65"></a><span class="k">sub</span> <span class="nf">OnParameterChanged</span><span class="p">(</span><span class="n">parameterName</span> <span class="ow">As</span> <span class="kt">String</span><span class="p">)</span> </span><span id="L-66"><a name="L-66"></a> <span class="k">Select</span> <span class="k">Case</span> <span class="n">parameterName</span> </span><span id="L-67"><a name="L-67"></a> <span class="k">Case</span> <span class="s">&quot;elementsCount&quot;</span> </span><span id="L-68"><a name="L-68"></a> <span class="k">for</span> <span class="n">index</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> </span><span id="L-69"><a name="L-69"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">Active</span> <span class="o">=</span> <span class="k">true</span> </span><span id="L-70"><a name="L-70"></a> <span class="k">next</span> </span><span id="L-71"><a name="L-71"></a> <span class="k">for</span> <span class="n">index</span> <span class="o">=</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> <span class="k">to</span> <span class="n">ChildContainerCount</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-72"><a name="L-72"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Active</span> <span class="o">=</span> <span class="k">false</span> </span><span id="L-73"><a name="L-73"></a> <span class="k">next</span> </span><span id="L-74"><a name="L-74"></a> <span class="k">Case</span> <span class="s">&quot;columns&quot;</span><span class="p">,</span> <span class="s">&quot;rows&quot;</span><span class="p">,</span> <span class="s">&quot;offsetColumns&quot;</span><span class="p">,</span> <span class="s">&quot;offsetRows&quot;</span><span class="p">,</span> <span class="s">&quot;offsetLevels&quot;</span><span class="p">,</span> <span class="s">&quot;centerColumns&quot;</span><span class="p">,</span> <span class="s">&quot;centerRows&quot;</span><span class="p">,</span> <span class="s">&quot;centerLevels&quot;</span><span class="p">,</span> <span class="s">&quot;radiusOne&quot;</span><span class="p">,</span> <span class="s">&quot;radiusTwo&quot;</span><span class="p">,</span> <span class="s">&quot;startAngle&quot;</span><span class="p">,</span> <span class="s">&quot;endAngle&quot;</span> </span><span id="L-75"><a name="L-75"></a> <span class="k">if</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;arrangeGrid&quot;</span><span class="p">)</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-76"><a name="L-76"></a> <span class="n">this</span><span class="p">.</span><span class="n">ArrangeMatrix</span><span class="p">()</span> </span><span id="L-77"><a name="L-77"></a> <span class="k">else</span> </span><span id="L-78"><a name="L-78"></a> <span class="n">this</span><span class="p">.</span><span class="n">ArrangeCircle</span><span class="p">()</span> </span><span id="L-79"><a name="L-79"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-80"><a name="L-80"></a> <span class="k">for</span> <span class="n">index</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> </span><span id="L-81"><a name="L-81"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">Active</span> <span class="o">=</span> <span class="k">true</span> </span><span id="L-82"><a name="L-82"></a> <span class="k">next</span> </span><span id="L-83"><a name="L-83"></a> <span class="k">for</span> <span class="n">index</span> <span class="o">=</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;rows&quot;</span><span class="p">)</span> <span class="k">to</span> <span class="n">ChildContainerCount</span> </span><span id="L-84"><a name="L-84"></a><span class="c">&#39; GetChildContainerByIndex(index).Position.x = 0</span> </span><span id="L-85"><a name="L-85"></a><span class="c">&#39; GetChildContainerByIndex(index).Position.y = 0</span> </span><span id="L-86"><a name="L-86"></a><span class="c">&#39; GetChildContainerByIndex(index).Position.z = 0</span> </span><span id="L-87"><a name="L-87"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Active</span> <span class="o">=</span> <span class="k">false</span> </span><span id="L-88"><a name="L-88"></a> <span class="k">next</span> </span><span id="L-89"><a name="L-89"></a> <span class="k">Case</span> <span class="s">&quot;arrangeGrid&quot;</span> </span><span id="L-90"><a name="L-90"></a> <span class="k">if</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;arrangeGrid&quot;</span><span class="p">)</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-91"><a name="L-91"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;centerColumns&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-92"><a name="L-92"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;centerRows&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-93"><a name="L-93"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;centerLevels&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-94"><a name="L-94"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;radiusOne&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-95"><a name="L-95"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;radiusTwo&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-96"><a name="L-96"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;startAngle&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-97"><a name="L-97"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;endAngle&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-98"><a name="L-98"></a> <span class="n">SendGuiRefresh</span><span class="p">()</span> </span><span id="L-99"><a name="L-99"></a> <span class="n">this</span><span class="p">.</span><span class="n">ArrangeMatrix</span><span class="p">()</span> </span><span id="L-100"><a name="L-100"></a> <span class="k">else</span> </span><span id="L-101"><a name="L-101"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;centerColumns&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-102"><a name="L-102"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;centerRows&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-103"><a name="L-103"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;centerLevels&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> </span><span id="L-104"><a name="L-104"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;radiusOne&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-105"><a name="L-105"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;radiusTwo&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-106"><a name="L-106"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;startAngle&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-107"><a name="L-107"></a> <span class="n">SendGuiParameterShow</span><span class="p">(</span><span class="s">&quot;endAngle&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-108"><a name="L-108"></a> <span class="n">SendGuiRefresh</span><span class="p">()</span> </span><span id="L-109"><a name="L-109"></a> <span class="n">this</span><span class="p">.</span><span class="n">ArrangeCircle</span><span class="p">()</span> </span><span id="L-110"><a name="L-110"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-111"><a name="L-111"></a> <span class="k">End</span> <span class="k">Select</span> </span><span id="L-112"><a name="L-112"></a><span class="k">end</span> <span class="k">sub</span> </span><span id="L-113"><a name="L-113"></a> </span><span id="L-114"><a name="L-114"></a><span class="k">sub</span> <span class="nf">CreateElements</span><span class="p">()</span> </span><span id="L-115"><a name="L-115"></a> <span class="k">for</span> <span class="n">index</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;elementsCount&quot;</span><span class="p">)</span> </span><span id="L-116"><a name="L-116"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">AddContainer</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> </span><span id="L-117"><a name="L-117"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">Name</span> <span class="o">=</span> <span class="k">cStr</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-118"><a name="L-118"></a> <span class="k">if</span> <span class="k">not</span> <span class="n">Geometry</span> <span class="o">=</span> <span class="n">null</span> <span class="k">then</span> </span><span id="L-119"><a name="L-119"></a> <span class="n">Geometry</span><span class="p">.</span><span class="n">Active</span> <span class="o">=</span> <span class="k">false</span> </span><span id="L-120"><a name="L-120"></a> <span class="k">if</span> <span class="n">Geometry</span><span class="p">.</span><span class="n">Uuid</span><span class="p">.</span><span class="n">FullString</span> <span class="o">=</span> <span class="s">&quot;&lt;00000000-0000-0000-0000000000000000&gt;&quot;</span> <span class="k">then</span> </span><span id="L-121"><a name="L-121"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">CreateGeometry</span><span class="p">(</span><span class="s">&quot;BUILT_IN*GEOM*&quot;</span><span class="o">&amp;</span><span class="n">Geometry</span><span class="p">.</span><span class="n">Name</span><span class="p">)</span> </span><span id="L-122"><a name="L-122"></a> <span class="k">else</span> </span><span id="L-123"><a name="L-123"></a> <span class="k">dim</span> <span class="n">geomPath</span> <span class="ow">as</span> <span class="kt">string</span> </span><span id="L-124"><a name="L-124"></a> <span class="n">geomPath</span> <span class="o">=</span> <span class="n">System</span><span class="p">.</span><span class="n">SendCommand</span><span class="p">(</span><span class="s">&quot;#&quot;</span><span class="o">&amp;</span><span class="n">Geometry</span><span class="p">.</span><span class="n">VizId&amp;</span><span class="s">&quot;*LOCATION_PATH GET&quot;</span><span class="p">)</span> </span><span id="L-125"><a name="L-125"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">CreateGeometry</span><span class="p">(</span><span class="n">geomPath</span><span class="p">)</span> </span><span id="L-126"><a name="L-126"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-127"><a name="L-127"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-128"><a name="L-128"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">CreateMaterial</span><span class="p">()</span> </span><span id="L-129"><a name="L-129"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="n">Scaling</span><span class="p">.</span><span class="n">xyz</span> <span class="o">=</span> <span class="mf">0.25</span> </span><span id="L-130"><a name="L-130"></a> <span class="k">next</span> </span><span id="L-131"><a name="L-131"></a><span class="k">end</span> <span class="k">sub</span> </span><span id="L-132"><a name="L-132"></a> </span><span id="L-133"><a name="L-133"></a><span class="k">sub</span> <span class="nf">ArrangeMatrix</span><span class="p">()</span> </span><span id="L-134"><a name="L-134"></a> <span class="k">if</span> <span class="n">ChildContainerCount</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-135"><a name="L-135"></a> <span class="k">dim</span> <span class="n">index</span> <span class="ow">as</span> <span class="kt">integer</span> </span><span id="L-136"><a name="L-136"></a> <span class="k">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-137"><a name="L-137"></a> <span class="k">for</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;rows&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-138"><a name="L-138"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Position</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetColumns&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">i</span><span class="p">)</span> </span><span id="L-139"><a name="L-139"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Position</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetRows&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> </span><span id="L-140"><a name="L-140"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Position</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetLevels&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> </span><span id="L-141"><a name="L-141"></a> <span class="k">Select</span> <span class="k">Case</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;centerColumns&quot;</span><span class="p">)</span> </span><span id="L-142"><a name="L-142"></a> <span class="k">Case</span> <span class="mi">0</span> </span><span id="L-143"><a name="L-143"></a> <span class="n">Center</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-144"><a name="L-144"></a> <span class="k">Case</span> <span class="mi">1</span> </span><span id="L-145"><a name="L-145"></a> <span class="n">Center</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="o">-</span><span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetColumns&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">i</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span> </span><span id="L-146"><a name="L-146"></a> <span class="k">Case</span> <span class="mi">2</span> </span><span id="L-147"><a name="L-147"></a> <span class="n">Center</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="o">-</span><span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetColumns&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">i</span><span class="p">)</span> </span><span id="L-148"><a name="L-148"></a> <span class="k">End</span> <span class="k">Select</span> </span><span id="L-149"><a name="L-149"></a> <span class="k">Select</span> <span class="k">Case</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;centerRows&quot;</span><span class="p">)</span> </span><span id="L-150"><a name="L-150"></a> <span class="k">Case</span> <span class="mi">0</span> </span><span id="L-151"><a name="L-151"></a> <span class="n">Center</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-152"><a name="L-152"></a> <span class="k">Case</span> <span class="mi">1</span> </span><span id="L-153"><a name="L-153"></a> <span class="n">Center</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="o">-</span><span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetRows&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span> </span><span id="L-154"><a name="L-154"></a> <span class="k">Case</span> <span class="mi">2</span> </span><span id="L-155"><a name="L-155"></a> <span class="n">Center</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="o">-</span><span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetRows&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> </span><span id="L-156"><a name="L-156"></a> <span class="k">End</span> <span class="k">Select</span> </span><span id="L-157"><a name="L-157"></a> <span class="k">Select</span> <span class="k">Case</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;centerLevels&quot;</span><span class="p">)</span> </span><span id="L-158"><a name="L-158"></a> <span class="k">Case</span> <span class="mi">0</span> </span><span id="L-159"><a name="L-159"></a> <span class="n">Center</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mi">0</span> </span><span id="L-160"><a name="L-160"></a> <span class="k">Case</span> <span class="mi">1</span> </span><span id="L-161"><a name="L-161"></a> <span class="n">Center</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="o">-</span><span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetLevels&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span> </span><span id="L-162"><a name="L-162"></a> <span class="k">Case</span> <span class="mi">2</span> </span><span id="L-163"><a name="L-163"></a> <span class="n">Center</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="o">-</span><span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetLevels&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> </span><span id="L-164"><a name="L-164"></a> <span class="k">End</span> <span class="k">Select</span> </span><span id="L-165"><a name="L-165"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Rotation</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="mf">0.0</span> </span><span id="L-166"><a name="L-166"></a> <span class="n">index</span> <span class="o">=</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-167"><a name="L-167"></a> <span class="k">next</span> </span><span id="L-168"><a name="L-168"></a> <span class="k">next</span> </span><span id="L-169"><a name="L-169"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-170"><a name="L-170"></a><span class="k">end</span> <span class="k">sub</span> </span><span id="L-171"><a name="L-171"></a> </span><span id="L-172"><a name="L-172"></a><span class="k">dim</span> <span class="n">pi</span> <span class="ow">as</span> <span class="kt">double</span> <span class="o">=</span> <span class="mf">3.1415926</span> </span><span id="L-173"><a name="L-173"></a> </span><span id="L-174"><a name="L-174"></a><span class="k">sub</span> <span class="nf">ArrangeCircle</span><span class="p">()</span> </span><span id="L-175"><a name="L-175"></a> <span class="k">if</span> <span class="n">ChildContainerCount</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> </span><span id="L-176"><a name="L-176"></a> <span class="k">dim</span> <span class="n">index</span> <span class="ow">as</span> <span class="kt">integer</span> </span><span id="L-177"><a name="L-177"></a> <span class="k">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-178"><a name="L-178"></a> <span class="k">dim</span> <span class="n">angle</span> <span class="ow">as</span> <span class="kt">double</span> </span><span id="L-179"><a name="L-179"></a> <span class="n">angle</span> <span class="o">=</span> <span class="o">-</span><span class="p">(</span><span class="n">GetParameterDouble</span><span class="p">(</span><span class="s">&quot;endAngle&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="n">GetParameterDouble</span><span class="p">(</span><span class="s">&quot;startAngle&quot;</span><span class="p">))</span> <span class="o">*</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">*</span> <span class="n">pi</span> <span class="o">/</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mf">180.0</span> <span class="o">-</span> <span class="p">(</span><span class="n">GetParameterDouble</span><span class="p">(</span><span class="s">&quot;startAngle&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="k">cdbl</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">*</span> <span class="k">cDbl</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">)))</span> <span class="o">*</span> <span class="n">pi</span> <span class="o">/</span> <span class="mf">180.0</span> </span><span id="L-180"><a name="L-180"></a> <span class="k">for</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">to</span> <span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;rows&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> </span><span id="L-181"><a name="L-181"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Position</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetColumns&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> <span class="o">*</span> <span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">GetParameterDouble</span><span class="p">(</span><span class="s">&quot;radiusOne&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">angle</span><span class="p">))</span> <span class="o">+</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetColumns&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">i</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.0</span> </span><span id="L-182"><a name="L-182"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Position</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetRows&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> <span class="o">*</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">GetParameterDouble</span><span class="p">(</span><span class="s">&quot;radiusTwo&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">angle</span><span class="p">))</span> <span class="o">+</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetRows&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.0</span> </span><span id="L-183"><a name="L-183"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Position</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;offsetLevels&quot;</span><span class="p">)</span> <span class="o">*</span> <span class="n">j</span><span class="p">)</span> </span><span id="L-184"><a name="L-184"></a> <span class="n">Center</span><span class="p">.</span><span class="n">xyz</span> <span class="o">=</span> <span class="mf">0.0</span> </span><span id="L-185"><a name="L-185"></a> <span class="n">GetChildContainerByIndex</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">Rotation</span><span class="p">.</span><span class="n">z</span> <span class="o">=</span> <span class="n">angle</span> <span class="o">*</span> <span class="mf">180.0</span> <span class="o">/</span> <span class="n">pi</span> <span class="o">+</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.0</span> <span class="o">/</span> <span class="k">cDbl</span><span class="p">(</span><span class="n">GetParameterInt</span><span class="p">(</span><span class="s">&quot;columns&quot;</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-186"><a name="L-186"></a> <span class="n">index</span> <span class="o">=</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span> </span><span id="L-187"><a name="L-187"></a> <span class="k">next</span> </span><span id="L-188"><a name="L-188"></a> <span class="k">next</span> </span><span id="L-189"><a name="L-189"></a> <span class="k">end</span> <span class="k">if</span> </span><span id="L-190"><a name="L-190"></a><span class="k">end</span> <span class="k">sub</span> </span></pre></div> </td></tr></table>
plugin, vizrt
--- 
+++ 
@@ -0,0 +1,190 @@
+dim infoText as string
+	infoText = "mkArrange version 2.0.0"
+
+dim buttonsColumns as array[string]
+	buttonsColumns.Push("Left")
+	buttonsColumns.Push("Center")
+	buttonsColumns.Push("Right")
+dim buttonsRows as array[string]
+	buttonsRows.Push("Front")
+	buttonsRows.Push("Middle")
+	buttonsRows.Push("Back")
+dim buttonsLevels as array[string]
+	buttonsLevels.Push("Front")
+	buttonsLevels.Push("Middle")
+	buttonsLevels.Push("Back")
+
+dim buttonsGrid as array[string]
+	buttonsGrid.Push("Matrix")
+	buttonsGrid.Push("Circle")
+
+sub OnInitParameters()
+	RegisterInfoText(infoText)
+	RegisterParameterInt("elementsCount", "Elements Count", 51, 0, 500)
+	RegisterParameterInt("columns", "Columns", 17, 1, 500)
+	RegisterParameterInt("rows", "Rows", 3, 1, 500)
+	RegisterParameterInt("offsetColumns", "Offset Columns", 26, -10000, 10000)
+	RegisterParameterInt("offsetRows", "Offset Rows", 26, -10000, 10000)
+	RegisterParameterInt("offsetLevels", "Offset Levels", 0, -10000, 10000)
+	RegisterRadioButton("centerColumns", "Center Columns", 1, buttonsColumns)
+	SetAnimateParameter(false)
+	RegisterRadioButton("centerRows", "Center Rows", 1, buttonsRows)
+	SetAnimateParameter(false)
+	RegisterRadioButton("centerLevels", "Center Levels", 1, buttonsLevels)
+	SetAnimateParameter(false)
+	RegisterParameterDouble("radiusOne", "Radius 1", 150.0, 0.0, 10000.0)
+	RegisterParameterDouble("radiusTwo", "Radius 2", 150.0, 0.0, 10000.0)
+	RegisterParameterDouble("startAngle", "Start Angle", 0.0, 0.0, 360.0)
+	RegisterParameterDouble("endAngle", "End Angle", 180.0, 0.0, 360.0)
+	RegisterRadioButton("arrangeGrid", "Arrange Grid", 1, buttonsGrid)
+	SetAnimateParameter(false)
+	RegisterPushButton("rebuild", "Rebuild", 0)
+end sub
+
+sub OnExecAction(buttonId As Integer)
+	Open = false
+	if ChildContainerCount = 0 and GetParameterInt("elementsCount") > 0 then
+		AddContainer(3)
+	end if
+	if ChildContainerCount > 0 then
+		this.CreateElements()
+	end if
+	if GetParameterInt("elementsCount") < ChildContainerCount then
+		do while ChildContainerCount > GetParameterInt("elementsCount")
+			GetChildContainerByIndex(GetParameterInt("elementsCount")).Delete()
+		loop
+	end if
+	if GetParameterInt("arrangeGrid") = 0 then
+		this.ArrangeMatrix()
+	else
+		this.ArrangeCircle()
+	end if
+	Scene.UpdateSceneTree()
+end sub
+
+sub OnParameterChanged(parameterName As String)
+	Select Case parameterName
+		Case "elementsCount"
+			for index = 1 to GetParameterInt("elementsCount")
+				GetChildContainerByIndex(index - 1).Active = true
+			next
+			for index = GetParameterInt("elementsCount") to ChildContainerCount - 1
+				GetChildContainerByIndex(index).Active = false
+			next
+		Case "columns", "rows", "offsetColumns", "offsetRows", "offsetLevels", "centerColumns", "centerRows", "centerLevels", "radiusOne", "radiusTwo", "startAngle", "endAngle"
+			if GetParameterInt("arrangeGrid") = 0 then
+				this.ArrangeMatrix()
+			else
+				this.ArrangeCircle()
+			end if
+			for index = 1 to GetParameterInt("elementsCount")
+				GetChildContainerByIndex(index - 1).Active = true
+			next
+			for index = GetParameterInt("columns") * GetParameterInt("rows") to ChildContainerCount
+'				GetChildContainerByIndex(index).Position.x = 0
+'				GetChildContainerByIndex(index).Position.y = 0
+'				GetChildContainerByIndex(index).Position.z = 0
+				GetChildContainerByIndex(index).Active = false
+			next
+		Case "arrangeGrid"
+			if GetParameterInt("arrangeGrid") = 0 then
+				SendGuiParameterShow("centerColumns", 1)
+				SendGuiParameterShow("centerRows", 1)
+				SendGuiParameterShow("centerLevels", 1)
+				SendGuiParameterShow("radiusOne", 0)
+				SendGuiParameterShow("radiusTwo", 0)
+				SendGuiParameterShow("startAngle", 0)
+				SendGuiParameterShow("endAngle", 0)
+				SendGuiRefresh()
+				this.ArrangeMatrix()
+			else
+				SendGuiParameterShow("centerColumns", 0)
+				SendGuiParameterShow("centerRows", 0)
+				SendGuiParameterShow("centerLevels", 0)
+				SendGuiParameterShow("radiusOne", 1)
+				SendGuiParameterShow("radiusTwo", 1)
+				SendGuiParameterShow("startAngle", 1)
+				SendGuiParameterShow("endAngle", 1)
+				SendGuiRefresh()
+				this.ArrangeCircle()
+			end if
+	End Select
+end sub
+
+sub CreateElements()
+	for index = 1 to GetParameterInt("elementsCount")
+		GetChildContainerByIndex(index - 1).AddContainer(1)
+		GetChildContainerByIndex(index - 1).Name = cStr(index - 1)
+		if not Geometry = null then
+			Geometry.Active = false
+			if Geometry.Uuid.FullString = "<00000000-0000-0000-0000000000000000>" then
+				GetChildContainerByIndex(index - 1).CreateGeometry("BUILT_IN*GEOM*"&Geometry.Name)
+			else
+				dim geomPath as string
+				geomPath = System.SendCommand("#"&Geometry.VizId&"*LOCATION_PATH GET")
+				GetChildContainerByIndex(index - 1).CreateGeometry(geomPath)
+			end if
+		end if
+		GetChildContainerByIndex(index - 1).CreateMaterial()
+		GetChildContainerByIndex(index - 1).Scaling.xyz = 0.25
+	next
+end sub
+
+sub ArrangeMatrix()
+	if ChildContainerCount > 0 then
+		dim index as integer
+		for i = 0 to GetParameterInt("columns") - 1
+			for j = 0 to GetParameterInt("rows") - 1
+				GetChildContainerByIndex(index).Position.x = cDbl(GetParameterInt("offsetColumns") * i)
+				GetChildContainerByIndex(index).Position.y = cDbl(GetParameterInt("offsetRows") * j)
+				GetChildContainerByIndex(index).Position.z = cDbl(GetParameterInt("offsetLevels") * j)
+				Select Case GetParameterInt("centerColumns")
+					Case 0
+						Center.x = 0
+					Case 1
+						Center.x = -cDbl(GetParameterInt("offsetColumns") * i) / 2
+					Case 2
+						Center.x = -cDbl(GetParameterInt("offsetColumns") * i)
+				End Select
+				Select Case GetParameterInt("centerRows")
+					Case 0
+						Center.y = 0
+					Case 1
+						Center.y = -cDbl(GetParameterInt("offsetRows") * j) / 2
+					Case 2
+						Center.y = -cDbl(GetParameterInt("offsetRows") * j)
+				End Select
+				Select Case GetParameterInt("centerLevels")
+					Case 0
+						Center.z = 0
+					Case 1
+						Center.z = -cDbl(GetParameterInt("offsetLevels") * j) / 2
+					Case 2
+						Center.z = -cDbl(GetParameterInt("offsetLevels") * j)
+				End Select
+				GetChildContainerByIndex(index).Rotation.z = 0.0
+				index = index + 1
+			next
+		next
+	end if
+end sub
+
+dim pi as double = 3.1415926
+
+sub ArrangeCircle()
+	if ChildContainerCount > 0 then
+		dim index as integer
+		for i = 0 to GetParameterInt("columns") - 1
+			dim angle as double
+			angle = -(GetParameterDouble("endAngle") - GetParameterDouble("startAngle")) * cDbl(i) * pi / cDbl(GetParameterInt("columns") - 1) / 180.0 - (GetParameterDouble("startAngle") + cdbl(i) * cDbl(1 / GetParameterInt("columns"))) * pi / 180.0
+			for j = 0 to GetParameterInt("rows") - 1
+				GetChildContainerByIndex(index).Position.x = cDbl(GetParameterInt("offsetColumns") * j) * -cos(angle) + (GetParameterDouble("radiusOne") * -cos(angle)) + cDbl(GetParameterInt("offsetColumns") * i) * 0.0
+				GetChildContainerByIndex(index).Position.y = cDbl(GetParameterInt("offsetRows") * j) * -sin(angle) + (GetParameterDouble("radiusTwo") * -sin(angle)) + cDbl(GetParameterInt("offsetRows") * j) * 0.0
+				GetChildContainerByIndex(index).Position.z = cDbl(GetParameterInt("offsetLevels") * j)
+				Center.xyz = 0.0
+				GetChildContainerByIndex(index).Rotation.z = angle * 180.0 / pi + cDbl(i) * 0.0 / cDbl(GetParameterInt("columns") - 1)
+				index = index + 1
+			next
+		next
+	end if
+end sub