• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

Ruby script of bezier curves need edit

Scheduled Pinned Locked Moved Developers' Forum
5 Posts 3 Posters 2.0k Views 3 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    piratebrian
    last edited by 25 Mar 2013, 04:22

    I operate a CNC machine and use SketchUp-Pro as the primary CAD for the machine. I want the bezier curve ruby script to make curves with more than 20 segments. The CNC machine will cut the curve in a smooth contour so long as the segment length is quite small but with this script draws always with 20 segments.

    I have tried to edit the ruby script, changing all references to the number 10 or the number 20 to a higher number re-saved and ran it, with no effect.
    What needs changed in the original ruby script to make this happen?

    I appreciate assistance in this matter.

    Below is the raw ruby script code as downloaded from http://www.sketchup.com/download/rubyscripts.html : (under the heading bezier.rb)

    <span class="syntaxdefault"></span><span class="syntaxcomment">#&nbsp;Copyright&nbsp;2004-2005,&nbsp;@Last&nbsp;Software,&nbsp;Inc.<br /><br />#&nbsp;This&nbsp;software&nbsp;is&nbsp;provided&nbsp;as&nbsp;an&nbsp;example&nbsp;of&nbsp;using&nbsp;the&nbsp;Ruby&nbsp;interface<br />#&nbsp;to&nbsp;SketchUp.<br /><br />#&nbsp;Permission&nbsp;to&nbsp;use,&nbsp;copy,&nbsp;modify,&nbsp;and&nbsp;distribute&nbsp;this&nbsp;software&nbsp;for&nbsp;<br />#&nbsp;any&nbsp;purpose&nbsp;and&nbsp;without&nbsp;fee&nbsp;is&nbsp;hereby&nbsp;granted,&nbsp;provided&nbsp;that&nbsp;the&nbsp;above<br />#&nbsp;copyright&nbsp;notice&nbsp;appear&nbsp;in&nbsp;all&nbsp;copies.<br /><br />#&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;"AS&nbsp;IS"&nbsp;AND&nbsp;WITHOUT&nbsp;ANY&nbsp;EXPRESS&nbsp;OR<br />#&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;WITHOUT&nbsp;LIMITATION,&nbsp;THE&nbsp;IMPLIED<br />#&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.<br />#-----------------------------------------------------------------------------<br />#&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;Bezier&nbsp;Curve&nbsp;Tool&nbsp;1.0<br />#&nbsp;Description&nbsp;;&nbsp;&nbsp;&nbsp;A&nbsp;tool&nbsp;to&nbsp;create&nbsp;Bezier&nbsp;curves.<br />#&nbsp;Menu&nbsp;Item&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;Draw->Bezier&nbsp;Curves<br />#&nbsp;Context&nbsp;Menu;&nbsp;&nbsp;&nbsp;Edit&nbsp;Bezier&nbsp;Curve<br />#&nbsp;Usage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;Select&nbsp;4&nbsp;points-<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;1.&nbsp;Start&nbsp;point&nbsp;of&nbsp;the&nbsp;curve<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;2.&nbsp;Endpoint&nbsp;of&nbsp;the&nbsp;curve<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;3.&nbsp;Second&nbsp;control&nbsp;point.&nbsp;&nbsp;It&nbsp;determines&nbsp;the&nbsp;tangency&nbsp;at&nbsp;the&nbsp;start<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;4.&nbsp;Next&nbsp;to&nbsp;last&nbsp;control&nbsp;point.&nbsp;&nbsp;It&nbsp;determines&nbsp;the&nbsp;tangency&nbsp;at&nbsp;the&nbsp;end<br />#&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;8/26/2004<br />#&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;Tool<br />#-----------------------------------------------------------------------------<br /><br />#&nbsp;Ruby&nbsp;implementation&nbsp;of&nbsp;Bezier&nbsp;curves<br /></span><span class="syntaxkeyword">require&nbsp;</span><span class="syntaxstring">'sketchup.rb'<br /><br /></span><span class="syntaxdefault">module&nbsp;Bezier<br /><br /></span><span class="syntaxcomment">#&nbsp;Evaluate&nbsp;a&nbsp;Bezier&nbsp;curve&nbsp;at&nbsp;a&nbsp;parameter.<br />#&nbsp;The&nbsp;curve&nbsp;is&nbsp;defined&nbsp;by&nbsp;an&nbsp;array&nbsp;of&nbsp;its&nbsp;control&nbsp;points.<br />#&nbsp;The&nbsp;parameter&nbsp;ranges&nbsp;from&nbsp;0&nbsp;to&nbsp;1<br />#&nbsp;This&nbsp;is&nbsp;based&nbsp;on&nbsp;the&nbsp;technique&nbsp;described&nbsp;in&nbsp;"CAGD&nbsp;&nbsp;A&nbsp;Practical&nbsp;Guide,&nbsp;4th&nbsp;Editoin"<br />#&nbsp;by&nbsp;Gerald&nbsp;Farin.&nbsp;page&nbsp;60<br /><br /></span><span class="syntaxdefault">def&nbsp;Bezier</span><span class="syntaxkeyword">.eval(</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">t</span><span class="syntaxkeyword">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length&nbsp;</span><span class="syntaxkeyword">-&nbsp;</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword"><&nbsp;</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1.0&nbsp;</span><span class="syntaxkeyword">-&nbsp;</span><span class="syntaxdefault">t<br />&nbsp;&nbsp;&nbsp;&nbsp;fact&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1.0<br />&nbsp;&nbsp;&nbsp;&nbsp;n_choose_i&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">x&nbsp;</span><span class="syntaxkeyword">*&nbsp;</span><span class="syntaxdefault">t1<br />&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">y&nbsp;</span><span class="syntaxkeyword">*&nbsp;</span><span class="syntaxdefault">t1<br />&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">z&nbsp;</span><span class="syntaxkeyword">*&nbsp;</span><span class="syntaxdefault">t1<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">for&nbsp;</span><span class="syntaxdefault">i&nbsp;in&nbsp;1.</span><span class="syntaxkeyword">..</span><span class="syntaxdefault">degree<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fact&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">fact</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">t<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n_choose_i&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">n_choose_i</span><span class="syntaxkeyword">*(</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)/</span><span class="syntaxdefault">i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">fact&nbsp;</span><span class="syntaxkeyword">*&nbsp;</span><span class="syntaxdefault">n_choose_i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span class="syntaxkeyword">=&nbsp;(</span><span class="syntaxdefault">x&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">fn</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">)&nbsp;*&nbsp;</span><span class="syntaxdefault">t1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span class="syntaxkeyword">=&nbsp;(</span><span class="syntaxdefault">y&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">fn</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">)&nbsp;*&nbsp;</span><span class="syntaxdefault">t1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span class="syntaxkeyword">=&nbsp;(</span><span class="syntaxdefault">z&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">fn</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">)&nbsp;*&nbsp;</span><span class="syntaxdefault">t1<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">x&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">fact</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">t</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">x<br />&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">y&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">fact</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">t</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">z&nbsp;</span><span class="syntaxkeyword">+&nbsp;</span><span class="syntaxdefault">fact</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">t</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">z<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span class="syntaxdefault">end&nbsp;</span><span class="syntaxcomment">#&nbsp;method&nbsp;eval<br /><br />#&nbsp;Evaluate&nbsp;the&nbsp;curve&nbsp;at&nbsp;a&nbsp;number&nbsp;of&nbsp;points&nbsp;and&nbsp;return&nbsp;the&nbsp;points&nbsp;in&nbsp;an&nbsp;array<br /></span><span class="syntaxdefault">def&nbsp;Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">points</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">numpts</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curvepts&nbsp;</span><span class="syntaxkeyword">=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">dt&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1.0&nbsp;</span><span class="syntaxkeyword">/&nbsp;</span><span class="syntaxdefault">numpts<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;evaluate&nbsp;the&nbsp;points&nbsp;on&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">for&nbsp;</span><span class="syntaxdefault">i&nbsp;in&nbsp;0.</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">numpts<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">i&nbsp;</span><span class="syntaxkeyword">*&nbsp;</span><span class="syntaxdefault">dt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curvepts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">]&nbsp;=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.eval(</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">t</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;curvepts<br />end<br /><br /></span><span class="syntaxcomment">#&nbsp;Create&nbsp;a&nbsp;Bezier&nbsp;curve&nbsp;in&nbsp;SketchUp<br /></span><span class="syntaxdefault">def&nbsp;Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">numseg&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">16</span><span class="syntaxkeyword">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">model&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br />&nbsp;&nbsp;&nbsp;&nbsp;entities&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities<br />&nbsp;&nbsp;&nbsp;&nbsp;model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">start_operation&nbsp;</span><span class="syntaxstring">"Bezier&nbsp;Curve"<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curvepts&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">points</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">numseg</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;create&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">edges&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_curve</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">curvepts</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">commit_operation<br />&nbsp;&nbsp;&nbsp;&nbsp;edges<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />end<br /><br /></span><span class="syntaxcomment">#-----------------------------------------------------------------------------<br />#&nbsp;Define&nbsp;the&nbsp;tool&nbsp;class&nbsp;for&nbsp;creating&nbsp;Bezier&nbsp;curves<br /><br /></span><span class="syntaxkeyword">class&nbsp;</span><span class="syntaxdefault">BezierTool<br /><br />def&nbsp;initialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">degree<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword"><&nbsp;</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">messagebox&nbsp;</span><span class="syntaxstring">"Minimum&nbsp;degree&nbsp;is&nbsp;1"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;elsif</span><span class="syntaxkeyword">(&nbsp;@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault">20&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">messagebox&nbsp;</span><span class="syntaxstring">"Maximum&nbsp;degree&nbsp;is&nbsp;20"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">20<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;TODO;&nbsp;I&nbsp;should&nbsp;probably&nbsp;adjust&nbsp;the&nbsp;number&nbsp;of&nbsp;segments&nbsp;used&nbsp;for<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;display&nbsp;and&nbsp;creating&nbsp;the&nbsp;curve&nbsp;based&nbsp;on&nbsp;the&nbsp;the&nbsp;degree&nbsp;and/or&nbsp;the<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;maximum&nbsp;curvature.<br /></span><span class="syntaxdefault">end<br /><br />def&nbsp;reset<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts&nbsp;</span><span class="syntaxkeyword">=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0<br />&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxstring">"Click&nbsp;for&nbsp;start&nbsp;point"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">false<br />end<br /><br />def&nbsp;activate<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;There&nbsp;are&nbsp;up&nbsp;to&nbsp;4&nbsp;input&nbsp;points&nbsp;that&nbsp;we&nbsp;keep&nbsp;track&nbsp;of<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;@ip1&nbsp;is&nbsp;the&nbsp;start&nbsp;point&nbsp;of&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;@ip2&nbsp;is&nbsp;the&nbsp;endpoint&nbsp;of&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;@ip3&nbsp;is&nbsp;the&nbsp;second&nbsp;control&nbsp;point.&nbsp;&nbsp;It&nbsp;determines&nbsp;the&nbsp;tangency&nbsp;at&nbsp;the&nbsp;start<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;@ip4&nbsp;is&nbsp;the&nbsp;next&nbsp;to&nbsp;last&nbsp;control&nbsp;point.&nbsp;&nbsp;It&nbsp;determines&nbsp;the&nbsp;tangency&nbsp;at&nbsp;the&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;@ip5&nbsp;is&nbsp;an&nbsp;internal&nbsp;input&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip1&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip2&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip3&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip4&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip5&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;@ip&nbsp;is&nbsp;a&nbsp;temporary&nbsp;input&nbsp;point&nbsp;used&nbsp;to&nbsp;get&nbsp;other&nbsp;positions<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reset<br />&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxstring">"Degree"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">SB_VCB_LABEL<br />&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">SB_VCB_VALUE<br />end<br /><br />def&nbsp;deactivate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate&nbsp;</span><span class="syntaxkeyword">if&nbsp;@</span><span class="syntaxdefault">drawn<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip1&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip2&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip3&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip4&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip5&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />end<br /><br />def&nbsp;onMouseMove</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">flags</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;@</span><span class="syntaxdefault">state<br />&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;0&nbsp;</span><span class="syntaxcomment">#&nbsp;getting&nbsp;the&nbsp;first&nbsp;end&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">ip1&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">copy</span><span class="syntaxkeyword">!&nbsp;@</span><span class="syntaxdefault">ip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;1&nbsp;</span><span class="syntaxcomment">#&nbsp;getting&nbsp;the&nbsp;second&nbsp;end&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">ip1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">ip2&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip2</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">copy</span><span class="syntaxkeyword">!&nbsp;@</span><span class="syntaxdefault">ip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip2</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;2&nbsp;</span><span class="syntaxcomment">#&nbsp;the&nbsp;second&nbsp;control&nbsp;point&nbsp;-&nbsp;tangency&nbsp;at&nbsp;start<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">ip1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">ip3&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip3</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">copy</span><span class="syntaxkeyword">!&nbsp;@</span><span class="syntaxdefault">ip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip3</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxcomment">#&nbsp;the&nbsp;next&nbsp;to&nbsp;last&nbsp;point&nbsp;=&nbsp;tangency&nbsp;at&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">ip2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">ip4&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip4</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">copy</span><span class="syntaxkeyword">!&nbsp;@</span><span class="syntaxdefault">ip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip4</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;3.</span><span class="syntaxkeyword">.@</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxcomment">#&nbsp;internal&nbsp;points&nbsp;-&nbsp;if&nbsp;degree&nbsp;>&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">ip5&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip5</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">copy</span><span class="syntaxkeyword">!&nbsp;@</span><span class="syntaxdefault">ip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">state</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip5</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">tooltip&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">tooltip&nbsp;</span><span class="syntaxkeyword">if&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?<br /></span><span class="syntaxdefault">end<br /><br />def&nbsp;create_curve<br />&nbsp;&nbsp;&nbsp;&nbsp;curve&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">curve&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">20<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;see&nbsp;if&nbsp;this&nbsp;fills&nbsp;in&nbsp;any&nbsp;new&nbsp;faces<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">curve&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">edge1&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">edge1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">find_faces<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Attach&nbsp;an&nbsp;attribute&nbsp;to&nbsp;the&nbsp;curve&nbsp;with&nbsp;the&nbsp;array&nbsp;of&nbsp;points<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curve&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">edge1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">curve<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">curve&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_attribute&nbsp;</span><span class="syntaxstring">"skp"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"crvtype"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"Bezier"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_attribute&nbsp;</span><span class="syntaxstring">"skp"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"crvpts"</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reset<br />end<br /><br />def&nbsp;onLButtonDown</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">flags</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;TODO;&nbsp;Use&nbsp;the&nbsp;two&nbsp;point&nbsp;form&nbsp;of&nbsp;the&nbsp;input&nbsp;point&nbsp;finder&nbsp;to&nbsp;get&nbsp;the&nbsp;new&nbsp;points.<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;I&nbsp;need&nbsp;a&nbsp;way&nbsp;to&nbsp;generate&nbsp;an&nbsp;ip&nbsp;at&nbsp;a&nbsp;given&nbsp;position&nbsp;from&nbsp;code.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;@</span><span class="syntaxdefault">state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxstring">"Click&nbsp;for&nbsp;end&nbsp;point"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">create_curve<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxstring">"Click&nbsp;for&nbsp;point&nbsp;2"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">when&nbsp;2.</span><span class="syntaxkeyword">..@</span><span class="syntaxdefault">degree<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextstate&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">state</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">nextstate</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">state</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">state</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nextstate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxstring">"Click&nbsp;for&nbsp;point&nbsp;#{@state}"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />end<br /><br />def&nbsp;onCancel</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">flag</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate&nbsp;</span><span class="syntaxkeyword">if&nbsp;@</span><span class="syntaxdefault">drawn<br />&nbsp;&nbsp;&nbsp;&nbsp;reset<br />end<br /><br />def&nbsp;onUserText</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">text</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;get&nbsp;the&nbsp;degree&nbsp;from&nbsp;the&nbsp;text<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">newdegree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">text</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">to_i<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">newdegree&nbsp;</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault">0&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">newdegree<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">create_curve&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">>&nbsp;@</span><span class="syntaxdefault">degree&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">beep<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">set_status_text&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">SB_VCB_VALUE<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />end<br /><br />def&nbsp;getExtents<br />&nbsp;&nbsp;&nbsp;&nbsp;bb&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">BoundingBox</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">0&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;We&nbsp;are&nbsp;getting&nbsp;the&nbsp;first&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">display</span><span class="syntaxkeyword">?&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">bb</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">bb</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;bb<br />end<br /><br />def&nbsp;draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Show&nbsp;the&nbsp;current&nbsp;input&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?&nbsp;&&&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">display</span><span class="syntaxkeyword">?&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">true<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;show&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;just&nbsp;draw&nbsp;a&nbsp;line&nbsp;from&nbsp;the&nbsp;start&nbsp;to&nbsp;the&nbsp;end&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_color_from_line</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">ip1</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">ip2</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">true<br />&nbsp;&nbsp;&nbsp;&nbsp;elsif</span><span class="syntaxkeyword">(&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;draw&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">drawing_color&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"black"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curvepts&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">points</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">curvepts</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;draw&nbsp;the&nbsp;control&nbsp;polygon<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;determine&nbsp;the&nbsp;colos&nbsp;for&nbsp;the&nbsp;first&nbsp;and&nbsp;last&nbsp;segments&nbsp;from&nbsp;the&nbsp;input&nbsp;points<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">case&nbsp;@</span><span class="syntaxdefault">state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_color_from_line</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">ip1</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">ip3</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">drawing_color&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"gray"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1.</span><span class="syntaxkeyword">.-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">when&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">degree<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">drawing_color&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"gray"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0.</span><span class="syntaxkeyword">.-</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_color_from_line</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">ip2</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">ip4</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">],&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">drawing_color&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"gray"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">true<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />end<br /><br />end&nbsp;</span><span class="syntaxcomment">#&nbsp;class&nbsp;BezierTool<br /><br />#-----------------------------------------------------------------------------<br />#&nbsp;Define&nbsp;the&nbsp;tool&nbsp;class&nbsp;for&nbsp;editing&nbsp;Bezier&nbsp;curves<br /><br /></span><span class="syntaxkeyword">class&nbsp;</span><span class="syntaxdefault">EditBezierTool<br /><br />def&nbsp;activate<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">false<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Make&nbsp;sure&nbsp;that&nbsp;there&nbsp;is&nbsp;really&nbsp;a&nbsp;Bezier&nbsp;curve&nbsp;selected<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">curve&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">selected_curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">not&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">curve&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select_tool&nbsp;nil<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Get&nbsp;the&nbsp;control&nbsp;points<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">get_attribute&nbsp;</span><span class="syntaxstring">"skp"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"crvpts"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">not&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">beep<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select_tool&nbsp;nil<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Get&nbsp;the&nbsp;curve&nbsp;points&nbsp;from&nbsp;the&nbsp;vertices<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">vertices&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">vertices<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">crvpts&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">vertices</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">collect&nbsp;</span><span class="syntaxkeyword">{|</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">|&nbsp;</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position</span><span class="syntaxkeyword">}<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">numseg&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">vertices</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length&nbsp;</span><span class="syntaxkeyword">-&nbsp;</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">InputPoint</span><span class="syntaxkeyword">.new<br /></span><span class="syntaxdefault">end<br /><br />def&nbsp;deactivate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate&nbsp;</span><span class="syntaxkeyword">if&nbsp;@</span><span class="syntaxdefault">drawn<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />end<br /><br />def&nbsp;resume</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">false<br />end<br /><br />def&nbsp;pick_point_to_move</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">old_pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">pt_to_move<br />&nbsp;&nbsp;&nbsp;&nbsp;ph&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick_helper&nbsp;x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">ph</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick_segment&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword"><&nbsp;</span><span class="syntaxdefault">0&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;We&nbsp;got&nbsp;a&nbsp;point&nbsp;on&nbsp;a&nbsp;segment.&nbsp;&nbsp;Compute&nbsp;the&nbsp;point&nbsp;closest<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;to&nbsp;the&nbsp;pick&nbsp;ray.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">pickray&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pickray&nbsp;x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span class="syntaxkeyword">=&nbsp;-@</span><span class="syntaxdefault">selection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;segment&nbsp;</span><span class="syntaxkeyword">=&nbsp;[@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">],&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">]]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">result&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">closest_points&nbsp;segment</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">pickray<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">result</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;we&nbsp;got&nbsp;a&nbsp;control&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">selection</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">nil<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;old_pt_to_move&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">pt_to_move<br />end<br /><br />def&nbsp;onLButtonDown</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">flags</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Select&nbsp;the&nbsp;segment&nbsp;or&nbsp;control&nbsp;point&nbsp;to&nbsp;move<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick_point_to_move&nbsp;x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">end<br /><br />def&nbsp;onLButtonUp</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">flags</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;if&nbsp;</span><span class="syntaxdefault">not&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">1<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Update&nbsp;the&nbsp;actual&nbsp;curve.&nbsp;&nbsp;Move&nbsp;the&nbsp;vertices&nbsp;on&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;to&nbsp;the&nbsp;new&nbsp;curve&nbsp;points<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">vertices</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length&nbsp;</span><span class="syntaxkeyword">!=&nbsp;@</span><span class="syntaxdefault">crvpts</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">messagebox&nbsp;</span><span class="syntaxstring">"Count&nbsp;of&nbsp;curve&nbsp;points&nbsp;is&nbsp;wrong!"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;model&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">vertices</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">model<br />&nbsp;&nbsp;&nbsp;&nbsp;model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">start_operation&nbsp;</span><span class="syntaxstring">"Edit&nbsp;Bezier&nbsp;Curve"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Move&nbsp;the&nbsp;vertices<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">move_vertices&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">crvpts<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Update&nbsp;the&nbsp;control&nbsp;points&nbsp;stored&nbsp;with&nbsp;the&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set_attribute&nbsp;</span><span class="syntaxstring">"skp"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"crvpts"</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">commit_operation<br />end<br /><br />def&nbsp;onMouseMove</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">flags</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Make&nbsp;sure&nbsp;that&nbsp;the&nbsp;control&nbsp;polygon&nbsp;is&nbsp;shown<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">not&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">drawn<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Move&nbsp;the&nbsp;selected&nbsp;point&nbsp;if&nbsp;state&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxkeyword">&&&nbsp;@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick&nbsp;view</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return&nbsp;if&nbsp;</span><span class="syntaxdefault">not&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">valid</span><span class="syntaxkeyword">?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;@</span><span class="syntaxdefault">selection&nbsp;</span><span class="syntaxkeyword">>=&nbsp;</span><span class="syntaxdefault">0&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Moving&nbsp;a&nbsp;control&nbsp;point<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[@</span><span class="syntaxdefault">selection</span><span class="syntaxkeyword">]&nbsp;=&nbsp;@</span><span class="syntaxdefault">pt_to_move<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;moving&nbsp;a&nbsp;segment<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">pt&nbsp;</span><span class="syntaxkeyword">=&nbsp;@</span><span class="syntaxdefault">ip</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">pt&nbsp;</span><span class="syntaxkeyword">-&nbsp;@</span><span class="syntaxdefault">pt_to_move<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span class="syntaxkeyword">=&nbsp;-@</span><span class="syntaxdefault">selection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">offset</span><span class="syntaxkeyword">!&nbsp;</span><span class="syntaxdefault">vec<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">offset</span><span class="syntaxkeyword">!&nbsp;</span><span class="syntaxdefault">vec<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">pt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">crvpts&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">points</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">numseg</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">else&nbsp;</span><span class="syntaxcomment">#&nbsp;state&nbsp;!=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;See&nbsp;if&nbsp;we&nbsp;can&nbsp;select&nbsp;something&nbsp;to&nbsp;move<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pick_point_to_move</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />end<br /><br />def&nbsp;getMenu</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Done"</span><span class="syntaxkeyword">)&nbsp;{</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select_tool&nbsp;nil</span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">end<br /><br />def&nbsp;getExtents<br />&nbsp;&nbsp;&nbsp;&nbsp;bb&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">BoundingBox</span><span class="syntaxkeyword">.new<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">bb</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">pts<br />&nbsp;&nbsp;&nbsp;&nbsp;bb<br />end<br /><br />def&nbsp;draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Draw&nbsp;the&nbsp;control&nbsp;polygon<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">drawing_color&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"gray"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;@</span><span class="syntaxdefault">pt_to_move&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw_points</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">pt_to_move</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">10</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"red"</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;@</span><span class="syntaxdefault">state&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">1&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">drawing_color&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxstring">"black"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">draw</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">GL_LINE_STRIP</span><span class="syntaxkeyword">,&nbsp;@</span><span class="syntaxdefault">crvpts</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">drawn&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">true<br />end<br /><br />end&nbsp;</span><span class="syntaxcomment">#&nbsp;class&nbsp;EditBezierTool<br /><br />#-----------------------------------------------------------------------------<br /><br />#&nbsp;Function&nbsp;to&nbsp;test&nbsp;to&nbsp;see&nbsp;if&nbsp;the&nbsp;selection&nbsp;set&nbsp;contains&nbsp;only&nbsp;a&nbsp;Bezier&nbsp;curve<br />#&nbsp;Returns&nbsp;the&nbsp;curve&nbsp;if&nbsp;there&nbsp;is&nbsp;one&nbsp;or&nbsp;else&nbsp;nil<br /></span><span class="syntaxdefault">def&nbsp;Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">selected_curve<br />&nbsp;&nbsp;&nbsp;&nbsp;ss&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">selection<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return&nbsp;</span><span class="syntaxdefault">nil&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">not&nbsp;ss</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">is_curve</span><span class="syntaxkeyword">?<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">edge&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">ss</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">first<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return&nbsp;</span><span class="syntaxdefault">nil&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">not&nbsp;edge</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">kind_of</span><span class="syntaxkeyword">?&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Edge<br />&nbsp;&nbsp;&nbsp;&nbsp;curve&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">edge</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return&nbsp;</span><span class="syntaxdefault">nil&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">not&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return&nbsp;</span><span class="syntaxdefault">nil&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">curve</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">get_attribute</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"skp"</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">"crvtype"</span><span class="syntaxkeyword">)&nbsp;!=&nbsp;</span><span class="syntaxstring">"Bezier"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">curve<br />end<br /><br /></span><span class="syntaxcomment">#&nbsp;Edit&nbsp;a&nbsp;selected&nbsp;Bezier&nbsp;curve<br /></span><span class="syntaxdefault">def&nbsp;Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">edit_curve<br />&nbsp;&nbsp;&nbsp;&nbsp;curve&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">selected_curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">not&nbsp;curve&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">beep<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">return<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select_tool&nbsp;EditBezierTool</span><span class="syntaxkeyword">.new<br /></span><span class="syntaxdefault">end<br /><br /></span><span class="syntaxcomment">#&nbsp;Select&nbsp;the&nbsp;Bezier&nbsp;curve&nbsp;tool<br /></span><span class="syntaxdefault">def&nbsp;Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">tool</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select_tool&nbsp;BezierTool</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">degree</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">end<br /><br /></span><span class="syntaxcomment">#&nbsp;Add&nbsp;a&nbsp;menu&nbsp;choice&nbsp;for&nbsp;creating&nbsp;bezier&nbsp;curves<br /></span><span class="syntaxkeyword">if(&nbsp;</span><span class="syntaxdefault">not&nbsp;file_loaded</span><span class="syntaxkeyword">?(</span><span class="syntaxstring">"bezier.rb"</span><span class="syntaxkeyword">)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">add_separator_to_menu</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Draw"</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Draw"</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Bezier&nbsp;Curves"</span><span class="syntaxkeyword">)&nbsp;{&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">tool&nbsp;</span><span class="syntaxkeyword">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Add&nbsp;a&nbsp;context&nbsp;menu&nbsp;handler&nbsp;to&nbsp;let&nbsp;you&nbsp;edit&nbsp;a&nbsp;Bezier&nbsp;curve<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_context_menu_handler&nbsp;</span><span class="syntaxkeyword">do&nbsp;|</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">selected_curve&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_separator<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menu</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Edit&nbsp;Bezier&nbsp;Curve"</span><span class="syntaxkeyword">)&nbsp;{&nbsp;</span><span class="syntaxdefault">Bezier</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">edit_curve&nbsp;</span><span class="syntaxkeyword">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />end<br /><br />end&nbsp;</span><span class="syntaxcomment">#&nbsp;module&nbsp;Bezier<br /></span><span class="syntaxdefault">file_loaded</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"bezier.rb"</span><span class="syntaxkeyword">)&nbsp;</span><span class="syntaxdefault"></span>
    
    1 Reply Last reply Reply Quote 0
    • T Offline
      thomthom
      last edited by 25 Mar 2013, 09:54

      Have you tried Fredo's bezier and spline plugin?
      http://sketchucation.com/forums/viewtopic.php?t=13563

      Offer lots more control and options.

      Thomas Thomassen — SketchUp Monkey & Coding addict
      List of my plugins and link to the CookieWare fund

      1 Reply Last reply Reply Quote 0
      • D Offline
        Dan Rathbun
        last edited by 25 Mar 2013, 21:17

        Simple ... referring to the line numbers in the post above:

        Change line 86 from:
        def Bezier.curve(pts, numseg = 16)
        to:
        def Bezier.curve(pts, numseg = 100)

        (Use whatever default number of segments you want.)

        THEN remove the comma and explicit second parameter ( 20) from the where that method is called in the tool, on (or about) line 196, ie:
        curve = Bezier.curve @pts, 20
        becomes:
        curve = Bezier.curve @pts

        💭

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • P Offline
          piratebrian
          last edited by 30 Mar 2013, 05:46

          Awesome Dan!
          Thanks, I'll try it.
          I'll read up on the Newbie's guide as well.

          1 Reply Last reply Reply Quote 0
          • P Offline
            piratebrian
            last edited by 2 Apr 2013, 04:19

            I'll post some cut tests shortly, but here is the lovely curve:


            bezier 160.JPG

            1 Reply Last reply Reply Quote 0
            • 1 / 1
            1 / 1
            • First post
              1/5
              Last post
            Buy SketchPlus
            Buy SUbD
            Buy WrapR
            Buy eBook
            Buy Modelur
            Buy Vertex Tools
            Buy SketchCuisine
            Buy FormFonts

            Advertisement