Ruby script for selecting color
-
Please don't use '
.back_material=
'.
You want '.material=
'...
If your initial 'face' is not the "right way round" for the pushpull, DON'T make the result inside-out but colored correctly, rather you should add a test for the 'face' direction.
A face drawn 'flat' at z=0 will always face downwards, irrespective of the cw/ccw direction of its outer_loop vertices...
Theface.normal
is its vector.
IF that is not facing away from the pushpull direction you might need to reverse the 'face' BEFORE the pushpull... withface.reverse!
OR more simply use a -ve value for the pushpull - so it is in the upwards direction !! that is use -hei NOT hei...PS: I think your '
face
' is called 'base
'... -
Thanks TIG
I have a question on the user input for the my testbox1 code I want to add user to choose three given value or they can enter custom value. I tried my self it works for given value to choose but custom value i don't know how to do. could you give me an idea? you know what I mean? combine list = ["6'|8'|10'|Custom"] -
list = ["6'|8'|10'|Custom"]
used in an inputbox will work... BUT when your get the results you will need to do another test on that result - let's call thatx = results[0]
...
` if x == "Custom"you now need a second input-dialog to get the custom size...
res = inputbox(["X: "], ["1'"], "Custom Size")
defsult is 1' [string]...
return nil unless res
x = res[0].to_l
else ### it's a distance [string]
x = x.to_lwhich when "6'" it returns a value of 72" [which is 6 feet]
end`
-
You are confusing the first 'results' with the second 'results' by using the same name !
Use a different name for the second one... I've used 'resultsx'
... return if not results x = results[0] if x == "Custom" resultsx = inputbox (["Enter Width:"], ["1'"], "Custom Size") return nil if not resultsx x = resultsx[0].to_l ### must turn string into a length else x = x.to_l end wid = x ### we have that value set already dep = results[1].to_l ### must turn string into a length hei = results[2].to_l color = results[3] ### this stays as a string ...
-
Thanks TIG
I tried it's give me an error could you look at my code?<span class="syntaxdefault"></span><span class="syntaxkeyword">require </span><span class="syntaxstring">'Sketchup.rb'<br /><br /></span><span class="syntaxdefault">def testbox1 <br /> <br /> model </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> ent </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities <br /> </span><span class="syntaxcomment">#ss = model.selection<br /> #obj = ss[3]<br /> </span><span class="syntaxdefault">prompts </span><span class="syntaxkeyword">= [</span><span class="syntaxstring">"Width"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"Depth"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"Height"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"Colour"</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">defaults </span><span class="syntaxkeyword">= [</span><span class="syntaxdefault">6.feet</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">4.feet</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">2.feet</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'Red'</span><span class="syntaxkeyword">]<br /> list = [[</span><span class="syntaxstring">"6'|8'|10'|Custom"</span><span class="syntaxkeyword">],</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,[</span><span class="syntaxstring">"Blue|Red|Green"</span><span class="syntaxkeyword">]]<br /> </span><span class="syntaxdefault">results </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">inputbox prompts</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">defaults</span><span class="syntaxkeyword">, list, </span><span class="syntaxstring">"Test_Box"<br /> <br /> </span><span class="syntaxkeyword">return if </span><span class="syntaxdefault">not results<br /> x </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /> if </span><span class="syntaxdefault">x </span><span class="syntaxkeyword">== </span><span class="syntaxstring">"Custom"<br /> </span><span class="syntaxdefault">results </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">inputbox </span><span class="syntaxkeyword">([</span><span class="syntaxstring">"Enter Width;"</span><span class="syntaxkeyword">], [</span><span class="syntaxstring">"1'"</span><span class="syntaxkeyword">], </span><span class="syntaxstring">"Custom Size"</span><span class="syntaxkeyword">)<br /> return </span><span class="syntaxdefault">nil </span><span class="syntaxkeyword">if </span><span class="syntaxdefault">not results<br /> x </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">to_l<br /> </span><span class="syntaxkeyword">else<br /> </span><span class="syntaxdefault">x </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">x</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">to_l<br /> end<br /> wid </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">dep </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">hei </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">color </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">]<br /> <br /> </span><span class="syntaxdefault">pts </span><span class="syntaxkeyword">= [[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">], [</span><span class="syntaxdefault">wid</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">], [</span><span class="syntaxdefault">wid</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">dep</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">], [</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">dep</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]]<br /> <br /> </span><span class="syntaxdefault">base </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">ent</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face pts<br /> hei </span><span class="syntaxkeyword">= -</span><span class="syntaxdefault">hei </span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">normal</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dot</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">Z_AXIS</span><span class="syntaxkeyword">) < </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br /> <br /> </span><span class="syntaxcomment">#color = nil if color ==''<br /> <br /> </span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">back_material </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">color<br /> </span><span class="syntaxcomment">#base.reverse!<br /> </span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pushpull hei<br /> <br /> <br /> end<br /><br /><br /><br /></span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">not $Testbox_menu_loaded</span><span class="syntaxkeyword">)<br /> <br /> </span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Tools"</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"TEST_BOX"</span><span class="syntaxkeyword">) {</span><span class="syntaxdefault">testbox1</span><span class="syntaxkeyword">}<br /> </span><span class="syntaxdefault">$Testbox_menu_loaded </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">true<br />end</span>
-
Thanks TIG
I tried when I use sketchup inputbox popup use defalt nothing happening. when I choose custom it gives mesage "cannot convert Custom to length" could you tell me why?<span class="syntaxdefault"></span><span class="syntaxkeyword">require </span><span class="syntaxstring">'Sketchup.rb'<br /><br /></span><span class="syntaxdefault">def testbox1 <br /> <br /> model </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> ent </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities <br /> </span><span class="syntaxcomment">#ss = model.selection<br /> #obj = ss[3]<br /> </span><span class="syntaxdefault">prompts </span><span class="syntaxkeyword">= [</span><span class="syntaxstring">"Width"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"Depth"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"Height"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"Colour"</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">defaults </span><span class="syntaxkeyword">= [</span><span class="syntaxdefault">6.feet</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">4.feet</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">2.feet</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'Red'</span><span class="syntaxkeyword">]<br /> list = [[</span><span class="syntaxstring">"6'|8'|10'|Custom"</span><span class="syntaxkeyword">],</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,</span><span class="syntaxstring">""</span><span class="syntaxkeyword">,[</span><span class="syntaxstring">"Blue|Red|Green"</span><span class="syntaxkeyword">]]<br /> </span><span class="syntaxdefault">results </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">inputbox prompts</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">defaults</span><span class="syntaxkeyword">, list, </span><span class="syntaxstring">"Test_Box"<br /> <br /> </span><span class="syntaxkeyword">return if </span><span class="syntaxdefault">not results<br /> x </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /> if </span><span class="syntaxdefault">x </span><span class="syntaxkeyword">== </span><span class="syntaxstring">"Custom"<br /> </span><span class="syntaxdefault">resultsx </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">inputbox </span><span class="syntaxkeyword">([</span><span class="syntaxstring">"Enter Width;"</span><span class="syntaxkeyword">], [</span><span class="syntaxstring">"1'"</span><span class="syntaxkeyword">], </span><span class="syntaxstring">"Custom Size"</span><span class="syntaxkeyword">)<br /> return </span><span class="syntaxdefault">nil </span><span class="syntaxkeyword">if </span><span class="syntaxdefault">not resultsx<br /> x </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">resultsx</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">to_l<br /> </span><span class="syntaxkeyword">else<br /> </span><span class="syntaxdefault">x </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">x</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">to_l<br /> end<br /> wid </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">x<br /> dep </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">hei </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]<br /> </span><span class="syntaxdefault">color </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">results</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">]<br /> <br /> </span><span class="syntaxdefault">pts </span><span class="syntaxkeyword">= [[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">], [</span><span class="syntaxdefault">wid</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">], [</span><span class="syntaxdefault">wid</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">dep</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">], [</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">dep</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]]<br /> <br /> </span><span class="syntaxdefault">base </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">ent</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face pts<br /> hei </span><span class="syntaxkeyword">= -</span><span class="syntaxdefault">hei </span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">normal</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dot</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">Z_AXIS</span><span class="syntaxkeyword">) < </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">)<br /> <br /> </span><span class="syntaxcomment">#color = nil if color ==''<br /> <br /> </span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">back_material </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">color<br /> </span><span class="syntaxcomment">#base.reverse!<br /> </span><span class="syntaxdefault">base</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pushpull hei<br /> <br /> <br /> end<br /><br /><br /><br /></span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">not $Testbox_menu_loaded</span><span class="syntaxkeyword">)<br /> <br /> </span><span class="syntaxdefault">UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Tools"</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"TEST_BOX"</span><span class="syntaxkeyword">) {</span><span class="syntaxdefault">testbox1</span><span class="syntaxkeyword">}<br /> </span><span class="syntaxdefault">$Testbox_menu_loaded </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">true<br />end</span>
-
@nithi09 said:
I tried when I use sketchup inputbox popup use defalt nothing happening. when I choose custom it gives mesage "cannot convert Custom to length" could you tell me why?
Because you set the default value of the box to an object of the type Length (6.feet) - this means that the input box will try to convert the return value to be of the same type.
But "Custom" cannot be converted into a valid Length object.
So instead you'd need to use strings as the default value and handle the conversion back to Length as needed.
Btw, it's a lot easier to read your code if you wrap it in
[code]
tags. (I've done it for you so far.) -
Well done TT - I didn't spot the mismatch between 6.feet length and "6'" string.
If you are making a dropdown list it needs to be text, that you convert to a length later... -
Not
require 'Sketchup.rb' class Testbox def testbox1
...
Try
require 'Sketchup.rb' class Testbox def **initialize**()
...
Then useTestbox.new()
which will run the initialize... -
Thanks you for you help. it's works
-
Hi I want to add texture for this box I want to see this box look like glass box any Idea?
thanks -
If you have a glass texture already existing use that by 'Name'.
If you have added a 'color' material you can get a reference to that after you have made it/added it to a face:
mat=base.material
and then usemat.alpha=0.5
to add opacity < 1... aka transparency -
Hi TIG it's working. but I want to see both way. I mean from outside to inside the box see through fine but inside to outside not see through how do I can do both way? or where do I can find clear glass texture
Thanks -
When you give the first face ['base' ?] its material you need to also apply it to the back face thus:
base.material = 'xxxx' base.**back_material** = 'xxxx'
where 'xxxx' is the material... -
Hi TIG how do I can add glass texture to only one wall of box out of four walls.above method applying whole box. I like to try only one wall glass.thanks
-
Well... you need to work out how to 'find' the face first, then once you have it give it a [preexisting] material - let's assume it's name is 'Glass'...
A face has a 'normal' - which the vector that tells us which way a face is looking...
So let's say the collection of faces [along with edges etc] is in ` - then you need to filter that to find just the faces and then from that exact face with a particular 'normal'...
Let's also assume it is a box so only one matching face.normal will be found...group.entities.grep(Sketchup;;Face).each{|face| if face.normal==Z_AXIS ### == faces 'UP'... BUT you can use any vector to compare face.material='Glass' face.back_material='Glass' break ### stop looking end }
group.entities.grep(Sketchup;;Face).each{|face|
if face.normal==Z_AXIS ### == faces 'UP'... BUT you can use any vector to compare
face.material='Glass'
face.back_material='Glass'
break ### stop looking
end
}[/code:ngl1vctf] -
Hi TIG how do I find preexisting material on my box? is not 'Glass' thx
-
Your materials have names.
I used 'Glass' as an example.
The material must already exist in the model.
[I am skipping explaining how to create a material if it doesn't already exist, change its RGB and opacity etc... that wasn't your original question!]So use any existing material you want - just pass its 'name'...
-
Hi TIG What I am trying to do above creating box one side of box look like see through glass and rest solid coloured any idea???
-
An image of what you expect might help us help you, we are not mind-readers.
I have given you a general framework for code that finds "any face" by its direction and gives it a material.
The example I gave was forface.normal==Z_AXIS
which means it faces directly upwards,
BUT you can compare it to any axis
X_AXIS
Y_AXIS
and for the 'opposite direction'...
X_AXIS.reverse
Y_AXIS.reverse
Z_AXIS.reverseYou need to find and read code examples more....
Advertisement