Syntax error + no sleep + crummy suspension = please help!
-
You need to have two materials in the SKP, each using the desired color and image-file as its texture.
These can either be preexisting materials or made in the script.
Assumingmodel=Sketchup.active_model
earlier in your code...
To make a material read up on materials, colors and textures...
http://code.google.com/apis/sketchup/docs/ourdoc/material.html
http://code.google.com/apis/sketchup/docs/ourdoc/color.html
http://code.google.com/apis/sketchup/docs/ourdoc/texture.html
The principal is this...
mat1=model.materials.add("Mat1")unless mat1=model.materials["Mat1"]
This sets 'mat1' to be a material named 'Mat1' - making that material if it doesn't already exist.
By default it's rgb color is [0,0,0] =='black'.
So change its color as desired - e.g. to make it 'red' use
mat1.color=[255,0,0]
Repeat to make 'mat2', perhaps colored green [0,255,0]
Test it to see that it works assigning 'mat1' and 'mat2' to different faces [withface.material=mat1
etc].
Now to add a texture...
mat1.texture="path_to_image_file_1"
Remember that if you specify the path with a folder to use '.../folder/file' or ".../folder/file" or "...\folder\file" - i.e. escape the \ separator or use a / one...
The texture will come in using the default size [10"?].
You can change a texture's size [in inches] with
mat1.texture.size=[width, height]
Note how you can read a texture.image_height amd .image_width, in pixels, and convert those to 'inches' to use in the.size=[]
method too...
You can also pass just ONE size value rather than the array, which maintains the image's "aspect-ratio"...
When you have applied a texture you can also use this
mat1.color=mat1.texture.average_color
to ensure that it looks a similar color when the display mode does not include textures.
Hope that helps... -
(meh! TIG beat me to it while I was writing...)
Can you explain what fails? Error messages?
In general:
<span class="syntaxdefault"><br />model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br />materials </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">materials<br /><br />unless m1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> material</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'MyFirstMaterial'</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault"> m1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> materials</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'MyFirstMaterial'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> m1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">color </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">255</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">end<br /><br />unless m2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> material</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'MySecondMaterial'</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault"> m2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> materials</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'MySecondMaterial'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> m2</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">color </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">255</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">end<br /><br />f1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </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"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">100</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"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">f1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">material </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> m1<br /><br />f2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </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">100</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">f2</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">material </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> m2<br /></span>
-
Ok, so this is what I have at the moment:
at the start of the plugin I have:
mats = Sketchup.active_model.materials
mat1 = mats.add "Wood_Plywood_Knots"and then later I have:
face1 = container.add_face ( [0,0,80.mm],[l+160.mm,0,80.mm],[l+160.mm,0,180.mm],[0,0,180.mm],[0,0,80.mm] ) face1.material = mat1
and this is the error I get:
Error Loading File test.rb
/Library/Application Support/Google SketchUp 8/SketchUp/Plugins/test.rb:44: parse error, unexpected tIDENTIFIER, expecting kEND
face1 = container.add_face ( [0,0,80.mm],[l+160.mm,0,80.mm],[l+160.mm,0,180.mm],[0,0,180.mm],[0,0,80.mm] ) face1.material = mat1
^so what am I doing wrong?
-
You put two statements on one line.
Either split them like so:
<span class="syntaxdefault">face1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> container</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </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">80.mm</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">l</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">160.mm</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">80.mm</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">l</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">160.mm</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">180.mm</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">180.mm</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">80.mm</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">face1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">material </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mat1</span>
Or use ; to separate multiple statements on a single line:
<span class="syntaxdefault">face1 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> container</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </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">80.mm</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">l</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">160.mm</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">80.mm</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">l</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">160.mm</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">180.mm</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">180.mm</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">80.mm</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> face1</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">material </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> mat1</span>
I recommend the first variant for readability.
-
ALSO never include a space in front of parenthesized arguments, it will generate an error message, and it might become deprecated soon...
BAD:
container.add_face ()
GOOD:
container.add_face()
-
ah, sweet, I didn't spot the (lack of) space in front of the ()'s, cheers for that. Also, didn't know about using two separate lines.
Thanks for the advice. At least the truck has stopped moving now, waiting to get on a ferry at Holyhead, I might get this one finished in the time available now!
Many thanks,
Cathal
-
-
You COULD miss out the () BUT then NON-parenthesized arguments are also on the list of things to be deprecated soon, and so they are also best avoided.
Almost all of the examples in the API docs are 'wrong' -
hmm, so I've used
**face1 = container.add_face ( [0,0,80.mm],[l+160.mm,0,80.mm],[l+160.mm,0,180.mm],[0,0,180.mm],[0,0,80.mm] ) face1.material = mat1**
but what happens is that sketchup makes face1, doesn't give it a texture, and then leaves out everything after that point, i.e. the rest of the model...
is my material spec wrong?
mats = Sketchup.active_model.materials
mat1 = mats.add "Wood_Plywood_Knots"do i need to add a file path? like "library/googlesketchup/materials/Wood_Plywood_Knots" or something?
-
Assuming your code goes before the face is made
mat1 = mats.add("Wood_Plywood_Knots")
makes a new material named "Wood_Plywood_Knots".
It will be 'black' [0,0,0] with NO texture as you haven't [yet] specified a color or a texture-image...
If that material already exists it gets a numeral suffix...
If you haven't defined 'mat1' when you assign it to the face it's like writingface.material=nil
which is saying use the default front_face_material, which it already has! OR it cause a crash - what's in the Ruby Console...
Ensure a material is made before you use it...IF you were to read/understand my earlier notes... they explain step by step how to make/use a material, give it a color and give it a texture [image-file]; then adjust that texture-image and match the material's color to it etc...
Advertisement