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

    [Tutorial] SketchUp Ruby C Extension

    Scheduled Pinned Locked Moved Developers' Forum
    176 Posts 16 Posters 25.9k Views 16 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.
    • thomthomT Offline
      thomthom
      last edited by

      Current WIP
      https://bitbucket.org/thomthom/sketchup-ruby-c-extension

      Working OSX and Windows "Hello World" example.


      This question comes up from time to time, how to compile a Ruby C Extension that works for SketchUp.

      Following tutorials for standard Ruby will not work for SketchUp without modifications. It would be nice if we could properly document this.

      For OSX I think I have all the info, thanks to AdamB that explained that it needed to be compiled into a flat namespace: http://forums.sketchucation.com/viewtopic.php?f=180&t=28673&start=0#p249370
      However, would be nice if anyone knew how to generate a make file with the correct flags so one does not have to edit it manually every time - like I do... πŸ˜• 😳 )

      For Windows it's even more to be done. TBD helped me out here with his Pelles C project. However, I was unable to create and set up a project for compilation myself and I have no idea what is needed to make it compile correctly. I'd like to learn this.

      One thing is that the C Extension under windows requires you to install a standard ruby installation and modify config.h to bypass a MSC check. (Or does anyone have a solution that doesn't require this?)

      I see Dana is using a make file that seem to be used on both platforms: https://github.com/danawoodman/google-sketchup-file-downloader/blob/master/src/CMakeLists.txt

      However, that project doesn't work in SketchUp yet.

      So, the short story is, can we (the devs here) put together a step by step tutorial on how to compile a SketchUp Ruby C Extension for OSX and Windows?
      (I can write it up, but I need someone to provide with the technical and explains how and why.)

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

      1 Reply Last reply Reply Quote 0
      • tbdT Offline
        tbd
        last edited by

        can you fork https://github.com/TBD/OpenSUP/tree/master/SUExt and send a pull request for the OSX version ?

        will try to make a step by step page for compiling on PellesC (I will not install VStudio on virtual machine πŸ˜‰

        SketchUp Ruby Consultant | Podium 1.x developer
        http://plugins.ro

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

          @unknownuser said:

          send a pull request for the OSX version ?

          There is an OSX version? I'm not sure what you mean about sending a pull request... 😳

          What would be nice is along with the tutorial we could set up the framework for making and compiling on both platforms with minimum mount of per-platform files. If possible?

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

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

            I clicked Fork when I was under SUExt - and it forked the whole repository. I guess there is no way to fork a part of a repository... ?

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

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

              Clicking "Pull Request" and I get a message:

              "Oops! The TBD:master branch is already up-to-date with thomthom:master β€” maybe you want to try something else?"

              ....I should stop clicking now... 😳

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

              1 Reply Last reply Reply Quote 0
              • tbdT Offline
                tbd
                last edited by

                fork - it creates a duplicate of the entire project in your account. you can change only in one subdirectory if you want.
                pull request - you make the changes in your forked project and send a pull request so I can integrate your changes

                you need to add some changes to send a pull request to me first.

                SketchUp Ruby Consultant | Podium 1.x developer
                http://plugins.ro

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

                  Right. Should I leave the other folders alone?

                  Just thinking it might be nice with a repo just for C Extension - nothing else. Just to keep it clean and simple. ❓

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

                  1 Reply Last reply Reply Quote 0
                  • tbdT Offline
                    tbd
                    last edited by

                    https://github.com/sketchucation is ready to accept projects πŸ˜‰

                    SketchUp Ruby Consultant | Podium 1.x developer
                    http://plugins.ro

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

                      @unknownuser said:

                      https://github.com/sketchucation is ready to accept projects πŸ˜‰

                      Right'o. So can we create an "SketchUp Ruby C Extension" project? Then start adding stuff.

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

                      1 Reply Last reply Reply Quote 0
                      • tbdT Offline
                        tbd
                        last edited by

                        pull requests away - https://github.com/sketchucation/suext πŸ˜‰

                        SketchUp Ruby Consultant | Podium 1.x developer
                        http://plugins.ro

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

                          I just got a very simple Hello World example working under OSX. Will create another example with some basic Ruby object interactions and expand a little on my comments. Then I will upload it to a repository. Think I'll focus on the step by step for OSX first to get the structure up. Then Windows - seem to be a bit more tweaking to get that working.

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

                          1 Reply Last reply Reply Quote 0
                          • Chris FullmerC Offline
                            Chris Fullmer
                            last edited by

                            This sounds great Thom and TBD and everyone one else who gets involved. I keep being afraid that I might need to learn some of this for my upcoming work.

                            Chris

                            Lately you've been tan, suspicious for the winter.
                            All my Plugins I've written

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

                              What you got cooking?

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

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

                                Right - attempting to build on Windows.

                                I have Visual C++ Express 201 installed and I'm trying to build using nmake. Getting some errors:
                                Build Error.png

                                I'm not sure what that means. Though I have a suspicion I need to specify the path to where windows.h is located... Though I don't know where to do so...

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

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

                                  Uploaded my WIP at: https://bitbucket.org/thomthom/sketchup-ruby-c-extension/

                                  Working on OSX 10.5.

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

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

                                    Note for self: http://blogs.law.harvard.edu/hoanga/2006/12/14/getting-a-ruby-c-extension-to-compile-on-windows/

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

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

                                      Think I got one step further. This thread mentions that vcvars32.bat needs to be run from the prompt: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/325b5459-c469-40d0-bf6d-e3356a2f14cd/

                                      And this (http://stackoverflow.com/questions/6622869/problem-with-nmake)

                                      So after I did that I got a different error. Missing crt file...


                                      Build Error 02.png

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

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

                                        ( Apologies for those with the know-how - I will be posting lots of silly stuff as I work through this. Posting to make a record of what I am doing. "Thinking out loud". )

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

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

                                          Got it working!

                                          Uncommented a #pragma comment(lib, "crt.lib"); I had. TBD's SUExt project had a reference to it. Which is what I based my project on. Seeing how it also referred to #pragma comment(lib, "msvcrt-ruby18.lib"); I just tried to see what happened if I removed the ref to crt.lib. Everything worked fine after that point.

                                          Now I wonder what the other lines do:

                                          #pragma comment(lib, "kernel32.lib") #pragma comment(lib, "gdi32.lib") #pragma comment(lib, "user32.lib") #pragma comment(lib, "shell32.lib")

                                          I'm looking at this tutorial: http://blogs.law.harvard.edu/hoanga/2006/12/14/getting-a-ruby-c-extension-to-compile-on-windows/
                                          It made no reference to any of this. ( what is it? Is it really required? )

                                          I'm guessing #include <windows.h> is required though.

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

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

                                            Now... I'd like to find a way to make any output from extconf.rb and make/nmake put everything is a separate directory - for each platform.

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

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

                                            Advertisement