sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Plugin] Scale Face to Target Area - TIG

    Scheduled Pinned Locked Moved Plugins
    46 Posts 11 Posters 25.3k Views 11 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.
    • TIGT Offline
      TIG Moderator
      last edited by

      Here's my version, with dialog...

      require 'sketchup.rb'
      ###
      module TIG
        ### scales a select face about its center to a new area, in current uinits.
        def self.scale_face()
         model=Sketchup.active_model
         es=model.active_entities
         ss=model.selection
         fa=nil
         fa=ss[0] if ss[0]
         unless fa && fa.is_a?(Sketchup;;Face)
      	  UI.messagebox("Scale_Face;\n\nPreSelect ONE FACE !")
      	  return nil
         end
         ar=fa.area
         mo=model.options["UnitsOptions"]
         p mo["LengthFormat"]
         case mo["LengthUnit"]
      	when 0
      	 units="in"
      	 if mo["LengthFormat"]==2 #Engineering trap ">>'
      	   units="ft"
      	   ar=ar/12.0/12.0
      	 end
      	when 1
      	 units="ft"
      	 ar=ar/12.0/12.0
      	when 2
      	 units="mm"
      	 ar=ar*25.4*25.4
      	when 3
      	 units="cm"
      	 ar=ar*25.4*25.4/10/10
      	when 4
      	 units="m"
      	 ar=ar*25.4*25.4/1000/1000
      	else
      	 units="??"
         end
         rs=inputbox(["New Area [sq "+units+"];        "], [ar], "Scale_Face")
         return nil unless rs
         na= rs[0]
         na= -na if na < 0
         unless na>0
      	  UI.beep
      	  return nil
         end
         ro=Math.sqrt(na/ar)
         pt=fa.bounds.center
         tr=Geom;;Transformation.scaling(pt, ro)
         model.start_operation("Scale_Face")
      	 es.transform_entities(tr, fa.vertices)
         model.commit_operation
        end
        ###
        UI.menu("Plugins").add_item("Scale_Face"){self.scale_face()} unless file_loaded?(__FILE__)
        file_loaded(__FILE__)
        ###
      end
      ###
      

      Copy/paste code into a script in the Plugins folder named 'TIG-scale_face.rb', and restart Sketchup. Run it from the menu item or by typing TIG.scale_face in the Ruby Console...
      EDIT: Typo fixed in menu code !!!
      EDIT: Improved Unit/Fractional/Engineering handling - see 1st post in the thread for the .rb version.

      TIG

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        na = -na if na < 0
        Why not just use #abs ?
        na = na.abs

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

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

          @thomthom said:

          na = -na if na < 0
          Why not just use #abs ?
          na = na.abs

          No reason.
          I assume you meant na=results[0].abs as a one-step solution.
          I was just writing it on the fly and needed to trap for a negative or zero reply...

          Incidentally, I noted that you transformed the face while I did the face.vertices, is there any advantage in either way?
          Presumably transforming the face changes its vertices and what they are connected to anyway, and conversely transforming the vertices transforms the face and also whatever they are connected to also ?

          TIG

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            @tig said:

            Incidentally, I noted that you transformed the face while I did the face.vertices, is there any advantage in either way?
            Presumably transforming the face changes its vertices and what they are connected to anyway, and conversely transforming the vertices transforms the face and also whatever they are connected to also ?

            I'd expect that under the hood, when you feed entities to #transform_entities it collects the vertices - so [face] and face.vertices should have the exact same effect. I kind of liked face.vertices instead of wrapping the face in an array - feel it reads better as the brackets isn't so easy to see immediately.

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

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

              Actually just face should work as well as [face] because the transformation is the first argument and you can then pass an array OR a series of arguments, so 'face' would be seen as the first one anyway ? ...

              TIG

              1 Reply Last reply Reply Quote 0
              • thomthomT Offline
                thomthom
                last edited by

                API-doh!

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

                1 Reply Last reply Reply Quote 0
                • EarthMoverE Offline
                  EarthMover
                  last edited by

                  👍 You guys both rock! THANKS so much!

                  3D Artist at Clearstory 3D Imaging
                  Guide Tool at Winning With Sketchup
                  Content Creator at Skapeup

                  1 Reply Last reply Reply Quote 0
                  • J Offline
                    jorge2011
                    last edited by

                    You see this plugin?

                    http://rubits.com/play.php?file=areascale

                    1 Reply Last reply Reply Quote 0
                    • thomthomT Offline
                      thomthom
                      last edited by

                      @jorge2011 said:

                      You see this plugin?

                      http://rubits.com/play.php?file=areascale

                      That's nice looking. The VCB is a nice way to control it. But I think $10 is too much for such a trivial script. 😕

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

                      1 Reply Last reply Reply Quote 0
                      • EarthMoverE Offline
                        EarthMover
                        last edited by

                        TIG, having an issue with your script loading properly. I copied and pasted the code exactly into a notepad file and named it - TIG-scale_face.rb. Upon loading Sketchup, I get no errors, but none of my toolbars load. When I delete the script, all the toolbars load again.

                        3D Artist at Clearstory 3D Imaging
                        Guide Tool at Winning With Sketchup
                        Content Creator at Skapeup

                        1 Reply Last reply Reply Quote 0
                        • EarthMoverE Offline
                          EarthMover
                          last edited by

                          Thom, excuse my ignorance, but how would I going about testing your code?

                          3D Artist at Clearstory 3D Imaging
                          Guide Tool at Winning With Sketchup
                          Content Creator at Skapeup

                          1 Reply Last reply Reply Quote 0
                          • thomthomT Offline
                            thomthom
                            last edited by

                            @earthmover said:

                            Thom, excuse my ignorance, but how would I going about testing your code?

                            Sorry Adam, I typed it up and posted in a hurry. You'd put it in a .rb file and form the console invoke: TT_ScaleToArea.scale_face( Sketchup.active_model.selection[0], 4000 )

                            Didn't have the time to add UI.

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

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

                              The code is now tested and working version... I edited the original ! http://forums.sketchucation.com/viewtopic.php?p=419936#p419936
                              Stupid typo unless**.**file_loaded? instead of unless file_loaded?
                              I added the UI as an afterthought and never tested it sorry!

                              TIG

                              1 Reply Last reply Reply Quote 0
                              • EarthMoverE Offline
                                EarthMover
                                last edited by

                                Thanks TIG. It works as long as I am using a decimal unit type. With fractional units, it deletes everything in the model. Not sure why, just have to remember to switch the units before using the plugin. Thanks again. I'll update the first post with the rb file.

                                Also it is still stating inches in the dialog even when the units are feet. No big deal though. Works for what I need. Thanks again! 👍 👍


                                Clipboard01.jpg

                                3D Artist at Clearstory 3D Imaging
                                Guide Tool at Winning With Sketchup
                                Content Creator at Skapeup

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

                                  I'll adjust the code... I did type it on the fly...

                                  TIG

                                  1 Reply Last reply Reply Quote 0
                                  • EarthMoverE Offline
                                    EarthMover
                                    last edited by

                                    If you have time. If not, no worries. I just figured I'd mention the issues in case anyone else needed to use the plugin.

                                    3D Artist at Clearstory 3D Imaging
                                    Guide Tool at Winning With Sketchup
                                    Content Creator at Skapeup

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

                                      I've updated the .rb in your post and edited the post's text to match [hope you are OK with that 😉 ]
                                      It now handles all Unit-types/Fractional/Engineering etc properly.
                                      One oddity is that 'Engineering' displays on screen in 'feet', but the API unit-type [LengthUnit] is left in 'inches' [0] - unlike all other types where the 'LengthUnit' matches the displayed-unit.

                                      Anyway it now works for all combos... I hope 😕

                                      TIG

                                      1 Reply Last reply Reply Quote 0
                                      • EarthMoverE Offline
                                        EarthMover
                                        last edited by

                                        Works great now. Thanks again.

                                        3D Artist at Clearstory 3D Imaging
                                        Guide Tool at Winning With Sketchup
                                        Content Creator at Skapeup

                                        1 Reply Last reply Reply Quote 0
                                        • H Offline
                                          hebeijianke
                                          last edited by

                                          @tig said:

                                          I've updated the .rb in your post and edited the post's text to match [hope you are OK with that 😉 ]

                                          This plug-in only applies to the quadrangle

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

                                            NO, it works on any face.
                                            The selected face is simply scaled to have the desired area.
                                            The dialog shows the current area in current units.
                                            You enter the new area and OK.
                                            The selected face is made to have that area.
                                            So if it's a square, a star or a circle it doesn't matter...

                                            TIG

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

                                            Advertisement