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!
    ⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update

    [Code] ComponentInstance-add_entities v1.9

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

      This script [ComponentInstance-add_entities.rb] adds an additional method .add_entities to the ComponentInstance class. The given 'entities' (either as a selection or an array) are added to the instance's definition in the same transformation, relationship etc as the originals.
      There are two optional arguments - to 'copy' the entities rather than move them and to make the specific instance 'unique' or globally change the definition.

      component_instance(entities,copy,unique)
      

      The two arguments default to 'false' if not given: to set them make them 'true'.
      Read the notes at the start of the script. Call it from other scripts. Trying to add an instance into itself or adding an instance's definition recursively could BugSplat - this is trapped by making copies and/or making_unique any instances so added... For Windows users an additional toggleWindows.zip file contains the two files needed in the Plugins folder to give a utility to rollup an open Outliner window during this operation - this will avoid BugSplats [it's based on Jim's code]. If you don't want to install this addition or if you have a Mac then the 'add_entities' method will still work BUT please ensure that the Outliner is not open when using it - it is a known problem in the API itself...
      [EDIT: v1.1 new files added 20090401]
      [EDIT: v1.2 unneeded file removed, 'defn.delete' now built-in 20090402]
      [EDIT: v1.3 unneeded 'require ...' removed 20090408]
      [EDIT: v1.4 needed 'group.definition' added direct into file 20090410]
      [EDIT: v1.5 'group.definition' empty group error fixed 20090515]
      [EDIT: v1.6 definition.behavior(s) fully copied across 20090702]
      [EDIT: v1.7 definition attribute dictionaries copied across 20090819]
      [EDIT: v1.8 error will attrdicts==nil fixed 20090821]
      [EDIT: v1.9 Attribute Dictionaries copied for Instance 20090825]
      .ComponentInstance-add_entities.rb


      toggleWindows.rb

      TIG

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

        👍 👍

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

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

          Is there a way to know if the Outliner is open? If so, can't you use Sketchup.send_action 21513 to toggle the Outliner off and have it work on both platform?

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

          1 條回覆 最後回覆 回覆 引用 0
          • TIGT 離線
            TIG Moderator
            最後由 編輯

            @thomthom said:

            Is there a way to know if the Outliner is open? If so, can't you use Sketchup.send_action 21513 to toggle the Outliner off and have it work on both platform?

            It would be good if it were cross-platform BUT the "send_action 'number'" only works on a PC...
            If someone has a Mac fix please let me know...
            The toggleWindows script lets you 'rollup' any open window by name on a PC...

            TIG

            1 條回覆 最後回覆 回覆 引用 0
            • TIGT 離線
              TIG Moderator
              最後由 編輯

              Version 1.1
              It can sometimes BugSplat if the Outliner window is open when it runs...
              so it can now be forced to rollup first - using Jim's code ideas - you'll need
              'toggleWindows.rb' and 'Win32API.so' - sorry it's for Windows only - Mac users ???
              If you are on a PC and don't install toggleWindows.rb/Win32API.so then it'll still work
              BUT please close the Outliner to avoid BugSplats !

              Version 1.1 20090401
              AT-ComponentDefinition-delete.rb version used.
              Recursive version now keeps layer/material.
              Possible Outliner window rollup added.

              You should download the following files:
              ComponentInstance-add_entities.rb
              AT-ComponentDefinition-delete.rb [ http://www.sketchucation.com/forums/scf/viewtopic.php?p=145255#p145255 ]
              for PC users the zip file contains 'toggleWindows.rb' and 'Win32API.so'...

              They are added to the first page in this thread...[ http://www.sketchucation.com/forums/scf/viewtopic.php?p=145009#p145009 ]

              TIG

              1 條回覆 最後回覆 回覆 引用 0
              • TIGT 離線
                TIG Moderator
                最後由 編輯

                Version 1.2 is here [ http://www.sketchucation.com/forums/scf/viewtopic.php?p=145009#p145009 ]
                It now has the 'definition.delete' code built-in as that is now greatly simplified thanks to AlexM's insights...
                I'm awaiting Scott's feedback on cross-platform Sketchup.send_action(21513) etc - I don't think they are Mac friendly... However if they are we can make the v1.1 Outliner crash work-around for PC and Mac...

                .

                TIG

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

                  Does Mac also have the issue with the open Outliner? It's not specific to the way Windows redraws stuff?

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

                  1 條回覆 最後回覆 回覆 引用 0
                  • TIGT 離線
                    TIG Moderator
                    最後由 編輯

                    @thomthom said:

                    Does Mac also have the issue with the open Outliner? It's not specific to the way Windows redraws stuff?

                    Don't know - are there any Mac users out there getting BugSplats with the Outliner being open during script runs that affect groups/instances ???
                    Any Mac users doing 'send_action' - please try to open/close the Outliner and try Sketchup.send_action(21513) etc and report back...
                    It would be good to have extended common 'send_actions' for both PC and Mac - I know that some 'numerical' ones don't work on Mac...

                    TIG

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

                      I have an old Mac Mini at home I can test the send_actions on.
                      Not sure if it's reliable to test the Outliner issue due to it's age and lack of power...

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

                      1 條回覆 最後回覆 回覆 引用 0
                      • TIGT 離線
                        TIG Moderator
                        最後由 編輯

                        @thomthom said:

                        I have an old Mac Mini at home I can test the send_actions on.
                        Not sure if it's reliable to test the Outliner issue due to it's age and lack of power...

                        Thanks - Scott's taking his time coming back... I suspect it's not going to be straight forward...

                        TIG

                        1 條回覆 最後回覆 回覆 引用 0
                        • M 離線
                          Matt666
                          最後由 編輯

                          I reported this Mac bug here... I hope outliner test will be positive...

                          Frenglish at its best !
                          My scripts

                          1 條回覆 最後回覆 回覆 引用 0
                          • TIGT 離線
                            TIG Moderator
                            最後由 編輯

                            v1.3 is here http://www.sketchucation.com/forums/scf/viewtopic.php?p=145009#p145009
                            IT has an unneeded initial 'require ...' removed: otherwise it's unchanged...

                            TIG

                            1 條回覆 最後回覆 回覆 引用 0
                            • M 離線
                              Matt666
                              最後由 編輯

                              Hi TIG.
                              I start to play with your cool function!
                              Just one bug for the moment, line 139. group.definition, and no definition function for groups.
                              I think you didn't copy the function in the script... 😉

                              class Sketchup;;Group
                              	def definition
                              		return self.entities[0].parent
                              	end
                              end	
                              

                              Frenglish at its best !
                              My scripts

                              1 條回覆 最後回覆 回覆 引用 0
                              • TIGT 離線
                                TIG Moderator
                                最後由 編輯

                                Matt = thanks for pointing this out - I had 'group.definition' load from a separate ruby - that I hadn't posted...
                                I've now added it to this file for the avoidance of doubt...

                                v1.4 now here: http://www.sketchucation.com/forums/scf/viewtopic.php?p=145009#p145009

                                Being able to get a group's definition is very useful in many other cases...

                                TIG

                                1 條回覆 最後回覆 回覆 引用 0
                                • H 離線
                                  HPW
                                  最後由 編輯

                                  So now we have this great addition to the toolset, what is the best way of delivery?
                                  The file gets copied into the Plugins-Directory.

                                  What should our own installer should do?
                                  Check the existence of the file and install it if not present?
                                  Check date and install it if a newer version is available?

                                  Can the ruby-code check if the method is installed?
                                  If not use a copy installed in the own subfolder?

                                  1 條回覆 最後回覆 回覆 引用 0
                                  • TIGT 離線
                                    TIG Moderator
                                    最後由 編輯

                                    @unknownuser said:

                                    The file gets copied into the Plugins-Directory.
                                    Your own installer should check the existence of the file and install it if not present, BUT also check any existing file's modification-date and install if you have a newer version.

                                    Yes to all, this is the best way for all plugins...

                                    TIG

                                    1 條回覆 最後回覆 回覆 引用 0
                                    • A 離線
                                      AlexMozg
                                      最後由 編輯

                                      Method 'group.definition'....
                                      More correct would be the code:

                                      
                                      class Sketchup;;Group
                                         def definition
                                            self.entities.parent
                                         end
                                      end
                                      
                                      

                                      Because, when group is empty
                                      there is an error at the use of code: self.entities[0.parent]
                                      The group may be empty soon after its inception.
                                      For example:

                                      group = Sketchup.active_model.active_entities.add_group
                                      definition = group.definition
                                      

                                      Request to replace a code on more correct, because I use this method in the developments.
                                      ❗

                                      1 條回覆 最後回覆 回覆 引用 0
                                      • TIGT 離線
                                        TIG Moderator
                                        最後由 編輯

                                        Following AlexM's point I have adjusted to code to avoid empty group errors...
                                        v1.5 is now here... http://www.sketchucation.com/forums/scf/viewtopic.php?p=145009#p145009

                                        TIG

                                        1 條回覆 最後回覆 回覆 引用 0
                                        • TIGT 離線
                                          TIG Moderator
                                          最後由 編輯

                                          An oversight has been corrected...

                                          v1.6 all definition.behavior(s) now fully copied across. 20090702 download it from... http://forums.sketchucation.com/viewtopic.php?p=145009#p145009

                                          TIG

                                          1 條回覆 最後回覆 回覆 引用 0
                                          • H 離線
                                            HPW
                                            最後由 編輯

                                            I run into a problem when I use add_entities from a startup-ruby.
                                            The code line:

                                            @kombi_group_sel_def.instances[0].add_entities(@kombi_group_list)
                                            
                                            

                                            throws an error : undefined method `parent' for nil:NilClass

                                            My ruby (zAutostart.rb) loads after the ComponentInstance-add_entities.rb

                                            When I disable the call in my ruby and start the command from the console it runs without problems.

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

                                            Advertisement