sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [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.
    • jolranJ Offline
      jolran
      last edited by

      Wow, thanks! So if I understand it correctly one do only need to compare x to y to get the required results. Where if>0,9999 switches to other axis-comparison=under1? Clever.

      It works for faces without holes if I switch values p0 to pt, with your last posted code.
      Or do you mean p0 to be po, (typo)? Cause that is a whole different thing. That does not makes sence though, wonder why I think that...

      I will try that meanwhile..Se if holes get fixed.

      po=pt.clone:

      ps=pt.offset(vp)
              pe=pt.offset(vp.reverse)
              gents.add_line(ps,pe)
              pt.offset!(vs,spacing)
              ps=po.offset(vp)
      etc
      
      1 Reply Last reply Reply Quote 0
      • jolranJ Offline
        jolran
        last edited by

        Anyway heres how I implemented your code, between ents erase(facestogo) and intersection. It does not work on faces with holes, as mentioned.
        Is there a clash with 2 pt.clones? Maybe I HAVE put your code in wrong places. I will continue..

        bb=face.bounds
              di=bb.diagonal
               pt=face.vertices[0].position
                p1=pt.clone
             if face.normal.x.abs>0.9999
              p1.y=p1.y+1
             else
              p1.x=p1.x+1
             end#if
              p1=p1.project_to_plane(face.plane)
               ve=pt.vector_to(p1)
                po=pt.clone
              tr=Geom;;Transformation.rotation(pt,face.normal,@angle.degrees)
               vp=ve.transform(tr)
                vp.length=di*2
                 vs=face.normal.cross(vp) #spacing vector perpendicular to hatch line
                 tot=0
              until tot>=di*2
                ps=pt.offset(vp)
                 pe=pt.offset(vp.reverse)
                  gents.add_line(ps,pe)
                   pt.offset!(vs,spacing)
                    ps=po.offset(vp)
                   pe=po.offset(vp.reverse)
                  gents.add_line(ps,pe)
                 po.offset!(vs.reverse,spacing)
                tot=
        
        1 Reply Last reply Reply Quote 0
        • jolranJ Offline
          jolran
          last edited by

          May have found something? Commented out the last parts. Line hatching and intersection.
          The results of faces with holes is a group(clone) with reversed face? Faces without holes is created as expected.
          Since using face.normal that might (in my theory logic) pose some trouble?

          Updated Hmmm, no. Grr. Did not matter if faces was reversed or not. Problem remains..

          This code reverses the faces anyway.
          Could be useful later on, but it will reverse ALL faces, wich is not useful right now. Faces without holes do not need reversing.

          faces2=[]
                gents.each{|e|faces2 << e.reverse! if e.class==Sketchup;;Face
          
          1 Reply Last reply Reply Quote 0
          • TIGT Offline
            TIG Moderator
            last edited by

            Perhaps instead of pt=face.vertices[0].position it might be better to use pt=face.outer_loop.vertices[0].position

            TIG

            1 Reply Last reply Reply Quote 0
            • jolranJ Offline
              jolran
              last edited by

              It does not work 😞

              However i noticed that "face" entity gets erased after erase(facestogo) if it has holes in it. Not if it's a square for ex!

              I used puts face after loop face erasing..

              So do face.plane have something to refere to when there are holes? Or is the variabel set earlier?

              1 Reply Last reply Reply Quote 0
              • TIGT Offline
                TIG Moderator
                last edited by

                Erase the faces after you've set the points/vector etc - you can't get the plane or normal of an erased face!

                TIG

                1 Reply Last reply Reply Quote 0
                • jolranJ Offline
                  jolran
                  last edited by

                  AHA!!

                  So even if I am stupid enough to make that misstake, I noticed that in fact that was the error going on?

                  I'm making progress!! πŸ˜„

                  Thanks TIG. I will try to fix it.

                  1 Reply Last reply Reply Quote 0
                  • jolranJ Offline
                    jolran
                    last edited by

                    The "earliest" place where I can insert gents.erase_entities(faces2go) without erasing the access to face.plane is:

                    tr=Geom;;Transformation.rotation(pt,face.normal,@angle.degrees)
                           vp=ve.transform(tr)
                            vp.length=di*2
                             vs=face.normal.cross(vp) #spacing vector perpendicular to hatch line
                              gents.erase_entities(faces2go)
                             
                    

                    The result is not correct. Missing edges and too short.

                    Is face.plane or any command referring to "face" using the inner-hole faces, perhaps?
                    Should one use gents.entities.face(or something to retrieve the face.entity in gents) instead of just face?

                    1 Reply Last reply Reply Quote 0
                    • TIGT Offline
                      TIG Moderator
                      last edited by

                      You can set variables plane=face.plane and normal=face.normal and pt=face.outer_loop.vertices[0].position, then face.erase! - the variables are still remembered... then use them later as needed ?

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • jolranJ Offline
                        jolran
                        last edited by

                        @unknownuser said:

                        You can set variables plane=face.plane and normal=face.normal and pt=face.outer_loop.vertices[0].position, then face.erase!

                        Ok. You mean before faces2go << face? After erase.faces2goI was going to define the
                        linehatching as a method for crosshatching, as we discussed earlier. They will have to be instance.variables then or do I pass all of them into the argument-list when calling the method?
                        That's why I was wondering if one could use face from gents.entities, since gents will be passed into the args-list anyway.

                        Or did you originaly mean I should put the whole operation into a method for crosshatching?

                        I'm sorry if I sound confused. 😳 But I am.

                        1 Reply Last reply Reply Quote 0
                        • TIGT Offline
                          TIG Moderator
                          last edited by

                          All this part is trying to do is set the vector from which you will set the angle for the hatching.
                          At the moment it's set from the vertices [0] to [1] vector which varies, so to fix it I suggested a way of projecting the x-axis onto the face.plane and getting a vector from that to use instead [with changes for a plane that doesn't play nicely with the x-axis to give a valid vector...
                          You get all of this from the original face NOT the temporary face ??

                          TIG

                          1 Reply Last reply Reply Quote 0
                          • jolranJ Offline
                            jolran
                            last edited by

                            @unknownuser said:

                            You get all of this from the original face NOT the temporary face!

                            Yes, that part I understand(hopefully) what it was about to fix for problems.

                            However when you said I can't get the plane or normal of an erased face, I thought
                            order matters. I think my english is a bit bad, I don't understand everything right away. Apologize for that.

                            Lets say I use ORIGINAL "face" for face plane, I still must pass "face" on in the argument-list if I am going to
                            have following script setup, wich will be needed for crosshatching later on, no?

                            Feels like I'm doing some fundamential misstake here.

                            (edited)It should be "face" in the argument list. NOT faces.


                            code_structureidea1.jpg

                            1 Reply Last reply Reply Quote 0
                            • jolranJ Offline
                              jolran
                              last edited by

                              Think I got! @face=gents.add_face etc..in tha Face creating-part And use @ varibles in the code below seams to do the trick!
                              It works on holes anyway. Don't know how kosher that is TIG? It would get into the linehatching method.

                              1 Reply Last reply Reply Quote 0
                              • jolranJ Offline
                                jolran
                                last edited by

                                Works with holes..


                                test forVer1.4.jpg

                                1 Reply Last reply Reply Quote 0
                                • TIGT Offline
                                  TIG Moderator
                                  last edited by

                                  It seems to work now πŸ˜„ - is the angle always more logically oriented to an axis rather than an edge of the face ??

                                  As @face is a reference to a face before you run hatch and you erase it afterwards you don't really need to pass [@]face as an argument because @face is an instance variable read across methods, but if you do it'll probably still work... πŸ˜‰

                                  Also you [mistakenly] show a space in the def name AND started it with CAPITAL letter - use 'linehatch' or 'lineHatch' or simply 'hatch' or even 'make_hatching' etc which are all just fine... call it with self.hatch(aa, bb, cc) or whatever it's called...

                                  Use a @xxx variable where you want to use it across several methods [def's]
                                  Pass arguments to a method when you want to reuse the method with changes to arguments without using @xxx as you want to keep that for later - e.g. the @angle etc IS reused next time you use the dialog so when you pass angle again you use @cangle for the crosshatching angle but want to use the same method again... πŸ€“

                                  TIG

                                  1 Reply Last reply Reply Quote 0
                                  • jolranJ Offline
                                    jolran
                                    last edited by

                                    Thanks for all your help and advice TIG!

                                    I will follow them.

                                    @unknownuser said:

                                    is the angle always more logically oriented to an axis rather than an edge of the face ??

                                    Don't know πŸ˜„

                                    So I'll update the plugin then? All OK?
                                    Will work on the crosshatching later. I think it is a good idea to get this fix out, so people can use this plugin
                                    more properly.

                                    This coding-testing burns more calories than a 2hours jogging in the forest πŸ˜„

                                    1 Reply Last reply Reply Quote 0
                                    • TIGT Offline
                                      TIG Moderator
                                      last edited by

                                      Test it on a cube's faces and a copy/copies of that cube rotated oddly in 3d to see what the hatching angles look like ??

                                      TIG

                                      1 Reply Last reply Reply Quote 0
                                      • jolranJ Offline
                                        jolran
                                        last edited by

                                        Crap! It always hatches in the axis. Doesent matter if the cube is rotated or not.

                                        OK. for tomorrow then... sigh... I hope you will come to the rescue again πŸ˜„
                                        I'm guessing -transformation to axis something?

                                        I will never get to experiment with NEW features!!!

                                        It put the ver 1.4 update up anyway. Think it's better than it was before.

                                        1 Reply Last reply Reply Quote 0
                                        • S Offline
                                          sergey2402
                                          last edited by

                                          It's just great!
                                          I see - this is a very difficult job.
                                          But now I am a real bad guy. I see only flaws! πŸ˜•
                                          (I’m sorry 😳 )


                                          HatchLayer.jpg

                                          1 Reply Last reply Reply Quote 0
                                          • jolranJ Offline
                                            jolran
                                            last edited by

                                            Sergey. No need to feel bad. It's good if you report anything suspicious. β˜€

                                            The hatchgroup is created on Hatchlayer. The edges are created on the "active" layer.If you want ALL hatchline-geometry on "Hatchlayer". Just create one hatch(to add the hatchlayer). Delete it.
                                            Select Hatchlayer as active layer, then ALL lines will get to that layer.

                                            If we go back to the problem with hatchline alignment. Yesterday's update (TIG code)fixed the problem with ngons or to call it "asymmetrical" faces .

                                            I thought about this. I think the best solution(if doable) would be to do an additional edge selection.
                                            Where hatches get aligned to that edge. Something like if selection.contains edge, the vector will be created from that edge and override current solution. Eg if only face is selected hacthing will be done as current "on axis solution".

                                            I do not think this problem can be solved by an automatical solution(hope I'm wrong), cause faces can be created in so many different shapes. What edge should hatching be aligned to and so on..

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

                                            Advertisement