• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

[PlugIn] 3D Printers G-Code importer/Exporter Ver0.0.9

Scheduled Pinned Locked Moved Plugins
29 Posts 13 Posters 41.7k Views 13 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
    Davidfi1
    last edited by Davidfi1 17 Jan 2013, 16:11

    Hello Guys.
    Small step in Plugin Vertion giant leap for 3D-Printer's kind

    Attached is a 3D-Printer's G-Code Importer AND Exporter.
    It will turn Sketchup to a Virtual 3D-Printer 😍
    Plugin

    Version 0.0.9
    New in Importer:
    Will put a Attribute with the value of speed from the imported G-Code in the
    "filament" & "MotorMove" components
    Change the Z scale of the "filament" component according to the amount of
    extruded filament in the imported G-Code
    New in Exporter:
    Export to the G-Code the Attribute of speed as was imported by the importer.
    Export the Extruded length according to the Z scale of the "filament" component

    Version 0.0.8
    Added to the exporter the ability to connect "unconnected" components
    so now if a component is deleted - the exporter will just put a link to the
    first component of the disconnected chain

    Version 0.0.7
    Now we have a G-Code Exporter of the previously imported G-Code in the plugin menu.
    So I changed the name to GcodeTools ... (please delete the old one)
    The new exporter is a very simple assuming that in the next versions will be
    adding all the needed features to make it usable
    [highlight=#ffff40:34kfw3wr]- so please let me know what need's to be fixed!.[/highlight:34kfw3wr]

    Version 0.0.6
    Added Layers - Each New Z level gets it's one layer
    - Using the Sketchup Layer it is easy to hide and unhide Layers of the Gcode
    Version 0.0.5
    Impruvment to speed by making no shadow hidden edjes of the filament

    If you just want to help clean up my begginesrs ruby codeing
    you can use this test gcode files Test files

    I would like to thenk the guys who helped me allot in the
    Developers' Forum at http://sketchucation.com/forums/viewforum.php?f=180
    Thank you.

    P.S

    1. Look at the ruby console to see the progress of the importing - every 1000 lines it prints the line count
    2. In the "Entity Info" you can see the line of G Code that is responsiable for the filament pice
    3. A move of the motors is also a component with a line inside - so you could hide it by hiding the line inside one of the movements.

    My Motivation for writing this Importer:
    I am trying to learn about 3D printing while waiting for my printer to arrive.
    I was using SketchUp to play with 3D design for many years, so it was natural for me to
    make a 3D model with SketchUp - slice it - and see the result.

    I made few models, downloaded few from the internet - that was no problem.
    Slicing turned out to be much harder.
    I tried 3 slicing softwares with different levels of success.
    In the process foud out that there are two types of G-Code formats,
    and that it is not possible to convert from one type of G-Code to the other.

    So I started to write an importer of G-Code for Sketchup.
    My intention is that it will be possible to see what the G-Code will look like in a "neutral" environment and will enable the export of G-Code in a "wanted" format

    Please follow my work and give any advice you think fit.
    Keep in mind it is a work in progress...

    Thank you,
    David.


    The Plugin


    Plugin


    The Plugin


    Plugin


    Plugin

    1 Reply Last reply Reply Quote 0
    • W Offline
      Whaat
      last edited by 17 Jan 2013, 18:29

      I could sure use this. Looking forward to trying it out. Thanks!

      SketchUp Plugins for Professionals

      1 Reply Last reply Reply Quote 0
      • S Offline
        sdmitch
        last edited by 17 Jan 2013, 21:50

        I find a problem with the Get_Filament_component method. The problem occurs when you run the plugin a second time. The @filamentComp and @HeadMoveComp are not remembered from the first to the second run so @HeadMoveComp is not redefined because of the return executed when @filamentComp is found and redefined.

        Here is my re-write

           def Get_Filament_component
           @filamentComp =Sketchup.active_model.definitions[ "filament" ]
            # if there is no existing component named "filament", make one
            unless @filamentComp
             @nozel = 0.4.mm
             @layerH = 1.mm # the Z axis movements will scale this parameter
             @filamentComp = Sketchup.active_model.definitions.add("filament")
             @pts = [ ORIGIN,
             [-@nozel/2, 0.mm , -@layerH/2], 
             [-@nozel/2, 0.mm , -@layerH ], 
             [ @nozel/2, 0.mm , -@layerH ], 
             [ @nozel/2, 0.mm , -@layerH/2] ]
             @newface = @filamentComp.entities.add_face(@pts)
             @newface.reverse! if @newface.normal.y < 0
             @newface.pushpull(1.mm)
            end
           @HeadMoveComp = Sketchup.active_model.definitions[ "HeadMove" ]
            unless @HeadMoveComp
             @HeadMoveComp = Sketchup.active_model.definitions.add("HeadMove")
             @oldPoint = [0, 0, 0]
             @newPoint = [0, 1.mm, 0]
             @HeadMoveComp.entities.add_line @oldPoint, @newPoint
            end
           end # def Get_Filament_component
        
        

        Nothing is worthless, it can always be used as a bad example.

        http://sdmitch.blogspot.com/

        1 Reply Last reply Reply Quote 0
        • Dan RathbunD Offline
          Dan Rathbun
          last edited by 18 Jan 2013, 02:49

          In Ruby, everything is an object, and every object has a reference.

          References that begin with a capital letter are constants. Module and Class references (names) are constants that are in title case (without underscore spacing, such as FileImporter).
          Other constants are all capital characters (with underscore spacing, such as ROOT_PATH.)

          Methods are also objects, and the method name is it's reference, which by convention is lower case (with underscore spacing, such as get_filament_component.)

          The Ruby interpreter is designed to work fastest when we follow these conventions.

          💭

          I'm not here much anymore.

          1 Reply Last reply Reply Quote 0
          • Dan RathbunD Offline
            Dan Rathbun
            last edited by 18 Jan 2013, 03:21

            When choosing a file to import... and clicking the "Options..." button (in the import file dialog,) I get an error:

            Error: #<NoMethodError: undefined method[]' for nil:NilClass>
            C:/Program Files/Google/Google SketchUp 8/Plugins/Fishelzon/GcodeImporterVer0.0.3.rb:262:in units_dialog' C:/Program Files/Google/Google SketchUp 8/Plugins/Fishelzon/GcodeImporterVer0.0.3.rb:102:in do_options'`

            The error occurs on line 262 of the plugin file, viz:
            cu = Sketchup.active_model.options["unitsOptions"]["LengthUnit"]

            Reason: The Sketchup::OptionsManager instance method [] returns a valid Sketchup::OptionsProvider instance object IF the key is valid, otherwise it returns nil (the singleton instance of the NilClass class.)
            Since the key is invalid, nil is returned, and since the NilClass class does not have a [] instance method, the NoMethodError exception is raised.

            The valid key name to get a reference to the units options provider is "UnitsOptions"


            NOW... there are ONLY TWO possible import units in a Gcode file.. inches (G20) and mm (G21), so can the plugin set mm as default, and then recognize the Gcodes G20 and G21, to change the import units "on-the-fly" as needed ?

            This would actually make the import file options dialog unnecessary (at least when it comes to setting import units.)
            💭

            I'm not here much anymore.

            1 Reply Last reply Reply Quote 0
            • Dan RathbunD Offline
              Dan Rathbun
              last edited by 18 Jan 2013, 07:58

              Key for saving defaults:

              It is preferable to use underscore "" instead of spaces, and to prepend "Plugin" to the key, thus:

              "Plugin_Fishelzon_GcodeImporter"

              I'm not here much anymore.

              1 Reply Last reply Reply Quote 0
              • D Offline
                Davidfi1
                last edited by 18 Jan 2013, 20:17

                OK Guys - Thank you.
                I fixed the code according to your suggestions in the next version
                I added a "last version" load to the loader and updated the version number.
                Waiting for yor remarks befor moving on.

                I am thinking about how to implement a "G-Code exporter"
                I need to figure out a way to keep the unused G-Code lines.
                The adding of these lines will enable the exporter to put these lines
                back to the exported G-Code.

                1 Reply Last reply Reply Quote 0
                • Didier BurD Offline
                  Didier Bur
                  last edited by 21 Jan 2013, 09:47

                  Hi,
                  Call me stupid but how to launch the script ??

                  DB

                  1 Reply Last reply Reply Quote 0
                  • thomthomT Offline
                    thomthom
                    last edited by 21 Jan 2013, 10:14

                    @didier bur said:

                    Hi,
                    Call me stupid but how to launch the script ??

                    It's an importer, you find in the list of import formats. File > Import and in the file dialogue you pick the fileformat for G code.

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

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      Davidfi1
                      last edited by 24 Jan 2013, 07:15

                      Uploaded vertion 0.0.5.
                      Include impruvment to speed and rendering

                      Please let me know if you like it 😄

                      1 Reply Last reply Reply Quote 0
                      • Dan RathbunD Offline
                        Dan Rathbun
                        last edited by 24 Jan 2013, 10:35

                        Line 117:
                        if (Sketchup.version_number < 7)

                        should be:
                        if (Sketchup.version.to_i < 7)

                        Line 135:

                        # wait forever
                        while 1==1 do 
                        end # while 1
                        
                        

                        That is dangerous! It could lock up SketchUp if an error occurs, causing file handles to remain open.

                        Use a continue messagebox instead.

                        And you should return a numeric error code instead of 0 when an exception occurs.

                        I'm not here much anymore.

                        1 Reply Last reply Reply Quote 0
                        • Dan RathbunD Offline
                          Dan Rathbun
                          last edited by 24 Jan 2013, 10:43

                          @davidfi1 said:

                          Uploaded vertion 0.0.5.
                          Include improvment to speed and rendering

                          Just so you know...

                          The native Ruby Console, is not actually a "true console interface".
                          It is really a dialog with a non-editable multi-line text control.
                          Writing output to the text control is VERY slow, and gets SLOWER the more that is written.

                          (*) Write only what you NEED to.
                          OR ...
                          Perhaps write output to a log file instead, and after the import, display the log file's text in a Webdialog frame. (The browser can display plain text files.)

                          I'm not here much anymore.

                          1 Reply Last reply Reply Quote 0
                          • D Offline
                            Davidfi1
                            last edited by 24 Jan 2013, 19:24

                            Dan.
                            Thank you, you are very helpfull.
                            I don't really know what to do with these errors in the G-Code I am getting.
                            It is not even correct to say they are errors at all.
                            I use the ruby console as a very simple "information console"
                            There is nothing to do with these "errors" just know about them...

                            If somone don't want to see these messages he could just close the console.

                            In the following versions I will not open the ruby console at all.

                            Thank you again.
                            David.

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              Davidfi1
                              last edited by 24 Jan 2013, 19:29

                              @dan rathbun said:

                              Line 117:
                              Line 135:

                              # wait forever
                              > while 1==1 do 
                              > end # while 1
                              > 
                              

                              That is dangerous! It could lock up SketchUp if an error occurs, causing file handles to remain open.

                              will do.
                              Thank you.

                              1 Reply Last reply Reply Quote 0
                              • D Offline
                                Davidfi1
                                last edited by 27 Jan 2013, 13:46

                                New Version 0.0.6 posted
                                Thank you.

                                1 Reply Last reply Reply Quote 0
                                • A Offline
                                  antoninoion
                                  last edited by 2 Feb 2013, 03:10

                                  I'm getting the following error in the ruby console every time I start SU and it doesn’t show the G-code file type in the import file types list:

                                  GcodeImporterVer0.0.6.rb:38: warning: Object#type is deprecated; use Object#class

                                  I installed the plugin through the "Preferences/Extensions/Install Extension" option. I have SU V8.0.16845 for Mac, any idea on what I should do?

                                  Thanks
                                  Antonio

                                  1 Reply Last reply Reply Quote 0
                                  • D Offline
                                    Davidfi1
                                    last edited by 2 Feb 2013, 20:51

                                    @antoninoion said:

                                    I'm getting the following error in the ruby console every time I start SU and it doesn’t show the G-code file type in the import file types list:

                                    GcodeImporterVer0.0.6.rb:38: warning: Object#type is deprecated; use Object#class

                                    I installed the plugin through the "Preferences/Extensions/Install Extension" option. I have SU V8.0.16845 for Mac, any idea on what I should do?

                                    Thanks
                                    Antonio

                                    I found the problem - fixing it soon.
                                    change line 38 from:
                                    if @ent.type == Sketchup::Edge
                                    to:
                                    if @ent.class == Sketchup::Edge

                                    But wait for more testing - I will post a fix soon
                                    Thank you.

                                    1 Reply Last reply Reply Quote 0
                                    • D Offline
                                      Davidfi1
                                      last edited by 9 Feb 2013, 19:13

                                      Version 0.0.7
                                      Now we have a G-Code Exporter of the previously imported G-Code in the plugin menu.
                                      So I changed the name to GcodeTools ... (please delete the old one)
                                      The new exporter is a very simple assuming that in the next versions will be
                                      adding all the needed features to make it usable

                                      • so please let me know what need's to be fixed!.
                                      1 Reply Last reply Reply Quote 0
                                      • D Offline
                                        Davidfi1
                                        last edited by 14 Feb 2013, 22:14

                                        Version 0.0.8
                                        Added to the exporter the ability to connect "unconnected" components
                                        so now if a component is deleted - the exporter will just put a link to the
                                        first component of the disconnected chain

                                        1 Reply Last reply Reply Quote 0
                                        • D Offline
                                          Davidfi1
                                          last edited by 23 Feb 2013, 18:27

                                          Version 0.0.9
                                          New in Importer:
                                          Will put a Attribute with the value of speed from the imported G-Code in the
                                          "filament" & "MotorMove" components
                                          Change the Z scale of the "filament" component according to the amount of
                                          extruded filament in the imported G-Code
                                          New in Exporter:
                                          Export to the G-Code the Attribute of speed as was imported by the importer.
                                          Export the Extruded length according to the Z scale of the "filament" component

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

                                          Advertisement