• Login
sketchucation logo sketchucation
  • Login
ℹ️ GoFundMe | Our friend Gus Robatto needs some help in a challenging time Learn More

Find and replace multiple components?

Scheduled Pinned Locked Moved Newbie Forum
sketchup
30 Posts 9 Posters 12.1k Views
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.
  • T Offline
    tenquin
    last edited by 11 Sept 2017, 19:46

    Olá TIG!
    Boa tarde!
    Obrigado pelo retorno.

    Desculpe se não soube me expressar corretamente, na verdade preciso que o plugin troque todos os componentes que tem um parâmetro específico, no caso o parâmetro "modeloptions=portas inferiores"

    Desde já agradeço.


    Esses seriam os parâmetros de exemplo


    Essa seria o componente a ser trocado, sendo que teria que manter as dimensões lenx, leny, lenz e posições x,y,z....


    Essas seriam as portas de troca e estariam em uma biblioteca...

    1 Reply Last reply Reply Quote 0
    • T Offline
      TIG Moderator
      last edited by 11 Sept 2017, 20:15

      @tenquin

      Yes, that's nothing like it !

      You could try editing the code...

      
      ###....
      dcs.each{|d|
        next unless d.get_attribute("dynamic_attributes", "modeloptions", "") == "portas inferiores"
        # this skips if it's not that type of dc ???
        p d.name # to see their names listed in the Ruby Console
        d.instances.each{|i| i.definition = defn }
        # replace with original
      }
      ###...
      
      

      TIG

      1 Reply Last reply Reply Quote 0
      • T Offline
        tenquin
        last edited by 11 Sept 2017, 23:55

        Obrigado mais uma vez TIG!

        Vou estudar mais um pouco e tentar fazer,
        sou novo em programação mas vou tentar até conseguir. rsrs

        👍

        1 Reply Last reply Reply Quote 0
        • T Offline
          tenquin
          last edited by 28 Dec 2017, 21:06

          @tig said:

          OK

          Let's consider this...
          The original component is named [let's say] "DC" - so its unique-ified siblings are named DC#1, DC#2 etc...
          So we can search the model's definitions for matching 'patterns' and replace their instances...
          The naming has to be logical, and all instances the same...

          
          > model=Sketchup.active_model
          > defns=model.definitions
          > name="DC" # perhaps you'd use an inputbox to get this 'name' ?
          > defn=defns[name]
          > dcs=defns.find_all{|d| d.name =~ /^#{name}#/ }
          > # note how 'name' starts the match-pattern and has a following #
          > model.start_operation("Un-unique #{name}", true) # one-step undo
          > puts "Un-unique #{name}"
          > dcs.each{|d|
          >   p d.name # to see their names listed in the Ruby Console
          >   d.instances.each{|i| i.definition = defn }
          >   # replace with original
          > }
          > model.commit_operation
          > puts "Done"
          > 
          

          This works within nested components etc...
          You could check that the geometry/size etc of the instance of the original defn matches the instance of the to-be-un-uniqued definition, but that requires more convoluted code...

          Olá TIG

          Desculpe minha insistência.
          Há alguns meses conversamos sobre o código acima, que faz um script que substitui componentes.
          Ainda não consegui fazer com que funcionasse, criei um componente com nome DC e copiei e colei o código no console Sketchup,mas não obtive resultado.
          Estou me dedicando a Ruby, mas mesmo depois de ler o livro Automatic Skechup, não consegui identificar o que está errado...

          1 Reply Last reply Reply Quote 0
          • T Offline
            TIG Moderator
            last edited by 29 Dec 2017, 19:05

            What results do you get ?
            The Ruby Console will show errors and output.

            You are looking for a component definition name, NOT a component instance name.
            They are different things.
            The component's name is displayed in the Components Browser.
            Instances can have different names from their definition - this shown in Entity info - if it's selected...

            TIG

            1 Reply Last reply Reply Quote 0
            • T Offline
              tenquin
              last edited by 29 Dec 2017, 20:43

              @TIG

              Obrigado mais uma vez por responder.
              Não retorna nenhum erro, porém nenhum resultado também. Segue uma imagem.

              Script.JPG

              Minha intenção é buscar os componentes por atributos dinâmicos ao invés de por nome, se poder me dá uma luz de como ficaria o código assim eu agradeço, se não, depois tentarei editar o código para se adequar ao que desejo.

              1 Reply Last reply Reply Quote 0
              • T Offline
                TIG Moderator
                last edited by 30 Dec 2017, 18:30

                What else do you expect ?
                You have 1 component definition named 'DC'.
                If you had more using that name pattern - e.g. 'DC#1', DC#2' etc.
                Then DC would prevail !

                The code is working just fine - but your model has got nothing in it to be processed !

                TIG

                1 Reply Last reply Reply Quote 0
                • T Offline
                  tenquin
                  last edited by 30 Dec 2017, 18:37

                  Perdão TIG.
                  Você tem razão, eu não estava sabendo usar o código corretamente.
                  Agora me parece que está funcionando.
                  Obrigado

                  1 Reply Last reply Reply Quote 0
                  • K Offline
                    kostiaarh
                    last edited by 14 Sept 2019, 17:36

                    @tig said:

                    IF you name your components logically then a script in the form swapcomponents("-aaa","-bbb") is straightforward - and quite simple - I can talk you through it... Once you have something working vis the Ruby Console it#s easy enough to add a menu item and dialog, even a toolbar and so on...

                    First off - make a logical component-naming strategy/
                    Then write is a simple step-sheet explaining how you'd like to use the new tool... e.g.

                    I select various cabinets where I want to swap one type of door [and drawer] for another.
                    I activate the new tool tell it what code to find and what code to replace it with... and it automatically finds equivalent doors [and drawers] in the model [or perhaps SKPs in folder[s]] in ../Components/.
                    It then uses/loads them and replaces the current component instance with the required definition.
                    A dialog reports what's been changed and/or any errors.
                    It is one step undo-able.
                    For example always name doors 'Door-WWW-HHH-FINISH-CODE' and then all we have to do is swap components with the same base but a new FINISH and/or CODE - In the input you could type Door*-Oak-A and in the output type Door*-Maple-A and all doors code A would change from 'Oak' to 'Maple'; or Door*-A >>> Door*-B would swap from code A to code B - if there were no Oak versions of code B doors then the closing dialog tells you!
                    On a more global system *-A >>> *-B tries to swap all type A 'fitments' to type B.
                    If things are 'nested' - components inside groups etc then it's more tricky but not impossible...
                    You could also swap ironmongery from Handle-*-A >>> Handle-*-B.
                    See the schema ?

                    TIG can I ask you to post an example of this code here? Thanks.

                    1 Reply Last reply Reply Quote 0
                    • T Offline
                      TIG Moderator
                      last edited by 14 Sept 2019, 20:04

                      You quoted my example of a step sheet...

                      Please outline exactly what you want to do - what to find by a pattern-match and how to rename them etc...

                      This thread have been around for a decade !
                      So what you want to do needs to be specified very precisely...

                      TIG

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

                      Advertisement