sketchucation logo sketchucation
    • 登入
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🔌 Smart Spline | Fluid way to handle splines for furniture design and complex structures. Download

    Simple Extension for Mac

    已排程 已置頂 已鎖定 已移動 Developers' Forum
    25 貼文 6 Posters 1.7k 瀏覽 6 Watching
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • Al HartA 離線
      Al Hart
      最後由 編輯

      @slbaumgartner said:

      It would require a significant rewrite to get this over to the Mac; no doubt feasible, but way out of my depth!

      Steve

      Exactly what I am looking for - a Mac expert, or at least someone who is more familiar with Mac than I, who has done this already for SimpleExtension, or has created a C-code to SketchUp ruby interface which does something similar, or who can easily figure out how to write a Ruby Extension, based on SketchUp's Simple Extension, and could share it with us.

      Al Hart

      http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
      IRender nXt from Render Plus

      1 條回覆 最後回覆 回覆 引用 0
      • D 離線
        driven
        最後由 編輯

        @TT

        and all, I finally got around to installing your example, and have a few notes for others...

        === Compile Instructions ===
        
        type/copy-paste or drag and drop items between ][ ][
        
        1. Open a Terminal.app window 
        2. cd into the project folder and enter
          ] cd  [drag folder into terminal] [ >> return
        3. Execute "ruby extconf.rb"  using full path by dragging
          ] ruby [drag file into terminal] [ >> return
        4. Execute "make"
          ] make -f Makefile [ >> return
        5. Move to "User" Plugins  using the proper folder for v2013   
          ] mv -f SX_HelloWorld.bundle /Users/johns_iMac/Library/Application\ Support/SketchUp\ 2013/SketchUp/Plugins [ >> return 
        6. Open SU
          ] open /Applications/SketchUp\ 2013/SketchUp.app [ >> return 
        7. Open "Ruby Console" and enter
          ] require (Sketchup.find_support_file("Plugins/SX_HelloWorld.bundle")).to_s' [ >> return
        8. Test 
          ] SUExtTest.knock_knock [ >> return
        
        success = Hello SketchUp World! 
        
        NB; in extconf.rb match your environment [ $CFLAGS = '-arch x86_64 -arch i386 -O3 -pipe'] works for me
        

        @Al
        I'll have a look at yours and see if I can make any sense of it... no promises,

        john

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

        1 條回覆 最後回覆 回覆 引用 0
        • thomthomT 離線
          thomthom
          最後由 編輯

          Had a look at it myself. Looks like a Ruby C Extension wrapped in C++ with extra stuff I expect if for the exporter.

          Al: The Ruby C Extension sample I linked to is a bare bone example of connecting Ruby and C. Now, it is possible to write these extensions in C++, I've seen examples - they had to extern the C++ functions as C type functions.

          That SimpleExtension sample didn't seem that simple to me, certainly more than the minimum of what is needed. Look at how people in the Ruby community is developing Ruby C Extensions with C++ and you will find simpler examples.

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

          1 條回覆 最後回覆 回覆 引用 0
          • thomthomT 離線
            thomthom
            最後由 編輯

            StackOverflow got several threads on it:
            http://stackoverflow.com/questions/10167149/compiling-ruby-c-extension
            http://stackoverflow.com/a/2060716/486990

            Noel Warren have used Rice:
            http://rice.rubyforge.org/

            And just found this which was interesting in regard to raising exceptions:
            http://old.thoughtsincomputation.com/posts/ruby-c-extensions-c-and-weird-crashing-on-rb_raise

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

            1 條回覆 最後回覆 回覆 引用 0
            • O 離線
              olilej
              最後由 編輯

              I looked over that SimpleExtension example, it seems very promising.

              By the way, what exactly are the real benefit of using Ruby C Extension ? Does this have to do with performance ? As in SketchUp 2013, C++ SDK doesn't allow model interaction, it would be very interesting if we could improve the plugins efficiency with that possibility.

              Olivier

              1 條回覆 最後回覆 回覆 引用 0
              • thomthomT 離線
                thomthom
                最後由 編輯

                I use C Extensions when I need to do many calculations. Vertex Tools became 200+ times faster in calculating the soft selection when I ported the code to C Extension.

                Just calling Ruby functions won't be faster. You'd have to be doing calculations and other processing for it to be faster.

                It's not just performance though, you might want to spawn off other processes. Use C libraries.

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

                1 條回覆 最後回覆 回覆 引用 0
                • Al HartA 離線
                  Al Hart
                  最後由 編輯

                  We had about the same experience as ThomThom.

                  Calling ruby functions from C-code was slower than calling them from ruby directly in SketchUp.

                  e.g. The C-code replacement for:

                  value = model.get_attribute “dictionaryname”, key, defaultvalue)
                  

                  can be done directly, (actually rather indirectly), from C-code, but the execution time is slower than in SketchUp ruby.

                  But other things, such as maintaining a table for vertices, and then doing special processing for vertices was faster.

                  Also, we were able to use Windows dialogs, functions in other Windows DLLS, etc. and attach them to SketchUp.

                  Also, we were able to use all the Ruby stuff from C++ because ruby\1.8\i386-mswin32\ruby.h, (part of the ruby code), includes

                  #if defined(__cplusplus)
                  extern "C" {
                  #endif
                  

                  Back to the original question.

                  Has anyone interfaced to C routines from the Mac, and if so could you share a sample of some sort to get us started...

                  Al Hart

                  http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
                  IRender nXt from Render Plus

                  1 條回覆 最後回覆 回覆 引用 0
                  • thomthomT 離線
                    thomthom
                    最後由 編輯

                    @al hart said:

                    Has anyone interfaced to C routines from the Mac, and if so could you share a sample of some sort to get us started...

                    404 — Bitbucket

                    favicon

                    (bitbucket.org)

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

                    1 條回覆 最後回覆 回覆 引用 0
                    • Al HartA 離線
                      Al Hart
                      最後由 編輯

                      @thomthom said:

                      404 — Bitbucket

                      favicon

                      (bitbucket.org)

                      Thanks, ThomThom, that looks like what I am looking for.

                      I see you had posted it before, but I didn't know what it was at the time.

                      Al Hart

                      http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
                      IRender nXt from Render Plus

                      1 條回覆 最後回覆 回覆 引用 0
                      • thomthomT 離線
                        thomthom
                        最後由 編輯

                        Mind you, I recently found http://rubyinstaller.org/downloads/ which I think is a better choice for Windows than the Visual Studio solution I'd used.

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

                        1 條回覆 最後回覆 回覆 引用 0
                        • O 離線
                          olilej
                          最後由 編輯

                          I've been playing around with C Extension recently and I would like to know how if there is an equivalent of is_a? ruby function in C level.

                          I found rb_obj_is_instance_of but it seems to be only meant for native ruby types.

                          1 條回覆 最後回覆 回覆 引用 0
                          • Al HartA 離線
                            Al Hart
                            最後由 編輯

                            [Ignore this for a minute - I need to add a second parameter for what the value to pass to is_a?]

                            You can execute the equivalent of any ruby function using rb_intern() and rb_funcall()

                            Try this:

                            
                            VALUE fid = rb_intern("is_a?");
                            VALUE vret = rb_funcall(klass, fid, 0);
                            
                            

                            Al Hart

                            http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
                            IRender nXt from Render Plus

                            1 條回覆 最後回覆 回覆 引用 0
                            • Al HartA 離線
                              Al Hart
                              最後由 編輯

                              Here is a better example, equivalent to

                              Sketchup.is_a?(Module)

                              
                              
                              VALUE Sketchup = rb_path2class("Sketchup");
                              VALUE Module= rb_intern("Module");
                              VALUE is_a = rb_intern("is_a?");
                              VALUE result = rb_funcall(Sketchup, is_a, Module, 0);
                              
                              
                              

                              Al Hart

                              http:wiki.renderplus.comimageseefRender_plus_colored30x30%29.PNG
                              IRender nXt from Render Plus

                              1 條回覆 最後回覆 回覆 引用 0
                              • Dan RathbunD 離線
                                Dan Rathbun
                                最後由 編輯

                                @olilej said:

                                I've been playing around with C Extension recently and I would like to know how if there is an equivalent of is_a? ruby function in C level.

                                If you have the CHM... you can click on the method description, and the C source will popup:
                                (Also works for online version, but the source link must be clicked directly, and is only visible when the mouse is hovering over the method description.)

                                Object_kind_of.png

                                💭

                                I'm not here much anymore.

                                1 條回覆 最後回覆 回覆 引用 0
                                • Dan RathbunD 離線
                                  Dan Rathbun
                                  最後由 編輯

                                  So it looks like there are some macros defined in C, to make life easier ... CLASS_OF(), RCLASS_SUPER(), etc.

                                  I'm not here much anymore.

                                  1 條回覆 最後回覆 回覆 引用 0
                                  • Dan RathbunD 離線
                                    Dan Rathbun
                                    最後由 編輯

                                    • Pragmatic Programmer: Extending Ruby 1.9

                                    I'm not here much anymore.

                                    1 條回覆 最後回覆 回覆 引用 0
                                    • O 離線
                                      olilej
                                      最後由 編輯

                                      Great, my goal is to make sure I'm dealing with a Entity in order to access its attributes.

                                      Here is the code I've come up with.

                                      VALUE result = rb_obj_is_kind_of(obj, rb_path2class("Sketchup;;Entity"));
                                      if (Qtrue == result){
                                      	VALUE rval = rb_funcall(obj, rb_intern("get_attribute"), 2, rb_str_new2("dynamic_attributes"), rb_str_new2("..."));
                                      	...
                                      }
                                      
                                      1 條回覆 最後回覆 回覆 引用 0
                                      • Dan RathbunD 離線
                                        Dan Rathbun
                                        最後由 編輯

                                        Only Sketchup::ComponentDefinition and Sketchup::ComponentInstance will have dictionaries with that special name.

                                        I'm not here much anymore.

                                        1 條回覆 最後回覆 回覆 引用 0
                                        • 1
                                        • 2
                                        • 2 / 2
                                        • 第一個貼文
                                          最後的貼文
                                        Buy SketchPlus
                                        Buy SUbD
                                        Buy WrapR
                                        Buy eBook
                                        Buy Modelur
                                        Buy Vertex Tools
                                        Buy SketchCuisine
                                        Buy FormFonts

                                        Advertisement