• Login
sketchucation logo sketchucation
  • Login
ℹ️ GoFundMe | Our friend Gus Robatto needs some help in a challenging time Learn More

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

Scheduled Pinned Locked Moved Plugins
360 Posts 41 Posters 228.5k 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.
  • T Offline
    TIG Moderator
    last edited by 23 Jul 2011, 15:10

    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
    • J Offline
      jolran
      last edited by 23 Jul 2011, 16:05

      @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
      • T Offline
        TIG Moderator
        last edited by 23 Jul 2011, 16:21

        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
        • J Offline
          jolran
          last edited by 23 Jul 2011, 16:59

          @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
          • J Offline
            jolran
            last edited by 23 Jul 2011, 17:18

            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
            • J Offline
              jolran
              last edited by 23 Jul 2011, 17:24

              Works with holes..


              test forVer1.4.jpg

              1 Reply Last reply Reply Quote 0
              • T Offline
                TIG Moderator
                last edited by 23 Jul 2011, 17:34

                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
                • J Offline
                  jolran
                  last edited by 23 Jul 2011, 17:43

                  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
                  • T Offline
                    TIG Moderator
                    last edited by 23 Jul 2011, 17:56

                    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
                    • J Offline
                      jolran
                      last edited by 23 Jul 2011, 18:06

                      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 23 Jul 2011, 21:28

                        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
                        • J Offline
                          jolran
                          last edited by 24 Jul 2011, 07:17

                          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
                          • S Offline
                            sergey2402
                            last edited by 24 Jul 2011, 07:35

                            Angle of Hatching


                            HatchRotation.jpg

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

                              That is true Sergey!

                              Should be an relativley easy fix. For TIG that is πŸ˜„ For me, everything takes time..

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

                                Hmm. GRRRRoin 😠
                                The problem from yesterday is worse than I thought. Linehatch direction gets switched in different axis.
                                That is probably what TIG was reffering to. In my over-enthusiastic mood I did not notice that.

                                So my only conclusion is that an selected edge MUST be included in the calculation of hatch.angle.

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

                                  Trying something. Comments are VERY welcomed. Have selected the face and 1 edge.

                                  Can retrieve the edge like this.

                                  @h_edge=ss if ss.class==Sketchup;;Edge
                                  

                                  And if using the edges points to make a vector, I've tried @h_edge.line. Did not work. This does not work either.

                                  pt=@h_edge.start
                                  p1=@h_edge.end
                                  ve=pt.vector_to(p1)
                                  

                                  Main goal is to make a condition: If an edge+face is selected run this code. If only face is selected run the axis code.
                                  Of course only 1 edge can be selected.
                                  Bad idea?

                                  1 Reply Last reply Reply Quote 0
                                  • T Offline
                                    TIG Moderator
                                    last edited by 24 Jul 2011, 10:01

                                    The problem with the idea is that currently it processes all of the faces in a selection, if you have one edge selected it won't necessarily lie on the plane every face processed ?

                                    My way uses the x-axis [usually] to determine the start vector [projected onto the face's plane] from which you angle off the hatching edges...

                                    TIG

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

                                      Ahh, you mean multiple face selection? Yes I see, that will not work of course. πŸ˜•
                                      I don't see it as a big limitation that only 1 face could be processed at each time?
                                      Or faces on the same plane, wich is probably the most common case?

                                      Edges get drawn a bit irregular atm.


                                      crossed.jpg

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

                                        If selecting face and edge I can only get an array, not the edge as an individual edge selection? 😞
                                        Even if doing a ==Sketchup::Edge thingy..
                                        Must I use a selection observer for this?
                                        Would be fun if I could even try this method out, but stuck on basic things..

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

                                          No complications like observers needed.
                                          To pick one face and one edge from the selection use
                                          ss=model.selection face=nil edge=nil faces=[] edges=[] ss.each{|e| if e.class==Sketchup::Face faces << e end if e.class==Sketchup::Edge edges << e end } face=faces[0]if faces edge=edges[0]if edges
                                          This takes the first face and first edge it comes across in the selection and ignores all others [if there are any].
                                          You then need a trap if there's no face selected
                                          if not face UI.messagebox("Select a Face you dolt!") return nil end
                                          and
                                          ` if not edge

                                          choose 'edge' by other means or error message again

                                          endYou now process 'face' just the once and not 'each face in faces'... If you want to be thorough report the user has picked more than one face or edge if faces[1]
                                          UI.messagebox("Select ONE Face - only the 1st selected Face was processed - Twit!")
                                          return nil
                                          end
                                          if edges[1]
                                          UI.messagebox("Select either NO or ONE Edge - only the 1st selected Edge was used - Fool!")
                                          return nil
                                          end`
                                          etc etc...

                                          TIG

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

                                          Advertisement