• Login
sketchucation logo sketchucation
  • Login
๐Ÿค‘ SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

Syntax error + no sleep + crummy suspension = please help!

Scheduled Pinned Locked Moved Developers' Forum
11 Posts 3 Posters 278 Views
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.
  • I Offline
    installtechireland
    last edited by 1 Feb 2012, 11:06

    Ok, so I'm currently bouncing across north Wales in a truck, trying to finish a ruby plugin. The lack of sleep, coupled with a bouncy truck is making it difficult, and I have come up against a wall (figuratively speaking).

    I have all the faces I want in my model. Now I want to add textures. Specifically, I want to add two different textures, one to only 6 or so faces and one to all the rest (about 40). Every time I add in code to do this it fails. Can someone point me in the direction of what I should be doing?

    I'm guessing I need to call a material as a default and then just add the other one as it's needed but I can't get it right.

    Any help greatly appreciated.

    Cathal.

    1 Reply Last reply Reply Quote 0
    • T Offline
      TIG Moderator
      last edited by 1 Feb 2012, 11:42

      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.
      Assuming model=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 [with face.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...

      TIG

      1 Reply Last reply Reply Quote 0
      • T Offline
        thomthom
        last edited by 1 Feb 2012, 11:43

        (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>
        

        Thomas Thomassen โ€” SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • I Offline
          installtechireland
          last edited by 1 Feb 2012, 12:21

          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?

          1 Reply Last reply Reply Quote 0
          • T Offline
            thomthom
            last edited by 1 Feb 2012, 12:24

            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.

            Thomas Thomassen โ€” SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 Reply Last reply Reply Quote 0
            • T Offline
              TIG Moderator
              last edited by 1 Feb 2012, 12:31

              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()

              TIG

              1 Reply Last reply Reply Quote 0
              • I Offline
                installtechireland
                last edited by 1 Feb 2012, 12:36

                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

                1 Reply Last reply Reply Quote 0
                • I Offline
                  installtechireland
                  last edited by 1 Feb 2012, 12:38

                  can I leave out the ()'s altogether and just write:

                  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

                  1 Reply Last reply Reply Quote 0
                  • T Offline
                    TIG Moderator
                    last edited by 1 Feb 2012, 12:40

                    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' ๐Ÿ˜’

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • I Offline
                      installtechireland
                      last edited by 1 Feb 2012, 12:47

                      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?

                      1 Reply Last reply Reply Quote 0
                      • T Offline
                        TIG Moderator
                        last edited by 1 Feb 2012, 13:08

                        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 writing face.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... ๐Ÿ˜’

                        TIG

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

                        Advertisement