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

      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
      • TIGT Offline
        TIG Moderator
        last edited by

        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
        • thomthomT Offline
          thomthom
          last edited by

          (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

            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
            • thomthomT Offline
              thomthom
              last edited by

              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
              • TIGT Offline
                TIG Moderator
                last edited by

                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

                  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

                    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
                    • TIGT Offline
                      TIG Moderator
                      last edited by

                      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

                        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
                        • TIGT Offline
                          TIG Moderator
                          last edited by

                          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
                          • First post
                            Last post
                          Buy SketchPlus
                          Buy SUbD
                          Buy WrapR
                          Buy eBook
                          Buy Modelur
                          Buy Vertex Tools
                          Buy SketchCuisine
                          Buy FormFonts

                          Advertisement