• 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.
  • T Online
    TIG Moderator
    last edited by 14 Jul 2011, 08:41

    Do you mean erase the surround edges to the hatching ?

    To do that you need to examine the hatching group's geometry before your code to finally erase all faces.
    Make an empty array
    edges2go=[]
    then iterate the geometry
    group.entities.each{|e|edges2go << if e.class==Sketchup::Edge and not e.faces[1]}
    i.e. 'edges2go' is now a list of all edges in the hatching group that are on the 'perimeter' - i.e. they have only one face. We will now erase them - this will destroy their faces too so you probably never need to erase the group's faces as there won't be any left!
    group.entities.erase_entities(edges2go)
    All perimeter edges are erased en mass. πŸ˜„
    How are you getting on with the 'holes' issue ❓

    TIG

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

      He he! I can't make this work. I wish it was as simple for me as it is for you 😳

      @unknownuser said:

      before your code to finally erase all faces.

      By that you mean after the intersection and before the erasing?

      The "hole" issue is putting a hole in my brain.

      1 Reply Last reply Reply Quote 0
      • T Online
        TIG Moderator
        last edited by 14 Jul 2011, 12:36

        The two relevant lines in the code
        gents.to_a.each{|e|e.erase! if e.valid? and e.class==Sketchup::Edge and e.faces.length==0} gents.to_a.each{|e|e.erase! if e.valid? and e.class==Sketchup::Face}
        The first line removes any unfaced edges.
        The second removes all faces.
        What you need to do between them is add these lines
        edges2go=[] gents.each{|e|edges2go << if e.class==Sketchup::Edge and not e.faces[1]} gents.erase_entities(edges2go)
        This will remove perimeter edges and thereby all faces anyway... So after a test you should find the original second line to erase all faces is no longer needed...
        πŸ€“

        TIG

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

          Ver 1.2 zip added at first post.

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

            Yeeyy!!! It works now!

            I had to think a little bit πŸ˜„ Where some typos(I hope I did not destroy anything ❓ )

            Anyway it works. Will post update soon..

            gents.to_a.each{|e|e.erase! if e.valid? and e.class==Sketchup;;Edge and e.faces.length==0}
                  edges2go=[]
                  gents.each{|e|edges2go << e if e.class==Sketchup;;Edge and not e.faces[1]}
                  gents.erase_entities(edges2go)
            

            Thanks to TIG this plugin gets updated once more πŸ˜„

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

              Well done! You are doing greatly desired work!
              I really, really like it.

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

                Why thank you 😳 But I really think you should thank TIG and Kyuu.

                Feel free to ask for ways to improve! Or even come up with ideas πŸ‘

                1 Reply Last reply Reply Quote 0
                • K Offline
                  ken
                  last edited by 14 Jul 2011, 18:43

                  Well, this is starting to look good. My suggested improvement

                  1. If you do two hatches of the same face, is it possible to get both hatches in the same group.

                  Thank you for your work

                  Ken

                  Fight like your the third monkey on Noah's Ark gangway.

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

                    Maybe hatches should be on its own layer?

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

                      Thank you for your input guys!! Good points!

                      I will answer more profound tomorrow. I'm a bit in a hurry! For Now, here is a minitut or tips, as a compensation that the hole "issue" isent fixed yet. πŸ˜‰


                      Hatchtut2-1.jpg

                      1 Reply Last reply Reply Quote 0
                      • S Offline
                        sergey2402
                        last edited by 14 Jul 2011, 19:41

                        TIG, kyyu, please do not leave jolran alone. You are all together make a very necessary work.

                        1 Reply Last reply Reply Quote 0
                        • T Online
                          TIG Moderator
                          last edited by 14 Jul 2011, 21:17

                          We are helping him... [sometimes in the background πŸ˜‰ ] πŸ˜„

                          TIG

                          1 Reply Last reply Reply Quote 0
                          • S Offline
                            sergey2402
                            last edited by 14 Jul 2011, 21:27

                            @tig said:

                            We are helping him... [sometimes in the background πŸ˜‰ ] πŸ˜„

                            πŸ‘

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

                              About added features:

                              To put hatches in a layers(newly created OR selected) is possible, at least create a new layer. I was thinking of adding that anyway.

                              @unknownuser said:

                              If you do two hatches of the same face, is it possible to get both hatches in the same group.

                              It is a good idea, looking at how the plugin works right now. But it's risky business adding geometry inside groups, and you probably have to select the created hatchgroup before running. Wich in turn will not add that much improvement in workflow?
                              But if you really, REALLY want that feature... It won't hurt testing..

                              My personal view is that I should rather investigate the possibilitie to improve the plugin with a "pattern library" instead. No promises can be made in that regard though. It seams difficult.

                              @unknownuser said:

                              TIG, kyyu, please do not leave jolran alone
                              πŸ˜„

                              TIG's been helping me a LOT! Through PM's and more, otherwise this plugin would not exist. KYuu fixed the spacing and that was mucho importante.

                              1 Reply Last reply Reply Quote 0
                              • T Online
                                TIG Moderator
                                last edited by 15 Jul 2011, 07:55

                                The layer part is easy. Add some code to make/refer to the layer
                                hatch_layer=model.layers.add("HATCH")
                                If it doesn't exist it's made...
                                Then after the group is made use...
                                group.layer=hatch_layer
                                Done πŸ˜„

                                You could add a 'crosshatch' option to the main dialog, because most of the time that's what's wanted anyway - "Crosshatch? " >> "Yes|No" [you'd need to insert a 3rd ['','',["Yes|No"]] in inputbox moving the title over to 4th place] - default would be 'No'. If results[3]=='Yes' you'd repeat the line drawing steps within the same group entities, but at +/-90 degrees, so there would be twice as many edges overlaid etc... πŸ’­

                                How are the 'holes' going... ❓

                                TIG

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

                                  He he! As easy as that, huh? πŸ˜„ Well there you have it guys!

                                  I will work on those things. And put an option of angle on second hatching. That would give you as much flexibility as
                                  needed for linehatching I presume?

                                  The "holes"... Hmm difficult. I have been searching posts about that subject(Don't just want to add anything unless I actually understand what is going on). If I understood it right, holes are somewhat problematic in Sketchup. One have to
                                  use both face.outer_loops AND face_loops to get to the face hole geometry? Where face_loops is innerloop? Or include.all loops? That is a big difference.

                                  In API it says: Face outer_loops retrieves a "face loop object" But what does that mean?
                                  Edges, vertices? Both? Is it an array?

                                  For a newbie like me to interprate the API is quite difficult.
                                  The posts in here are very helpful, but it takes time to search specific posts. There are currently around 146 pages * 25 * (number replies) in just the developper section. πŸ˜„

                                  So with that said, I am very greatful for your help TIG.

                                  1 Reply Last reply Reply Quote 0
                                  • T Online
                                    TIG Moderator
                                    last edited by 15 Jul 2011, 08:57

                                    all_loops=face.loops i.e. its is an array of all loops including the outer one
                                    outer_loop = face.outer_loop inner_loops = all_loops - [outer_loop]
                                    Although some of this is of academic interest as we only need all_loops...

                                    As I said before [in a PM]... you simply iterate through all loops and add a face for each loop using its vertices.
                                    all_loops.each{|loop|gents.add_face(loop.vertices)}
                                    You have the main face drawn... but with its holes filled in with other faces.
                                    We can erase these by testing to see if each face in gents has an edge with only one face [i.e. it's NOT in a hole], if not then we'll erase it...

                                    faces2go=[]
                                    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)
                                    
                                    

                                    [this code is untested and might have typos !]
                                    Now you should have a perfect clone of the face inside the group with any holes reproduced too.
                                    Do your intersecting of the hatch lines etc just as before and then when you erase 'faceless edges' the ones now crossing these 'holes' will be erased too πŸ˜„

                                    TIG

                                    1 Reply Last reply Reply Quote 0
                                    • 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 Online
                                        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
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 17
                                          • 18
                                          • 2 / 18
                                          2 / 18
                                          • First post
                                            27/360
                                            Last post
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement