sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Colored faces

    Scheduled Pinned Locked Moved Developers' Forum
    15 Posts 7 Posters 387 Views 7 Watching
    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.
    • TIGT Offline
      TIG Moderator
      last edited by

      The two sides of a face have to be treated independently

      face.material = a_material face.back_material = a_material ### or face.back_material = another_material

      As they do not have to be the same.
      Because you usually do not see the back-face inside 3d objects it's usual to leave it 'nil' == the default back-color...

      If a face is inside a group or component definition and it has no material*... then it displays using the group/instance.material ]if any] both *front and back.
      Note that this has not changed the face's material - only the way you see it.

      TIG

      1 Reply Last reply Reply Quote 0
      • pingpinkP Offline
        pingpink
        last edited by

        Thank you very much for your guiding ! It works !

        For Face color

        
        #***************************************************
        #                                    Glass
        #***************************************************
        
        def gl_green
        model=Sketchup.active_model
        ss=model.selection
        materials=model.materials
        
        
        faces=[]
        ss.each{|e|faces << e if e.class==Sketchup;;Face}
        
        
        faces.each{|face| face.material=Sketchup;;Color.new(0,250,154)}
        faces.each{|face| face.back_material=Sketchup;;Color.new(0,250,154)}
        faces.each{|face| face.material.alpha = 0.5}
        faces.each{|face| face.back_material.alpha = 0.5}
        end
        

        For Group color

        
        #***************************************************
        #                                    Aluminium
        #***************************************************
        
        def al_Light_Bronze
        model=Sketchup.active_model
        ss=model.selection
        materials=model.materials
        layers=model.layers
        #Now check what is in the selection... in this example we extract the groups
        groups=[]
        ss.each{|e|groups << e if e.class==Sketchup;;Group}
        #Now process the groups
        m = Sketchup.find_support_file "CW/Textures/Aluminium/AnodizedAluminium_Light-Bronze.jpg", "Plugins"
        groups.each{|group| group.material=material_add_texture("Light-Bronze", m, "*")}
        end
        
        1 Reply Last reply Reply Quote 0
        • Dan RathbunD Offline
          Dan Rathbun
          last edited by

          Change:

          faces=[]
          ss.each{|e|faces << e if e.class==Sketchup;;Face}
          
          

          To:

          faces = ss.grep(Sketchup;;Face)
          

          The grep method comes from the Enumerable library module, that is mixed into many collection classes.
          The grep method is faster than anyway you could write the same functionality in Ruby.


          Also you are repeating things in loops that only need be done ONCE.
          And using multiple loops when only ONE loop is needed.

          Change:

          faces.each{|face| face.material=Sketchup;;Color.new(0,250,154)}
          faces.each{|face| face.back_material=Sketchup;;Color.new(0,250,154)}
          faces.each{|face| face.material.alpha = 0.5}
          faces.each{|face| face.back_material.alpha = 0.5}
          
          

          To:

          matl = Sketchup;;Color.new(0,250,154)
          matl.alpha = 0.5
          
          faces.each{|face|
            face.back_material = face.material = matl
          }
          
          

          Last.. please use a 2 SPACE indent for code examples here.. TAB characters do not work well with bbCode boxes.

          πŸ’­

          I'm not here much anymore.

          1 Reply Last reply Reply Quote 0
          • icehuliI Offline
            icehuli
            last edited by

            little benchmark: windows 8, sketchup 2013 maker, cpu 4900mq

            code:

            require 'benchmark'
            mod = Sketchup.active_model # Open model
            ent = mod.entities # All entities in model
            sel = mod.selection # Current selection
            arr = ent.to_a
            print "sel;",sel.to_a.size,"  ==  ent;",ent.to_a.size
            puts "",arr
            
            Benchmark.bm(20) do |x|
              x.report("ent.greb")         { 100000.times { faces =  ent.grep(Sketchup;;Edge) } }
              x.report("ent.select,is_a?") { 100000.times { faces =  ent.select{|e| e.is_a?  Sketchup;;Edge } } }
              x.report("ent.select,class") { 100000.times { faces =  ent.select{|e| e.class==Sketchup;;Edge } } }
              x.report("ent.each,is_a?")   { 100000.times { faces=[];ent.each{|e|faces << e if e.is_a?  Sketchup;;Edge} } }
              x.report("ent.each,class")   { 100000.times { faces=[];ent.each{|e|faces << e if e.class==Sketchup;;Edge} } }
              
              x.report("sel.greb")         { 100000.times { faces =  sel.grep(Sketchup;;Edge) } }
              x.report("sel.select,is_a?") { 100000.times { faces =  sel.select{|e| e.is_a?  Sketchup;;Edge } } }
              x.report("sel.select,class") { 100000.times { faces =  sel.select{|e| e.class==Sketchup;;Edge } } }
              x.report("sel.each,is_a?")   { 100000.times { faces=[];sel.each{|e|faces << e if e.is_a?  Sketchup;;Edge} } }
              x.report("sel.each,class")   { 100000.times { faces=[];sel.each{|e|faces << e if e.class==Sketchup;;Edge} } }
              
              x.report("arr.greb")         { 100000.times { faces =  arr.grep(Sketchup;;Edge) } }
              x.report("arr.select,is_a?") { 100000.times { faces =  arr.select{|e| e.is_a?  Sketchup;;Edge } } }
              x.report("arr.select,class") { 100000.times { faces =  arr.select{|e| e.class==Sketchup;;Edge } } }
              x.report("arr.each,is_a?")   { 100000.times { faces=[];arr.each{|e|faces << e if e.is_a?  Sketchup;;Edge} } }
              x.report("arr.each,class")   { 100000.times { faces=[];arr.each{|e|faces << e if e.class==Sketchup;;Edge} } }
            end
            
            

            result:

            
                                      user     system      total        real
            ent.greb              0.672000   0.000000   0.672000 (  0.681000)
            ent.select,is_a?      1.329000   0.000000   1.329000 (  1.328000)
            ent.select,class      1.437000   0.000000   1.437000 (  1.445000)
            ent.each,is_a?        1.266000   0.000000   1.266000 (  1.264000)
            ent.each,class        1.390000   0.000000   1.390000 (  1.391000)
            
            sel.greb              0.657000   0.000000   0.657000 (  0.655000)
            sel.select,is_a?      1.343000   0.000000   1.343000 (  1.330000)
            sel.select,class      1.469000   0.000000   1.469000 (  1.452000)
            sel.each,is_a?        1.250000   0.000000   1.250000 (  1.260000)
            sel.each,class        1.375000   0.000000   1.375000 (  1.386000)
            
            arr.greb              0.391000   0.000000   0.391000 (  0.401000)
            arr.select,is_a?      0.735000   0.000000   0.735000 (  0.740000)
            arr.select,class      0.860000   0.000000   0.860000 (  0.873000)
            arr.each,is_a?        0.953000   0.000000   0.953000 (  0.960000)
            arr.each,class        1.078000   0.000000   1.078000 (  1.090000)
            
            

            data:

            sel;28  ==  ent;28
            #<Sketchup;;Edge;0x18cf0054> 
            #<Sketchup;;Edge;0x18cf0018>
            #<Sketchup;;Edge;0x18cf0090>
            #<Sketchup;;Edge;0x18ceffdc>
            #<Sketchup;;Face;0x18cf00cc>
            #<Sketchup;;Group;0x18ce5e4c>
            #<Sketchup;;Edge;0x18eacf64>
            #<Sketchup;;Edge;0x18eacfdc>
            #<Sketchup;;Edge;0x18eacf28>
            #<Sketchup;;Edge;0x18eacfa0>
            #<Sketchup;;Face;0x18ead018>
            #<Sketchup;;Edge;0x18bd1254>
            #<Sketchup;;Edge;0x18bd11dc>
            #<Sketchup;;Edge;0x18bd1218>
            #<Sketchup;;Edge;0x18bd11a0>
            #<Sketchup;;Face;0x18bd1290>
            #<Sketchup;;Edge;0x18bd0bb0>
            #<Sketchup;;Edge;0x18bd0b74>
            #<Sketchup;;Edge;0x18bd0b38>
            #<Sketchup;;Edge;0x18bd0afc>
            #<Sketchup;;Face;0x18bd0bec>
            #<Sketchup;;Edge;0x18bcefb8>
            #<Sketchup;;Edge;0x18bcee8c>
            #<Sketchup;;Edge;0x18bcef7c>
            #<Sketchup;;Edge;0x18bceec8>
            #<Sketchup;;Edge;0x18bcef40> 
            #<Sketchup;;Edge;0x18bcef04>
            #<Sketchup;;Face;0x18bceff4>
            
            1 Reply Last reply Reply Quote 0
            • pingpinkP Offline
              pingpink
              last edited by

              I changed a code from your suggestion , but faces change color without transparency.
              What happens ? πŸ˜’

              def gl_green
              
                  model=Sketchup.active_model
              
                  ss=model.selection
              
                  faces = ss.grep(Sketchup;;Face)
              
                  matl = Sketchup;;Color.new(0,250,154)
              
                  matl.alpha = 0.5
              
                  faces.each{|face|
                  face.back_material = face.material = matl
                  }
              
              end
              
              1 Reply Last reply Reply Quote 0
              • jolranJ Offline
                jolran
                last edited by

                try changing matl = Sketchup::Color.new(0,250,154) to (0,250,154, 100)

                and

                faces.each{|face|
                	  face.back_material = face.material = matl
                	  face.material.alpha = 0.5
                    }
                

                edit: Updated code for backface as you wanted. And the 4rth argument is actually not needed in th Color object..

                1 Reply Last reply Reply Quote 0
                • tt_suT Offline
                  tt_su
                  last edited by

                  @jolran said:

                  try changing matl = Sketchup::Color.new(0,250,154) to (0,250,154, 100)

                  and

                  faces.each{|face|
                  > 	  face.back_material = face.material = matl
                  > 	  face.material.alpha = 0.5
                  >     }
                  

                  edit: Updated code for backface as you wanted. And the 4rth argument is actually not needed in th Color object..

                  Setting alpha for face material inside the loop is not efficient. It'd be better set outside the loop.

                  1 Reply Last reply Reply Quote 0
                  • pingpinkP Offline
                    pingpink
                    last edited by

                    Thank you so much !!! Love You All' πŸ˜›

                    I changed as your suggestion , Jolran

                    It can change colors of glass now. I appreciate it !

                    There are many colors that I have to revise.

                    I will also change others as your example.

                    def gl_green
                    
                    	model=Sketchup.active_model
                    	ss=model.selection
                    
                    	faces = ss.grep(Sketchup;;Face)
                    
                    	matl = Sketchup;;Color.new(0,250,154)
                    
                        faces.each{|face|
                         face.back_material = face.material = matl
                         face.material.alpha = 0.5
                        }
                    end
                    

                    Result

                    1 Reply Last reply Reply Quote 0
                    • TIGT Offline
                      TIG Moderator
                      last edited by

                          def gl_green
                      
                              model=Sketchup.active_model
                      
                              ss=model.selection
                      
                              faces = ss.grep(Sketchup;;Face)
                      
                              matl = Sketchup;;Color.new(0,250,154)
                      
                              matl.alpha = 0.5
                      
                              faces.each{|face|
                              face.back_material = face.material = matl
                              }
                      
                          end
                      

                      No πŸ˜’ You are jumbling up 'material' and 'color'.
                      Make your material then give it a color, alpha etc - then give faces that material...
                      More like this...

                      matl = model.materials.add('gl_green')
                      matl.color = Sketchup;;Color.new(0,250,154)
                      matl.alpha =0 .5
                      faces.each{|face|
                        face.material = matl
                        face.back_material = matl
                      }
                      

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • pingpinkP Offline
                        pingpink
                        last edited by

                        Hi , TIG

                        This is correct , right ? I test it and it gives a name of material !!

                        def gl_green
                        
                        	model=Sketchup.active_model
                        	ss=model.selection
                        
                        	faces = ss.grep(Sketchup;;Face)
                        
                        	matl = model.materials.add('gl_green')
                        	matl.color = Sketchup;;Color.new(0,250,154)
                        	matl.alpha =0.5
                        	faces.each{|face|
                        	face.material = matl
                        	face.back_material = matl
                        	}
                        end
                        
                        1 Reply Last reply Reply Quote 0
                        • Dan RathbunD Offline
                          Dan Rathbun
                          last edited by

                          He's actually using one of the standard color set.

                          I'm not here much anymore.

                          1 Reply Last reply Reply Quote 0
                          • TIGT Offline
                            TIG Moderator
                            last edited by

                            As Dan says you can create and set materials in several ways.
                            face.material='red'
                            works because ' red' is a standard 'color', and a material will be auto-created from that if it doesn't exist.
                            But
                            face.material='redex'
                            might fail because that isn't a standard color - that is unless it already exists in the model.materials, and it has that very name...

                            It's best to try and separate materials and colors in your thought process...
                            Make the new materials up front and then specify them by name after that...
                            ` mat=model.materials.add('redex')
                            mat.color='red'
                            mat.alpha=0.33

                            later

                            face.material=mat

                            or

                            face.material='redex'`
                            etc

                            TIG

                            1 Reply Last reply Reply Quote 0
                            • pingpinkP Offline
                              pingpink
                              last edited by

                              Thank You again Dan and TIG ! . I understand an idea now. πŸ˜„

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

                              Advertisement