sketchucation logo sketchucation
    • Login
    ⚠️ Attention | Having issues with Sketchucation Tools 5? Report Here

    Can someone create me a rubyscript?

    Scheduled Pinned Locked Moved Plugins
    5 Posts 2 Posters 228 Views 2 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.
    • M Offline
      Maxamillionaire
      last edited by Maxamillionaire

      hello,
      i was wondering if somebody can create me a ruby script for sketchup?

      for me its impossible but is a massive time saver but i think to someone who knows ruby script this will be basic knowlegde

      all it needs to do is create an modxml file that saves text positions as nodes and in the group name

      here's what i want

      plugins (Menu)
      -Modxml
      --Spline Exporter

      once that is clicked it creates this

      <span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">model&nbsp;xmlns</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">system&nbsp;handedness</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"right"&nbsp;</span><span class="syntaxdefault">up</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"z"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">spline&nbsp;name</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(GROUPNAME)"&nbsp;</span><span class="syntaxdefault">cyclic</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0"</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">position&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(X&nbsp;POSITION)"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(Y&nbsp;POSITION)"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(Z&nbsp;POSITION)"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlPrev&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(X&nbsp;POSITION)"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(Y&nbsp;POSITION)"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(Z&nbsp;POSITION)"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlNext&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(X&nbsp;POSITION)"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(Y&nbsp;POSITION)"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"(Z&nbsp;POSITION)"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br /><br />***&nbsp;</span><span class="syntaxdefault">There&nbsp;will&nbsp;be&nbsp;many&nbsp;more&nbsp;nodes&nbsp;but&nbsp;this&nbsp;is&nbsp;the&nbsp;layout&nbsp;</span><span class="syntaxkeyword">for&nbsp;</span><span class="syntaxdefault">one&nbsp;node<br />each&nbsp;extra&nbsp;node&nbsp;will&nbsp;be&nbsp;from&nbsp;</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault">to&nbsp;</span><span class="syntaxkeyword"></</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">><br /><br /></span><span class="syntaxdefault">all&nbsp;text&nbsp;arrows&nbsp;in&nbsp;sketchup&nbsp;will&nbsp;be&nbsp;named&nbsp;node&nbsp;</span><span class="syntaxkeyword">and&nbsp;</span><span class="syntaxdefault">all&nbsp;saved&nbsp;in&nbsp;the&nbsp;same&nbsp;group</span><span class="syntaxkeyword">***<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">spline</span><span class="syntaxkeyword">>&nbsp;<br /><br />***&nbsp;</span><span class="syntaxdefault">at&nbsp;this&nbsp;point&nbsp;another&nbsp;group&nbsp;will&nbsp;be&nbsp;exported&nbsp;using&nbsp;the&nbsp;same&nbsp;framework&nbsp;above&nbsp;but&nbsp;with&nbsp;different&nbsp;node&nbsp;positions<br /><br /></span><span class="syntaxkeyword"></</span><span class="syntaxdefault">model</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault"></span>
      

      heres is a full example of a simple working file to show how the extra nodes and groups would form the file

      <span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">model&nbsp;xmlns</span><span class="syntaxkeyword">=</span><span class="syntaxstring">""</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">system&nbsp;handedness</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"right"&nbsp;</span><span class="syntaxdefault">up</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"z"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">spline&nbsp;name</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"right"&nbsp;</span><span class="syntaxdefault">cyclic</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0"</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">position&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlPrev&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlNext&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">position&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlPrev&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlNext&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">spline</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">spline&nbsp;name</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"left"&nbsp;</span><span class="syntaxdefault">cyclic</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0"</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">position&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlPrev&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlNext&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">position&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlPrev&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<</span><span class="syntaxdefault">controlNext&nbsp;x</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.5"&nbsp;</span><span class="syntaxdefault">y</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"-2.0"&nbsp;</span><span class="syntaxdefault">z</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"0.75"</span><span class="syntaxkeyword">/>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">node</span><span class="syntaxkeyword">>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</</span><span class="syntaxdefault">spline</span><span class="syntaxkeyword">>&nbsp;<br /></</span><span class="syntaxdefault">model</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault"></span>
      

      if anybody could create this that would be amazing and save me ( and a lot of others ) a lot of time

      node model example.jpg

      thankyou for reading this

      1 Reply Last reply Reply Quote 0
      • TIGT Offline
        TIG Moderator
        last edited by

        How do 'we' get the nodes [text objects?] ??
        Are they in two 'spline' groups of text named 'left' and 'right' ?
        Do you select these before running the tool ?
        Are the three XYZ values for each <node> always the same ?
        What are the units of XYZ [" or metric?]
        It's relatively straightforward to write once it's clear what is is we get and what it is we write.

        TIG

        1 Reply Last reply Reply Quote 0
        • M Offline
          Maxamillionaire
          last edited by

          Apologies for the lack of info, I know nothing about coding ( I wish I did )

          I'm currently on my phone do can't provide script examples ATM

          I modified an exporter plugin which can export the x y z positions of the nodes but in a simple x y z format with no extra data

          When I add
          Out.puts "<model xmlns=""/>"
          This creates an error or unexpected error expecting kend

          My friend has recently told me that I need to swap my " for ' to make it read as a string

          But the next one
          Out.print
          Requires both string and data
          '<position> x=' (x position code) 'y=' (y position code) 'z=' ( z position code)
          I have the x y z position code which exports all three in a single line which I can link later

          If someone can fix the above 2 lines of code then I think I can make the exporter work

          If not here's the info you asked for

          Text objects can be named anything it only requires its position these are exported out as construction points

          There are 2 spline groups which are named in sketchup as there respective group names
          Left and right were examples however this is not important as your reference that name in a separate file later

          All the groups are selected with the nodes inside them and then exported as selected

          The x y z values of each node vary on the position of the text object in sketchup ( at the point you place the arrow to)
          Position, next and previous all carry the same positions per node

          Units are exported as metric metres to a precision of either 0.00 or 0.000

          To explain this scenario to everybody it is a piece of rollercoaster track for the game rollercoaster tycoon 3

          Currently to get the spline data you need to export model to blender then add splines which I hate

          I then found that the position next and previous only adjust the smoothness of the curve to which I thought making them all the same and adding more nodes will also make the curve smooth

          The text objects are as you see in the picture they create the curves left and right side of the track that the game then follows with the wheels of the car

          My
          Best example is belgabors su2ase plugin if you get this and create just one text object highlight it and export it to ase you will see his file structure

          In this structure you will see piece called vertex and after this has the x y z values for that node

          If you add more it exports them all as selected

          I deleted all the info this plugin was writing to only output that vertex code

          I then tried it and it exported all the nodes as I wanted but clearly not in a modxml format as above

          So I thought if I alter his plugin to write the XML code around this data then it would create my full spline modxml file to simply code into the game

          This is because the track could have over 100 nodes if the game allows this many and hand writing x y z for each node per track piece would be ridiculous

          This plugin does that all without any editing needed

          Once this works I will then try to alter the controlpoints plugin I have what adds crosses at each segment of a curve to replace the cross with text objects

          Then I draw the curve with however many edges I want add control points then make it a group and export via the plugin here

          Anymore info I can happily send you the files later I currently experimented on

          Also I asked permission off belgabor to edit these files he agreed as long as he was mentioned and was under the Gpu license

          1 Reply Last reply Reply Quote 0
          • TIGT Offline
            TIG Moderator
            last edited by

            First make a long string variable that's formated as desired [use '"' or """ to allow " inside a string...]. Use '\n' to show all newlines as needed...

            str='        <node> 
                        <position x="X" y="Y" z="Z"/> 
                        <controlPrev x="X" y="Y" z="Z"/> 
                        <controlNext x="X" y="Y" z="Z"/> 
                    </node>'
            

            Open a [new] file and start to write [puts] to it, with the standard 'header' lines as needed.
            Note that using a 'puts' adds a '\n' to the end of the added string automatically, so you only need a '\n' to delineate intermediate line-breaks inside any string...
            Add new 'header' lines for the first specific 'group'.
            Now the main part...
            Get a collection of 'texts' to use [probably from a selected group.entities ?].
            Iterate through that list.
            Get each 'text' entity's position.
            pt=text.position x=pt.x.to_m.to_s y=pt.y.to_m.to_s z=pt.z.to_m.to_s
            Now add the x/y/z strings, substituting 'x' for 'X' etc within a copy of 'str'.
            tstr=str.gsub(/X/, #{x}).gsub(/Y/, #{y}).gsub(/Z/, #{z})
            Add [puts] each adjusted 'tstr' string into the file...
            Repeat for each 'text'...
            Add [puts] new 'header' lines for the second specific 'group'.
            Repeat for its texts, as above...
            ...
            Finally add the standard 'footer' lines to the file.
            Close the file.
            Done.

            Test on just a few text-points.
            Check the file's format is as expected - adjust '\n' etc as needed...

            TIG

            1 Reply Last reply Reply Quote 0
            • M Offline
              Maxamillionaire
              last edited by

              Thank you for the fast response
              I will try this later using su2ase as a framework

              I'll post my progress later

              Max

              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