Find and replace multiple components?
-
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.
-
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 } ###...
-
Obrigado mais uma vez TIG!
Vou estudar mais um pouco e tentar fazer,
sou novo em programação mas vou tentar até conseguir. rsrs -
@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... -
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... -
Obrigado mais uma vez por responder.
Não retorna nenhum erro, porém nenhum resultado também. Segue uma imagem.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.
-
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 !
-
Perdão TIG.
Você tem razão, eu não estava sabendo usar o código corretamente.
Agora me parece que está funcionando.
Obrigado -
@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 typeDoor*-Oak-A
and in the output typeDoor*-Maple-A
and all doors code A would change from 'Oak' to 'Maple'; orDoor*-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 fromHandle-*-A
>>>Handle-*-B
.
See the schema ?TIG can I ask you to post an example of this code here? Thanks.
-
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...
Advertisement