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

    [Plugin] Very fast texture writer

    Scheduled Pinned Locked Moved Plugins
    42 Posts 17 Posters 91.2k Views 17 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.
    • A Offline
      AlexMozg
      last edited by

      bentleykfrog and all!
      This code is even faster than the code with used temp face if the Outliner window is open.
      It is better to create an empty group, rather than create face and then remove its edges:

      
      def quickly_tw(operation=true)
        model = Sketchup.active_model
        tw = Sketchup.create_texture_writer
      # Iterate through materials, assign to face, load in tw
        model.start_operation "texture;)" if operation
        gr = model.entities.add_group
        model.materials.each do |mat|
          if mat.texture
            gr.material = mat
            tw.load(gr)
          end
        end
      # Output textures
        tw.write_all(File.dirname(Sketchup.active_model.path) + "/", false)
        model.abort_operation if operation
      end
      
      

      And also and if by chance the temp face with the same coordinates is already defined in the model? Can this happen? 😉
      Thank you bentleykfrog 😉

      1 Reply Last reply Reply Quote 0
      • B Offline
        bentleykfrog
        last edited by

        Nice plugin Didier and takesh,

        I've modified it slightly to allow for batch processing and updating of textures.

        Update - January 15th 2011
        This is a minor update to change the entity used to create a texture to a group. This limits any interference with the models geometry on export & import (thanks to AlexMozg for the code).

        A description of all the operations are below. The plugin can be accessed by the menu [Plugins] - [Export All Textures]:

        • [Export All Textures]

        • This operation will export all the textures from the model to a 'textures' folder in the same directory as the model

        • [Export Settings] - [Update Model's Texture Paths]

        • When exporting textures with this option enabled, each texture path in the model will be updated to the path of the exported texture image.

        • [Import All Textures]

        • Choose a file within a folder to import all the textures in that folder. Each file is compared with the models textures by its namespace (ie. the file "AsphaltCloseups00212M.jpg" will be replaced with the file "AsphaltCloseups00212M" regardless of its extension)

        • [Import Settings] - [Only Update Existing Materials]

        • With this option enabled, only files with namespace equivalents to the models textured materials will be imported.

        • [Import Settings] - [Create New Materials for Unique Textures]

        • With this option enabled, files that have no namespace equivalents to the models textured materials will be imported into a new material.

        • [Import Settings] - [Create New Materials for All Textures]

        • With this option enabled, each texture file will be imported into a new material.

        • [Import Settings] - [Consolidate to Texture Folder]

        • With this option enabled, each texture file will be copied to the 'texture' folder.

        • [Export From Selection]

        • Only textures in the active selection will be exported to the 'texture' folder

        • [Import To Selection]

        • Only textures that have a match to the active selection's materials will be imported.

        • [Selection Settings] - [Make Painted Components Unique]

        • With this option selected, painted components in the selection that aren't unique to the selection will be made unique.

        • [Selection Settings] - [Materials Unique to Selection]

        • With this option selected, materials that aren't unique to the selection will be made unique. (ie. a duplicate of the material is made and all entities in the selection are linked to this duplicate)

        • [Selection Settings] - [Consolidate to Texture Folder on Import]

        • With this option selected, all imported textures will be copied to the 'texture' folder.

        I haven't been able to replicate your exporting issues takesh, could you link me to an example?

        Also, I haven't tested this on a mac, so there could be further issues.

        Changelog

        • 15th January 2011 (v0.41)

        • Face->Group Change: Changed the entity used to create a texture file to a group (thanks to AlexMozg)

        • 14th January 2011 (v0.4)

        • Export/Import Selection added: Export/import selection option added so parts of the model can be edited

        • Better Image Checking: The regex checking for BMP and JPEG images has been updated

        • Opacity & Color retained: Material opacity and color settings are now retained when they are modified

        • 9th January 2011

        • New Materials on Import added: On import, new materials are created for textures that have no existing matching materials in the model

        • Image checking: added some rudimentary regex image checking to the import script, could still be a bit buggy

        • Debug and reports: known errors are reported in the ruby console when open on operation

        Known Issues

        • Targa files will import but can't be written with the TextureWriter[/list]

        -niall

        PS:If you run into any trouble importing jpg,png,bmp or tif files please post the image to this topic so I can get a look at its header data.


        Version 0.41 - Updated 2011-01-14

        1 Reply Last reply Reply Quote 0
        • B Offline
          bentleykfrog
          last edited by

          @alexmozg said:

          It is better to create an empty group, rather than create face and then remove its edges

          Nice idea AlexMozg, thanks for the code. I've updated the script to do this. I've also noticed the more times the operations are run, the slower the response from tw.write. I'm not exactly sure whats going on here but it seems if you re-open your file the lag goes away. Anyway, follow the link Very Fast Texture Writer v0.41

          1 Reply Last reply Reply Quote 0
          • B Offline
            bentleykfrog
            last edited by

            @jason_maranto said:

            Outstanding! -- this makes creating and updating material libraries so much easier.

            Best,
            Jason.

            Thanks Jason 😄

            I'm thinking of adding some proportion options on import to the next update. For example, you export some textures that aren't tiling well, batch process them through some texture tiling application, and then import the new textures and modify the proportions of the materials to suit...Maybe some options like:

            [If Different, Fit Proportions] - fits the new texture inside the width and height of the material dimensions
            [If Different, Preseve Proportions] - stretches the new texture to fit the material dimensions
            [If Different, Respect Width] - Matches the width dimension and scales the height dimension to suit the new texture
            [If Different, Respect Height] - Matches the height dimension and scales the width dimension to suit the new texture

            What do you think?

            -niall

            1 Reply Last reply Reply Quote 0
            • jason_marantoJ Offline
              jason_maranto
              last edited by

              Sounds very good to me -- also if somehow a custom value for newly created materials could be input in a manner similar to below:

              In the recent past I've made a large color range of tiles -- 183 RBG colors + 1 texture file set to colorize for each of the RGB values, all set to the same tiling with each RGB color becoming the custom name of the file.

              So being able to automate a batch of new files by specifying:

              1) Base Material name (ie: mytile_)
              2) Comma separated or tab delimited (or similar) text file with RGB values and names (to be added at the end of the base name ie: mytile_bright green)
              3) A Texture
              4) Material options (ie: colorize, scale, transparency)

              Would be a huge time-saver in instances like this -- I've done well over 2000 materials manually like this... to have that process automated would allow me to be far more productive. Although since I seem to be one of the few here excited by this maybe I'm alone in producing huge custom libraries...

              Regardless, the plugin as it stands is fantastic and has already saved me a few hours of needlessly navigating for textures when creating materials... so thank-you again. 😄

              Best,
              Jason.

              I create video tutorial series about several 2D & 3D graphics programs.

              1 Reply Last reply Reply Quote 0
              • hellnbakH Offline
                hellnbak
                last edited by

                I can't tell which is the latest version of this, very confusing.

                "Politicians are just like diapers -- they need to be changed often, and for the same reason"

                1 Reply Last reply Reply Quote 0
                • Didier BurD Offline
                  Didier Bur
                  last edited by

                  Here is the latest version: http://rhin.crai.archi.fr/rld/plugin_details.php?id=143

                  DB

                  1 Reply Last reply Reply Quote 0
                  • jason_marantoJ Offline
                    jason_maranto
                    last edited by

                    I'm having a few issues with this plugin when importing image libraries:

                    1. The tiling settings for the images are coming in with the x and y scales reversed (the aspect ratio is reversed from the actual image).

                    2. I would like to retain any "-" and "_" characters in the image name (when converted to the SKM name).

                    Best,
                    Jason.

                    I create video tutorial series about several 2D & 3D graphics programs.

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

                      Around lines #90 and #129 it reads
                      mat.texture.size = [twidth,theight]
                      to swap the height/width values change it to read
                      mat.texture.size = [theight, twidth]
                      BUT the width SHOULD come first in the .size=[] method as it is originally coded... so I am perplexed... 😕

                      Around line #59 it reads
                      filename = filename.delete('^A-Za-z0-9')
                      to keep the - and _ in file-names, change it to read...
                      filename.gsub!(/[^A-Za-z0-9_-]/, '')
                      This WILL work...

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • jason_marantoJ Offline
                        jason_maranto
                        last edited by

                        Thanks TIG, I did my own hacks to the Ruby to make it usable for right now, but your code is much nicer so I will change it out 😄

                        For the record the changes I made were at lines 344 and 368 -- but I only barely know my way around a Ruby file 👊

                        Best,
                        Jason.

                        I create video tutorial series about several 2D & 3D graphics programs.

                        1 Reply Last reply Reply Quote 0
                        • andybotA Offline
                          andybot
                          last edited by

                          This is a fantastic help. Thank you!

                          http://charlottesvillearchitecturalrendering.com/

                          1 Reply Last reply Reply Quote 0
                          • unclebimU Offline
                            unclebim
                            last edited by

                            Is there any chance of running the plugin in SU 2014?

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

                              The original fast_tw.rb works in v2014, but is Ruby Console run.
                              This attached version is the same as the one in the PluginStore's RBZ.
                              fast_tw.rb
                              The Depot's fast_tw_3.rb is menu driven and has several extra options.
                              It is compatible with v2014.
                              This has some issues, which my post a little earlier explained how to fix.
                              This attached version has those issues fixed.
                              I have incremented it to fast_tw_3a.rb
                              fast_tw_3a.rb
                              In an earlier post in this thread another version of the RB was attached [confusingly with the same version suffix].
                              This is also menu driven and includes several additional options.
                              BUT this one is full of coding issues and it is NOT compatible with v2014.
                              This attached version has those issues fixed and is now v2014 compatible.
                              I have renamed it fast_tw_4.rb for the avoidance of doubt.
                              fast_tw_4.rb
                              Because of the non-standard RB naming conventions you should ensure any older "fast_tw" RB files are removed...
                              I have swapped the texture's height,width in the ..size=[], which [oddly] seems to work - if you have issues with that try editing the v3a/v4 RBs and find every ..size=[] and swap them back to be [width,height] ??

                              TIG

                              1 Reply Last reply Reply Quote 0
                              • unclebimU Offline
                                unclebim
                                last edited by

                                Thank you very much, TIG!

                                1 Reply Last reply Reply Quote 0
                                • A Offline
                                  AcesHigh
                                  last edited by

                                  Can I make an improvement request? It would be nice if you could choose if you want the texture exported with the MATERIAL name (as it happens now) or the original texture name, if available.

                                  1 Reply Last reply Reply Quote 0
                                  • S Offline
                                    samyell77
                                    last edited by

                                    Hi,
                                    Great plugin - thanks! Always amazed by the fantastic plugins that you can find on sketchucation! Thank you...!
                                    I like AcesHigh's point about material names - would be a handy feature but even without this plugin will come in very handy.
                                    Sam

                                    SU Pro 2016
                                    Dell Precision M4800
                                    PC Windows 10
                                    Intel Core i7-4900MQ @ 2.80ghz
                                    Nvidia Quadro K2100M
                                    16gb RAM

                                    1 Reply Last reply Reply Quote 0
                                    • Lemoyne ArchitectL Offline
                                      Lemoyne Architect
                                      last edited by

                                      @aceshigh said:

                                      Can I make an improvement request? It would be nice if you could choose if you want the texture exported with the MATERIAL name (as it happens now) or the original texture name, if available.

                                      I’m trying to use fast_tw on OSX 10.9.5 and SU 2015 and I’m getting file names such as "fa3c172f4fc034eb6af0489c89b26612.jpg” for everything. From the comment above, am I understanding correctly that it SHOULD save the files with the MATERIAL name you’d see in SU?

                                      I’ve tried using both fast_tw_3a.rb and fast_tw_4.rb with the same results.

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

                                        did you the one in the PluginStore's that's a RBZ?

                                        that error in the name looks like it's a Ruby Depot 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
                                        • Lemoyne ArchitectL Offline
                                          Lemoyne Architect
                                          last edited by

                                          I tried 3a and 4 from TIG’s post:

                                          @tig said:

                                          The original fast_tw.rb works in v2014, but is Ruby Console run.
                                          This attached version is the same as the one in the PluginStore's RBZ.
                                          [attachment=2:3ie6v21l]<!-- ia2 -->fast_tw.rb<!-- ia2 -->[/attachment:3ie6v21l]
                                          The Depot's fast_tw_3.rb is menu driven and has several extra options.
                                          It is compatible with v2014.
                                          This has some issues, which my post a little earlier explained how to fix.
                                          This attached version has those issues fixed.
                                          I have incremented it to fast_tw_3a.rb
                                          [attachment=1:3ie6v21l]<!-- ia1 -->fast_tw_3a.rb<!-- ia1 -->[/attachment:3ie6v21l]
                                          In an earlier post in this thread another version of the RB was attached [confusingly with the same version suffix].
                                          This is also menu driven and includes several additional options.
                                          BUT this one is full of coding issues and it is NOT compatible with v2014.
                                          This attached version has those issues fixed and is now v2014 compatible.
                                          I have renamed it fast_tw_4.rb for the avoidance of doubt.
                                          [attachment=0:3ie6v21l]<!-- ia0 -->fast_tw_4.rb<!-- ia0 -->[/attachment:3ie6v21l]

                                          1 Reply Last reply Reply Quote 0
                                          • Lemoyne ArchitectL Offline
                                            Lemoyne Architect
                                            last edited by

                                            Note these lines from above:

                                            @tig said:

                                            The original fast_tw.rb works in v2014, but is Ruby Console run.
                                            This attached version is the same as the one in the PluginStore's RBZ.

                                            So the one in the PlugInStore is the first generation - and runs in the Ruby Console. The 3a and 4 versions are updates that run in menus.

                                            But I still get the same results in any of them - that I get alphanumeric strings for file names instead of the material names that were in the SKP file.

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

                                            Advertisement