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

[Plugin] Hatchfaces (v1.8 beta) UPDATED 15-Dec-2012

Scheduled Pinned Locked Moved Plugins
360 Posts 41 Posters 228.5k Views 41 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.
  • J Offline
    jolran
    last edited by 15 Jul 2011, 09:16

    Great info! Will work on that.

    Do you mean {|loop|gents.add_face

    or {|loop|ents.add_face ?

    Thank you TIG. Got me some homework πŸ˜„

    1 Reply Last reply Reply Quote 0
    • T Offline
      TIG Moderator
      last edited by 15 Jul 2011, 09:18

      The 'gents' refers to the group.entities where we are replicating the face ?

      TIG

      1 Reply Last reply Reply Quote 0
      • J Offline
        jolran
        last edited by 15 Jul 2011, 09:30

        Yes that make sence. I had already put a similar code from your pm in my editor where I had used ents.

        That was wrong then from my part. Makes thing clearer. Thanks! πŸ˜„

        1 Reply Last reply Reply Quote 0
        • J Offline
          jolran
          last edited by 15 Jul 2011, 17:16

          Strange. Should work, but no innerface is created.
          Hatch gets created over whole face. I tried different combinations with
          these new lines added, but get errors then..

          gp=ents.add_group()
                gp.name=name
                gents=gp.entities
                face=gents.add_face(face.outer_loop.vertices) # adds a faceclone from outer vertices loop
                faces2go=[]  # was faces2gp? Typo? array for innerloups faces
                face.loops.each{|loop|gents.add_face(loop.vertices)}   # creates inner loop 
                gents.each{|face|
                next if face.class!=Sketchup;;Face     
                face.edges.each{|e|
                if not e.faces[1]
                break
                end
              faces2go << face
            }
          }
                gents.erase_entities(faces2go)                #erase the faces in the holes 
          
          1 Reply Last reply Reply Quote 0
          • T Offline
            TIG Moderator
            last edited by 15 Jul 2011, 17:39

            Try first adding the faces for the 'inner_loops' - each using loop.vertices in turn [i.e. face.loops-[face.outer_loop]], then add the face from face.outer_loop.vertices...
            This might work... To see what you are getting stop the code temporarily before the inner faces are erased and before any hatching is done - add a line 'return nil' in the code so that it stops... You should get the faces reproduced in the group. Then try with the inner face erase bit to see if they go [sans hatching...] πŸ˜•

            TIG

            1 Reply Last reply Reply Quote 0
            • S Offline
              sergey2402
              last edited by 15 Jul 2011, 17:57

              Perhaps the thickness of the hatch lines should not be equal to the thickness of the edges? Like dimension lines.

              1 Reply Last reply Reply Quote 0
              • J Offline
                jolran
                last edited by 15 Jul 2011, 18:11

                Not noow Kato!! πŸ‘Š πŸ˜„

                I don't understand Sergey. Do you want line weight? That is only possible
                through styles in Sketchup. But it's a global feature. I am afraid I can't do anything about that. Maybe if thin rectangles are grouped with materials
                like TIG,s dashed lines. But that is further on in developement.

                Look at my last minitut for an example how you can use differnt styles, with edge profiles for ex.

                Thanks for input Sergey! MUST CODE ON!! πŸ‘

                And yes TIG. I'm trying! πŸŽ‰

                1 Reply Last reply Reply Quote 0
                • J Offline
                  jolran
                  last edited by 15 Jul 2011, 19:15

                  This code gives me a face with holes. If I stop after this code.
                  But cannot Hatch faces with holes in full script.
                  Get an error πŸ˜•
                  Normal (square faces) works fine in full script with the changed code, strange enough.

                  gp.layer=hatch_layer    # group to Hatching layer
                        gp.name=name
                        gents=gp.entities
                        faces2go=[]
                        face.loops.each{|loop|gents.add_face(loop.vertices)}
                        
                        gents.each{|face| 
                        next if face.class!=Sketchup;;Face     
                        face.edges.each{|e|
                        if not e.faces[1]
                        break
                        end
                        faces2go << face
                    }
                  }
                   
                   gents.erase_entities(faces2go)                #erase the faces in the holes 
                  
                  1 Reply Last reply Reply Quote 0
                  • T Offline
                    TIG Moderator
                    last edited by 15 Jul 2011, 19:21

                    Why not?
                    How are you hatching?
                    Stop at each stage with a temporary 'return nil' and see what you get or error messages etc... πŸ˜•

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • L Offline
                      linea
                      last edited by 15 Jul 2011, 21:53

                      Tig this is brilliant, wanted this for so long.

                      1 Reply Last reply Reply Quote 0
                      • S Offline
                        sergey2402
                        last edited by 16 Jul 2011, 02:03

                        Whether not too much I want? 😳


                        hatching01.jpg

                        1 Reply Last reply Reply Quote 0
                        • K Offline
                          kyyu
                          last edited by 16 Jul 2011, 03:02

                          jolran, a few suggests for you to consider.

                          1. Seperate out the code that draws the line pattern, into it's own method. That will make your main program simpler to understand. It will look more like an outline. Check out my later example code snippet. I just premade the line pattern, by hand, which would represent simply calling a method to make it. Also, you can reuse the draw_lines method, say if you want to draw a 2nd set in the criss cross direction.

                          2. Might want to consider a rethink. The program will become more complicated, if you just keep adding stuff on top of exsiting. Here's a possible new way, shown below. And the way I test stuff quickly, is to use the "Ruby Web Console" plugin by Jim Foltz. I often check parts of my program, like this, as snippets of code; before adding it to the plugin. You simply undo <ctrl+z>, change the line(s) of code and execute the code again, by hitting the "eval button".

                          #This snippet puts the face,lines & hatch into 3 seperate groups.  Face is simply grouped, not copied.
                          #The "lines" group is premade and named "lines", so the script can find it.
                          #You need to select the face, before running script
                          #No need to delete seperate edges, just delete the lines group when done.
                          model = Sketchup.active_model
                          ent = model.entities
                          sel = model.selection
                          f = sel[0]
                          face = ent.add_group(f)
                          lines = (ent.to_a.select {|e| e.is_a?(Sketchup;;Group) and e.name=="lines"})[0]
                          puts lines
                          hatch = ent.add_group
                          hent=hatch.entities; lent=lines.entities; fent=face.entities
                          htr=hatch.transformation; ltr=lines.transformation; ftr=face.transformation
                          fent.intersect_with(true, ftr, hent, htr, false, lines)
                          lines.erase!
                          face.explode
                          

                          Snippet of code and model set up to run
                          ![After pressing "eval" button](/uploads/imported_attachments/Hdko_test_hatch_rwc_after.png "After pressing "eval" button")
                          test_hatch_RubyWebConsole.skp

                          1 Reply Last reply Reply Quote 0
                          • J Offline
                            Jim
                            last edited by 16 Jul 2011, 07:58

                            This is very useful, jolran. Thanks for making it happen.

                            Hi

                            1 Reply Last reply Reply Quote 0
                            • K Offline
                              kaas
                              last edited by 16 Jul 2011, 13:22

                              wonderful!! This kind of plugin (hopefully someday with some extra hatch options) is really what I was missing in SU.

                              Many thanks to those involved!

                              1 Reply Last reply Reply Quote 0
                              • J Offline
                                jolran
                                last edited by 16 Jul 2011, 17:59

                                Sergey, thanks for your suggestions πŸ‘ I will probably go for something like the picture, first time around.
                                Unless I'm wrong you have to use webdialog for checkboxes, and I'll put that on hold for now.
                                More important issues to deal with first.

                                Hi Kyyu. Many thanks for your input and experimenting. Really appreciate it πŸ‘
                                I got a strong impression from reading this forum, that making groupes from selection is a bad choice? πŸ˜•
                                Thats why I neglected my original idea and went for TIG's "face.clone iterating stuff". Don't you get splats doing it like that? Have you tried this inside a group? I got constant splats doing almost exactly as you did.

                                However grouping the edges before doing an intersect_with might be a good idea. That might actually be an easier method than iteration the edges for erasing? Depends on how "splat-prone" the method is.

                                About separating to 3 groups. Don't know if that is necessary? Doesent it suffice to add the hatches to a new layer? (Which is already implemented in my current code). This grouping In my opinion does no good for the workflow. Need more feedback about that, please πŸ˜„

                                @unknownuser said:

                                Seperate out the code that draws the line pattern, into it's own method

                                Yeah, I know code's a bit messy, but doing a second hatching that is probably a must anyway.
                                I'm using AS ruby code editor. It's the same as Jim's no?

                                Thank you Jim and Kaas! And TIG's been helping me a LOT, that goes without saying.


                                cross_menu.jpg

                                1 Reply Last reply Reply Quote 0
                                • J Offline
                                  jolran
                                  last edited by 16 Jul 2011, 18:32

                                  YES!!!! Faces with holes are hatching now. Will update tomorrow, hopefully.

                                  Stupid newbie-mistake. I did not create "@face" object. So for ex bb=face.bounds
                                  did not have anything to refer to since face was in Faces2go's scope. At least that is what I think happend. πŸ˜„

                                  Will test more before I celebrate too much...

                                  Sorry TIG, I missed your post from yesterday. I wasent using return nil. I used =begin and =end. That works equally good?

                                  1 Reply Last reply Reply Quote 0
                                  • J Offline
                                    jolran
                                    last edited by 16 Jul 2011, 18:41

                                    Testing.


                                    holes.jpg

                                    1 Reply Last reply Reply Quote 0
                                    • B Offline
                                      Bob James
                                      last edited by 16 Jul 2011, 18:46

                                      Looking Good πŸ‘

                                      i7-4930K 3.4Ghz, 2x GTX780 6GB, 32GB DDR3-1600 ECC, OCZ Vertex 4 500GB, WD Black 3TB, 32TB NAS, 4x 27" Monitors, SpaceMouse Pro, X-keys XK-60

                                      1 Reply Last reply Reply Quote 0
                                      • K Offline
                                        kyyu
                                        last edited by 16 Jul 2011, 22:55

                                        Sorry, disregard, was trying to edit the previous post.

                                        1 Reply Last reply Reply Quote 0
                                        • S Offline
                                          sergey2402
                                          last edited by 16 Jul 2011, 22:58

                                          @jolran said:

                                          YES!!!! Faces with holes are hatching now. Will update tomorrow, hopefully.

                                          So when will come tomorrow? I am looking forward!
                                          I am sure - in the new version of SketchUp this plugin should become a standard feature.

                                          1 Reply Last reply Reply Quote 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 17
                                          • 18
                                          • 3 / 18
                                          3 / 18
                                          • First post
                                            44/360
                                            Last post
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement