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

    [Plugin] Add Icons [for all SU files on mac]

    Scheduled Pinned Locked Moved Plugins
    47 Posts 8 Posters 10.7k Views 8 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.
    • D Offline
      driven
      last edited by

      @gilles said:

      I get this loading SU:

      Error Loading File jcb_Add_Icon.rb
      undefined method `[]' for #<LanguageHandler:0x10ccfca8 @strings={}>

      SU V 8.0.14345

      cheers gilles,

      I recently changed it to use 'langhandler' for translations, but forgot 'langhandler' changed at v14...

      As a test, could you try this from 'Ruby Console'
      EDIT: code is now added to v1.0.2...

      Add Icon should then work...
      john

      learn from the mistakes of others, you may not live long enough to make them all yourself...

      1 Reply Last reply Reply Quote 0
      • gillesG Offline
        gilles
        last edited by

        @driven said:

        @gilles,

        I got v8 back up and running so the new v1.0.2 in the Plugins Store should now work...

        can you test it to make sure?

        I also have a translation plugin if you want to try it?

        john

        It does not work.

        inside jcb_Add_Icon.rb I read: add_icons_on_mac.version = '1.0.1'

        " c'est curieux chez les marins ce besoin de faire des phrases "

        1 Reply Last reply Reply Quote 0
        • D Offline
          driven
          last edited by

          @gilles said:

          ...inside jcb_Add_Icon.rb I read: add_icons_on_mac.version = '1.0.1'

          oops... I just re-uploaded, and then downloaded the .rbz to check that it is now the 1.0.2 version...

          sorry about that...
          john

          learn from the mistakes of others, you may not live long enough to make them all yourself...

          1 Reply Last reply Reply Quote 0
          • gillesG Offline
            gilles
            last edited by

            Sorry,

            Erreur de chargement du fichier jcb_Add_Icon.rb
            undefined method `[]' for #<LanguageHandler:0x10bccff4 @strings={}>

            Don't pull out your hairs. 💚

            " c'est curieux chez les marins ce besoin de faire des phrases "

            1 Reply Last reply Reply Quote 0
            • D Offline
              driven
              last edited by

              @gilles said:

              Don't pull out your hairs. :mrgreen:

              I've got quite a lot, and it's working on v8 for me so it's some silly uploading issue...
              I'll PM my copy
              john

              learn from the mistakes of others, you may not live long enough to make them all yourself...

              1 Reply Last reply Reply Quote 0
              • G Offline
                greatoe
                last edited by

                For the latest version 1.0.2, I noticed that a solid white colour is added to the backgound of the icon, and if my SketchUp window is not square, red bars will be added to the top and bottom, or left and right of the icon.

                The "set window to square" button/function seems not working, I'm on SketchUp 2015 and OS X 10.10.3.

                I was using an early version of your script, and was pleased with it while it generates icons with transparent background.

                When I wanted to generate an icon, I use a window management tool (named Window Tidy) to set my SketchUp window to nearly (but not exactly) square to have the best icon result.

                May I ask for the transparent background back, and get rid of the red bars?

                The old version I use was running good, but I do like the batch function of adding icons to Layout files and skm file.

                1 Reply Last reply Reply Quote 0
                • D Offline
                  driven
                  last edited by

                  hi

                  I added the 'Red' banding so you can quickly see that a 'better' icon is available by using 'Make Square',

                  I am looking at adding some user preferences that will let you set the band color to any or transparent...

                  but first, get 'Set Square' working is quite critical...

                  It may be a locale issue, do you use 'en-US' for SU or other...

                  if you could run a couple of test's in 'Ruby Console' we can try and work out the issue...
                  use 'Select All' >> Copy >> Paste in 'Rudy Console' >> hit 'Enter/Return'

                      class  Change
                  
                      @plist = (ENV["XPC_SERVICE_NAME"]).split('.')[0..-2].join('.')
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.vpw
                        Sketchup.active_model.active_view.vpwidth
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.vph
                        Sketchup.active_model.active_view.vpheight
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.win_read
                  
                        %x(defaults  read  #{@plist}      "NSWindow Frame SketchUpDoc")
                  
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.frame_read
                  
                        %x(defaults  read  #{@plist}     "Sketchup.MainFrameSize")
                  
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.win_write(arry)
                  
                        %x(defaults  write  #{@plist}      "NSWindow Frame SketchUpDoc" #{arry})
                  
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.frame_write(hash)
                  
                       %x(defaults  write  #{@plist}     "Sketchup.MainFrameSize" -string "#{hash}")
                  
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.su_window
                  
                        win_read.chomp!.split(' ').map{|e| e.to_i}
                  
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      def self.main_frame
                  
                        frame_read.chomp!.gsub(/[\{\}]/, '').split(', ').map{|e| e.to_i}
                  
                      end
                  
                  #----------------------------------------------------------------------------------------#
                  
                      SUD = win_read.dup.chomp!   if not defined? SUD
                  
                      SMF = frame_read.dup.chomp! if not defined? SMF
                  
                      @@revert = false if not defined? SUD
                  
                  #----------------------------------------------------------------------------------------#
                  type = %x(defaults read com.apple.print.PrintingPrefs DefaultPaperID).chomp!
                  p Sketchup.get_locale
                  p @plist
                  p SUD
                  p SMF
                  p [vpw, vph]
                  p type
                  nil
                  end
                  

                  this should return your machines version of this...
                  "en-US" "com.sketchup.SketchUp.2015" "189 651 977 526 0 0 1920 1177 " "{{37, 608}, {977, 569}}" [977, 473] "iso-a4"
                  and hopefully show me what's going wrong...
                  if you can paste that info back here, that a start...

                  I'm working on batch mode at the moment as there are issues with versions other than v2015...
                  john

                  learn from the mistakes of others, you may not live long enough to make them all yourself...

                  1 Reply Last reply Reply Quote 0
                  • G Offline
                    greatoe
                    last edited by

                    hi john,

                    here's the result:

                    "en-US"
                    "com.sketchup.SketchUp.2015"
                    "73 40 1810 1137 0 0 1920 1177 "
                    "{{73, 4}, {1810, 1173}}"
                    [3620, 2124]
                    nil

                    ps. I'm on a 15" retina display macbook pro.

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      driven
                      last edited by

                      cheers,

                      I think I see the issue, SU shows the 'retina' values but system shows 'traditional' sizes...
                      in yours this two double...
                      "{{73, 4}, {1810, 1173}}"
                      [3620, 2124]
                      on mine it stays the same...
                      "189 651 977 526 0 0 1920 1177 "
                      "{{37, 608}, {977, 569}}"
                      [977, 473]

                      I need to add a check for retina, and will post a test file...

                      john

                      learn from the mistakes of others, you may not live long enough to make them all yourself...

                      1 Reply Last reply Reply Quote 0
                      • D Offline
                        driven
                        last edited by

                        what does this return on retina...

                        UI;;WebDialog;;new.screen_scale_factor
                        

                        john

                        learn from the mistakes of others, you may not live long enough to make them all yourself...

                        1 Reply Last reply Reply Quote 0
                        • G Offline
                          greatoe
                          last edited by

                          UI::WebDialog::new.screen_scale_factor
                          2.0

                          1 Reply Last reply Reply Quote 0
                          • D Offline
                            driven
                            last edited by

                            @greatoe said:

                            2.0

                            excellent...

                            I'll add that inn

                            john

                            learn from the mistakes of others, you may not live long enough to make them all yourself...

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              driven
                              last edited by

                              if you paste the code block below first, then JcB::SetWindowSize::Change.set_2_square
                              does it 'go' square?
                              then up arrow in 'Ruby Console' >> return
                              does it revert?

                              =begin
                              
                              Copyright 2015, john@drivenupthewall.co.uk
                              
                              All Rights Reserved - for now...
                              
                              =end
                              module JcB
                              
                                module SetWindowSize
                              
                                  class  Change
                              
                                  @plist = (ENV["XPC_SERVICE_NAME"]).split('.')[0..-2].join('.')
                                  @scale = UI;;WebDialog;;new.screen_scale_factor.to_f
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.vpw
                                    Sketchup.active_model.active_view.vpwidth / @scale
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.vph
                                    Sketchup.active_model.active_view.vpheight / @scale
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.win_read
                              
                                    %x(defaults  read  #{@plist}      "NSWindow Frame SketchUpDoc")
                              
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.frame_read
                              
                                    %x(defaults  read  #{@plist}     "Sketchup.MainFrameSize")
                              
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.win_write(arry)
                              
                                    %x(defaults  write  #{@plist}      "NSWindow Frame SketchUpDoc" #{arry})
                              
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.frame_write(hash)
                              
                                   %x(defaults  write  #{@plist}     "Sketchup.MainFrameSize" -string "#{hash}")
                              
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.su_window
                              
                                    win_read.chomp!.split(' ').map{|e| e.to_i}
                              
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  def self.main_frame
                              
                                    frame_read.chomp!.gsub(/[\{\}]/, '').split(', ').map{|e| e.to_i}
                              
                                  end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                  SUD = win_read.dup.chomp!   if not defined? SUD
                              
                                  SMF = frame_read.dup.chomp! if not defined? SMF
                              
                                  @@revert = false if not defined? SUD
                              
                              #----------------------------------------------------------------------------------------#
                              
                              
                              
                                    def self.default_paper
                              
                                     ##'shipped' ratios with a few international paper sizes...
                                     ratios = { 1.0=>'Square', 1.294=>'US Letter', 1.333=>'US Architectural',\
                                                        1.414=>'A Series (ISO 216)', 1.647=>'US Legal'}
                                     type = %x(defaults read com.apple.print.PrintingPrefs DefaultPaperID)
                              
                                     if type.include? 'Letter'
                                       ratio = 1.294
                                     elsif type.include? 'Arch'
                                       ratio = 1.333
                                     elsif type.include? 'iso'
                                       ratio = 1.414
                                     elsif type.include? 'Legal'
                                       ratio = 1.647
                                     else
                                        prompts = [($add_icon_strngs["Select your Paper Type"])]
                                        defaults = []
                                        ratios.map{|k,v| defaults << v }
                                        choose = defaults.join(',').gsub(',', '|')
                                        input = UI.inputbox(prompts, [defaults[0]],[choose],  ($add_icon_strngs[" You have no 'default' Printer set "]))
                                         if input.include? 'Letter'
                                           ratio = 1.294
                                         elsif input.include? 'Arch'
                                           ratio = 1.333
                                         elsif input.include? 'iso'
                                           ratio = 1.414
                                         elsif input.include? 'Legal'
                                           ratio = 1.647
                                         else
                                           ratio = 1
                                         end
                                     end
                                     @ratio = ratio
                              
                                    end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                    def self.process_window
                              
                                      su_window
                                      sul = su_window[0] # left top corner
                                      suo = su_window[1] # left bottom corner
                                      suw = su_window[2] # width
                                      suh = su_window[3] #
                                      mcl = su_window[4] #
                                      mco = su_window[5] #
                                      mcw = su_window[6] #
                                      mch = su_window[7] #
                              
                                      new_doc = "#{sul} #{suo} #{@new_width} #{suh} #{mcl} #{mco} #{mcw} #{mch}"
                              
                                      main_frame
                                      mfa = main_frame[0]
                                      mfb = main_frame[1]
                                      mfc = main_frame[2] # width
                                      mfd = main_frame[3]
                              
                                      new_mf = "\{\{#{mfa}, #{mfb}\}, \{#{@new_width}, #{mfd}\}\}"
                              
                                      mod_path = Sketchup.active_model.path
                                      Sketchup.active_model.select_tool(nil)
                                      Sketchup.active_model.close_active
                                      Sketchup.send_action('closeDocument;')
                              
                                        if not @@revert
                                          frame_write(new_mf)
                                          win_write(new_doc)
                                          @@revert = true
                                        else
                                          win_revert
                                        end
                              
                                     mod_path != '' ? Sketchup.open_file(mod_path) ; Sketchup.send_action('newDocument;')
                              
                                    end
                              #----------------------------------------------------------------------------------------#
                              
                                    def self.win_revert
                              
                                          frame_write(SMF)
                                          win_write(SUD)
                                          @@revert = false
                              
                                    end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                    def self.set_2_print
                              
                                      default_paper
                                      @new_width = (vph * @ratio)
                                      @@revert = (vpw.between?( @new_width - 3, @new_width + 3 ))
                                      process_window
                              
                                    end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                    def self.set_2_square
                              
                                      @new_width = vph
                                      @@revert = (vpw.between?( @new_width - 3, @new_width + 3 ))
                                      process_window
                              
                                    end
                              
                              #----------------------------------------------------------------------------------------#
                              
                                    class AddIconWindowObserver < Sketchup;;AppObserver
                              
                                      def onQuit
                              
                                        revert = JcB;;SetWindowSize;;Change.class_variable_get(;@@revert) || false
                                        SetWindowSize;;Change.frame_write(SMF) if revert
                                        SetWindowSize;;Change.win_write(SUD)   if revert
                              
                                      end
                              
                                    end
                                       # Attach the observer
                                       Sketchup.add_observer(AddIconWindowObserver.new)
                                  end # change
                              
                              #----------------------------------------------------------------------------------------#
                              
                                end # module
                              end
                              #  JcB;;SetWindowSize;;Change.set_2_square
                              
                              
                              

                              learn from the mistakes of others, you may not live long enough to make them all yourself...

                              1 Reply Last reply Reply Quote 0
                              • G Offline
                                greatoe
                                last edited by

                                1. up arrow >> return again
                                  the new blank SketchUp window go square;

                                up arrow >> return again
                                the new blank SketchUp window revert its size, but goes to a new position on screen;

                                I kept doing this, results are same: the new blank SketchUp window do go square and revert, but the position on screen is changing.

                                1 Reply Last reply Reply Quote 0
                                • G Offline
                                  greatoe
                                  last edited by

                                  1. I draw something in the new blank SketchUp window, save the file.
                                    the "square - revert with different position" circle goes on.

                                  2. I close SketchUp, open it again (with and without an existing file), I do 1) and 2), the result is same as 3).

                                  1 Reply Last reply Reply Quote 0
                                  • G Offline
                                    greatoe
                                    last edited by

                                    1. I pasted the code, hit return
                                      ruby console return "True";

                                    2. JcB::SetWindowSize::Change.set_2_square, return
                                      ruby console return "True";
                                      and SketchUp ask me if I want to save my current work;

                                    3. I click "yes"
                                      ruby console return the following:
                                      Error: #<NoMethodError: undefined method attribute_dictionary' for nil:NilClass> /Users/zz/Library/Application Support/SketchUp 2015/SketchUp/Plugins/jbb_layers_panel/rb/observers.rb:189:in onContentsModified'

                                    if I click "no"
                                    ruby console return:
                                    Error: #<TypeError: reference to deleted Attribute>
                                    /Users/zz/Library/Application Support/SketchUp 2015/SketchUp/Plugins/jbb_layers_panel/rb/observers.rb:203:in each' /Users/zz/Library/Application Support/SketchUp 2015/SketchUp/Plugins/jbb_layers_panel/rb/observers.rb:203:in block in onContentsModified'
                                    SketchUp:1:in `call'

                                    then the window of my current work is closed, while SketchUp is still running;

                                    then I click the SketchUp icon on the Dock, a blank/new SketchUp window pops up, which is square.

                                    1. I press up arrow in ruby console then return
                                      the new SketchUp window revert to previous size, but a little different with its position on screen.
                                    1 Reply Last reply Reply Quote 0
                                    • D Offline
                                      driven
                                      last edited by

                                      cheers for that comprehensive testing,

                                      Is that the latest version of jbb_layers_panel that's causing the errors?

                                      for some reason it's observers are being triggered by closing and re-opening the SU window...

                                      If you temporarily disable it does this code run without issue?

                                      In Preferences, do you have 'new windows' set to 'cascade'?

                                      If so does after deselecting that does the top corner still move?

                                      I do have a completely different 'new' way of changing the window width, but that also needs more testing...

                                      john

                                      learn from the mistakes of others, you may not live long enough to make them all yourself...

                                      1 Reply Last reply Reply Quote 0
                                      • G Offline
                                        greatoe
                                        last edited by

                                        the latest version 1.0.2 and a previous version work same;
                                        how to temporarily disable the observers?

                                        yes 'new windows' are set to 'cascade', deselecting this solved the window moving problem

                                        1 Reply Last reply Reply Quote 0
                                        • D Offline
                                          driven
                                          last edited by

                                          @greatoe said:

                                          the latest version 1.0.2 and a previous version work same;
                                          how to temporarily disable the observers?

                                          I was meaning the version of 'layer panels' it's throwing those errors, if you disable it then it's observers shouldn't run...

                                          @unknownuser said:

                                          yes 'new windows' are set to 'cascade', deselecting this solved the window moving problem

                                          I can turn that on and off in code so I'll add it in...

                                          I'd forgotten that dave had that problem on another version...

                                          learn from the mistakes of others, you may not live long enough to make them all yourself...

                                          1 Reply Last reply Reply Quote 0
                                          • G Offline
                                            greatoe
                                            last edited by

                                            sorry I didn't read your words carefully.

                                            I removed jbb_layers_panel, no more error message in ruby console.

                                            however the close/open window issue remains:
                                            I paste the code and return
                                            JcB::SetWindowSize::Change.set_2_square and return
                                            SketchUp ask if I want to save my file
                                            no matter yes or no the window is closed
                                            I manually re-open the window, continue with up arrow return, window transform forward and backward works fine afterwards.

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

                                            Advertisement