sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🛣️ Road Profile Builder | Generate roads, curbs and pavements easily Download

    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.
    • piratebrianP Offline
      piratebrian
      last edited by

      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
      • thomthomT Offline
        thomthom
        last edited by

        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
        • Dan RathbunD Offline
          Dan Rathbun
          last edited by

          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
          • piratebrianP Offline
            piratebrian
            last edited by

            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
            • piratebrianP Offline
              piratebrian
              last edited by

              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
              • First post
                Last post
              Buy SketchPlus
              Buy SUbD
              Buy WrapR
              Buy eBook
              Buy Modelur
              Buy Vertex Tools
              Buy SketchCuisine
              Buy FormFonts

              Advertisement