[Plugin] Material Renamer
-
Does this plugin work on a Mac?
-
It should... try it...
-
@thomthom said:
Undo-able in one step:
Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "mat#{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation
This lines works fine in the ruby console. But the plugin script not.
I loved!!! -
I have a large collection of materials. Many of these are repeated,
and the names are all messed up.
I wish I could organize my these materials, permanently.
It would be possible to create a function that creates a number X of planes or squares,
according to the amount of material in the scene, and apply each material
in each box? Or just put a material in each plan? Create plans
is very simple.
After we can use the plugin "Material consolidator" to eliminate repeated. -
@bagatelo said:
I have a large collection of materials. Many of these are repeated,
and the names are all messed up.
I wish I could organize my these materials, permanently.
It would be possible to create a function that creates a number X of planes or squares,
according to the amount of material in the scene, and apply each material
in each box? Or just put a material in each plan? Create plans
is very simple.
After we can use the plugin "Material consolidator" to eliminate repeated.CleanUp can merge material with identical properties.
-
@thomthom said:
CleanUp can merge material with identical properties.
But it works only in applied geometry or can works in the material editor also?
-
-
It would be possible that the name of the material received something from RGB code and the level of opacity?
-
@thomthom said:
Undo-able in one step:
Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "mat#{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation
Could you make a window that allowed us to enter the base name and the number of digits materials renamed?
-
@bagatelo said:
@thomthom said:
Undo-able in one step:
Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "mat#{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation
Could you make a window that allowed us to enter the base name and the number of digits materials renamed?
Just editmat#{'%03d' % i}
>>>"mat001"
to be saymy_mat#{'%06d' % i}
>>>"my_mat000001"
-
@tig said:
@bagatelo said:
@thomthom said:
Undo-able in one step:
Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "mat#{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation
Could you make a window that allowed us to enter the base name and the number of digits materials renamed?
Just editmat#{'%03d' % i}
>>>"mat001"
to be saymy_mat#{'%06d' % i}
>>>"my_mat000001"
I had seen it, just wanted to not have to edit these items. But that's okay.
It would be possible to get the base name for the materials from file skp name automatically? -
If you want to rename all of the materials by their RGBA then it's doable, just more awkward in a one-liner...
mo=Sketchup.active_model;mo.start_operation('Rename Materials',true);ms=[];mo.materials.each_with_index{|m,i|n=m.color.red.to_s+'-'+m.color.green.to_s+'-'+m.color.blue.to_s+'-'+m.alpha.to_s;n=n+'#1' if ms.include?(n);(n.next!)while(ms.include?(n));ms<<n;m.name=n;p n};mo.commit_operation
So you'll get "123-45-67-0.8". If two materials share exactly the same RGBA the second material will get a '#1' suffix to keep them uniquely named. -
@unknownuser said:
...it would be possible to get the base name for the materials from file skp name automatically?
Yes, where the earlier code says
m.name = "mat#{'%03d' % i}"
change it to read
m.name = "#{Sketchup.active_model.title}#{'%03d' % i}"
-
@tig said:
@unknownuser said:
...it would be possible to get the base name for the materials from file skp name automatically?
Yes, where the earlier code says
m.name = "mat#{'%03d' % i}"
change it to read
m.name = "#{Sketchup.active_model.title}#{'%03d' % i}"
GREAT!!! Thanks...
Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "#{Sketchup.active_model.title}#{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation
-
Not sure this has been brought up in this thread or in another, but I am looking for a way to organize my materials within each project. It would be so great to be able to organize them into folders or some sort of system that lets me group items together... I have a ton of materials in the project i am currently working on and have been trying to keep track of them by renaming them etc... but it becomes very daunting to look through them all. For example I downloaded a sketchup 3d file of books for my bookshelves in a family room I am designing... obviously I don't want to re paint all the books with colors in my model... and when I add the component into my model it also brings in all the new generic colors that further clutter up my materials library. It would be so great to create a folder or file system to group all the colors that are in the books together so that I don't get them mixed up with my other materials... needless to say it is a hot mess in my materials library. Please tell me someone has created a cool plugin for this or has a solution for me : ) Or am I missing something very obvious???
-
@unknownuser said:
and when I add the component into my model it also brings in all the new generic colors that further clutter up my materials library..
I hate to ask. You do do know you can purge unused materials ?
In case not. In the Materialpalette, click the house to get to modelmaterials.
The icons furthest to the right(blueish) click and choose purge unused.Otherwise there is maybe this:
http://sketchucation.com/forums/viewtopic.php?t=17587
or this ?
http://sketchucation.com/forums/viewtopic.php?t=48933
Take care.
-
@jolran said:
@unknownuser said:
and when I add the component into my model it also brings in all the new generic colors that further clutter up my materials library..
I hate to ask. You do do know you can purge unused materials ?
In case not. In the Materialpalette, click the house to get to modelmaterials.
The icons furthest to the right(blueish) click and choose purge unused.Otherwise there is maybe this:
http://sketchucation.com/forums/viewtopic.php?t=17587
or this ?
http://sketchucation.com/forums/viewtopic.php?t=48933
Take care.
Thanks, i will look those up. I do know about purge un-used (but I did just learn about it the other day so you are not so far off )Thanks! I will look up the two topics and see if there is something there that works for me... I was looking at the open or create a collection section... and was going to explore how that might work for what I am trying to do...
-
@bagatelo said:
@tig said:
@unknownuser said:
...it would be possible to get the base name for the materials from file skp name automatically?
Yes, where the earlier code says
m.name = "mat#{'%03d' % i}"
change it to read
m.name = "#{Sketchup.active_model.title}#{'%03d' % i}"
GREAT!!! Thanks...
Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "#{Sketchup.active_model.title}#{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation
I want to add a shurtcut for this function. Can you make a plugin for me, please?
-
def matrename Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "- #{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation end if( not file_loaded? "TT_materials_renamer.rb" ) UI.menu("View").add_item("Materials Rename") { matrename.new } file_loaded("TT_materials_renamer.rb") end
-
@cadfather said:
> def matrename > > Sketchup.active_model.start_operation('Rename Materials',true); Sketchup.active_model.materials.each_with_index { |m,i| m.name = "- #{'%03d' % i}"; p m.name };Sketchup.active_model.commit_operation > end > > if( not file_loaded? "TT_materials_renamer.rb" ) > UI.menu("View").add_item("Materials Rename") { matrename.new } > file_loaded("TT_materials_renamer.rb") > end
Great! Thanks!
One thing that would be really interesting would be that this script index materials application in areas with higher per square meter first. Thus, a material that was on all the walls would be in first place. A material that was in small areas (a decorative object for example) would be the end of the numbering.
Advertisement