sketchucation logo sketchucation
    • Login
    ⚠️ Attention | Having issues with Sketchucation Tools 5? Report Here

    Face.classify_point - compare results?

    Scheduled Pinned Locked Moved Developers' Forum
    25 Posts 5 Posters 1.6k Views 5 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.
    • Dan RathbunD Offline
      Dan Rathbun
      last edited by

      Ok, so what he's doing should read as:

      if ii.classify_point(curPoint) & Sketchup::Face::PointOnFace != Sketchup::Face::PointUnknown
      πŸ€“

      I'm not here much anymore.

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

        Or perhaps more transparently the full list from the API is

        * 0: Sketchup::Face::PointUnknown (indicates an error),
        * 1: Sketchup::Face::PointInside (point is on the face, not in a hole),
        * 2: Sketchup::Face::PointOnVertex (point touches a vertex),
        * 4: Sketchup::Face::PointOnEdge (point is on an edge),
        * 16: Sketchup::Face::PointOutside (point outside the face or in a hole),
        * 32: Sketchup::Face::PointNotOnPlane (point off the face's plane). So you can test for several possibilities by Constant - for 'on the face itself' ...
        

        if ii.classify_point(curPoint)==Sketchup::Face::PointInside etc...
        Or if you wanted it to be only on a vertex you'd use ...
        if ii.classify_point(curPoint)==Sketchup::Face::PointOnVertex etc...

        TIG

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

          Correction: the API doc's list is completely foobar...
          the proper list [by Brad] is [probably πŸ˜’ ]

          • 0: Sketchup::Face::PointUnknown (indicates an error)
          • 1: Sketchup::Face::PointInside (point is on the face, not in a hole)
          • 2: Sketchup::Face::PointOnEdge (point is on an edge)
          • 4: Sketchup::Face::PointOnVertex (point touches a vertex)
          • 8: Sketchup::Face::PointOutside (point is outside the face or in a hole)
          • 16: Sketchup::Face::PointNotOnPlane (point is off the face's plane) There is no 'PointOnFace' ??

          TIG

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            @tig said:

            Correction: the API doc's list is completely foobar...
            the proper list [by Brad] is [probably πŸ˜’ ]

            • 0: Sketchup::Face::PointUnknown (indicates an error)
            • 1: Sketchup::Face::PointInside (point is on the face, not in a hole)
            • 2: Sketchup::Face::PointOnEdge (point is on an edge)
            • 4: Sketchup::Face::PointOnVertex (point touches a vertex)
            • 8: Sketchup::Face::PointOutside (point is outside the face or in a hole)
            • 16: Sketchup::Face::PointNotOnPlane (point is off the face's plane) There is no 'PointOnFace' ??

            His list of constants and values is not relevant for SU8M1

            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

              So... thomthom what IS the list ?
              Why the secrecy?
              I now think it should be from Sketchup::Face.constants - which returns
              ["PointOutside", "PointInside", "PointOnFace", "PointUnknown", "PointOnEdge", "PointNotOnPlane", "PointOnVertex"]
              I assume in the order they list here and not related to any 'integer' value they represent I THINK they are now...

              PointOutside= Outside the outer loop edges of the face, but perhaps still on its plane, BUT does a hole count as 'outside' ?
              PointInside= Inside the outer loop edges of the face, but perhaps in a hole so not 'onface' ?
              PointOnFace= On the face - different from PointInside - as it cannot be in a hole - it is therefore within all loops ?
              PointUnknown= An Error - invalid point
              PointOnEdge= On an edge belonging to the face
              PointNotOnPlane= A valid point, but it's NOT on the plane of the face
              PointOnVertex= On a vertex belonging to the face
              This really is a complete mess ! Bitwise was much more logical that f'ing 'constant names' πŸ˜’

              TIG

              1 Reply Last reply Reply Quote 0
              • thomthomT Offline
                thomthom
                last edited by

                I think the list is the one listed in the docs now. There was an old value listed before, which I think where never returned. And SU8M1 introduced a new value.

                What appear to have changed in the docs is that before it said that the comparisons had to be done bitwise.
                I am a bit confused about best practice myself. I only found out about the constants when they released M1. The info has been sparse and I've been doing a bit of trial and error to get things working.

                Thomas Thomassen β€” SketchUp Monkey & Coding addict
                List of my plugins and link to the CookieWare fund

                1 Reply Last reply Reply Quote 0
                • thomthomT Offline
                  thomthom
                  last edited by

                  You can use the WayBack Machine to see the older versions of the docs:
                  http://waybackmachine.org/*/http://code.google.com/apis/sketchup/docs/ourdoc/face.html#classify_point

                  I had basically no info.... 😞

                  Not sure where I got the bitwise comparison from... πŸ˜•

                  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

                    The current API lists 6 Constants [Brad has 7] BUT the .constants method returns 7 that aren't the same as Brad's 7 so something is wrong soemwhere?? aaargh! πŸ˜’ My post http://forums.sketchucation.com/viewtopic.php?p=316191#p316191 list what I think might be right [today at least 😞 ] ???

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • thomthomT Offline
                      thomthom
                      last edited by

                      πŸ‘

                      Cheers TheDro

                      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

                        TheDro
                        Thanks, could you perhaps publish a definitive list in the Face API note explaining which is what and that there is [possibly] an obsolete constant too... Comparing and contrasting with the current text and the Brad's follow up notes too... πŸ˜’

                        TIG

                        1 Reply Last reply Reply Quote 0
                        • T Offline
                          TheDro
                          last edited by

                          Alright, let's try to put this one to rest πŸ˜›. I just tested it with a face on the xy plane with a hole in it and here are the results(and code):

                          puts "On Face(Inside); " + face.classify_point([0.25,0.25,0]).to_s #1
                          puts "On Vertex; " + face.classify_point([0,0,0]).to_s             #2
                          puts "On Edge; " + face.classify_point([0.25,0,0]).to_s            #4
                          puts "Outside; " + face.classify_point([-0.5,0,0]).to_s            #16
                          puts "In Hole; " + face.classify_point([0.6,0.6,0]).to_s           #16
                          puts "NotOnPlane; " + face.classify_point([0,0,1]).to_s            #32
                          

                          So this means that whether the point is in a hole or outside the face, the return value is the same (16). I think that answers TIG's question about the matter. The OnFace constant (which is 😎 is not in the API nor am I able to choose a point that returns the value. It could therefore be obsolete. If someone can think of another case that I missed, let me know (other than an error (0) of course).

                          Oh and just a quick note. The return value of the classify_point method will be one of the above values and NOT a sum of multiple values. I mention this because I expected a point on an vertex to return 6 or 7 because a point on a vertex is on the face and an edge at the same time, but this is not the case.

                          As for how I'll write my code, well there are two ways of doing and I think this would be the shortest way (syntactically) of doing it:

                          if (face.classify_point(point)&(Sketchup;;Face;;PointInside+Sketchup;;Face;;PointOnVertex+Sketchup;;Face;;PointOnEdge))!=0
                          

                          As long as those constants remain powers of 2, the code should work although to be safe I might just go with if((p==a) or (p==b) or (p==c)), which doesn't require any bitwise operations (I just find the bitwise way of doing cool since I've come to understand it recently πŸ˜›).

                          EDIT:
                          As requested, here is the definitive list of the constants:

                          0: Sketchup::Face::PointUnknown (error)
                          1: Sketchup::Face::PointInside (somewhere on the face)
                          2: Skethcup::Face::PointOnVertex (on one of the vertices of the face)
                          4: Skethcup::Face::PointOnEdge (on one of the edges of the face, vertices do not count since they return 2)
                          8: Sketchup::Face::PointOnFace (likely obsolete)
                          16:Sketchup::Face::PointOutside (on plane of the face but not on face; this includes holes)
                          32:Sketchup::Face::PointNotOnPlane (not on the face's plane)

                          Remember that this is for version 8.0 and that the constants should be used instead of the numerical values for forward compatibility.

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

                            TheDro has edited the list provided a few posts back with 'all know data'...
                            Unexpectedly it agrees exactly with the list in the main API -[except for that omitting '8 PointOnFace' as it is obsolete anyway - why is it in the constants still ? Have Google just forgotten to remove it ?]
                            Brad's list in the API notes is therefore wrong [probably].
                            I've suggested to TheDro to add another note to the API docs to state what seems to be the correct situation with v8M1 πŸ˜’

                            TIG

                            1 Reply Last reply Reply Quote 0
                            • thomthomT Offline
                              thomthom
                              last edited by

                              I digged in my emails - here's a quote from a Googler:

                              @unknownuser said:

                              Here is a comment from our defect database about this issue

                              "..I learned that the Sketchup::Face::PointOnFace constant is never used, so I just removed it from the docs.."

                              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

                                Out of interest I wrote this snippet
                                Sketchup.constants.sort.each{|e|puts e;eval("Sketchup::"+e+".constants").each{|c|puts "\t"+c};puts}
                                which prints out all Sketchup 'constants' - as this on my system at least [e.g. I expect Geodesic is an extra type added by a script...] There aren't that many 'constants' found this way...

                                AppObserver
                                
                                ArcCurve
                                
                                AttributeDictionaries
                                
                                AttributeDictionary
                                
                                Behavior
                                
                                Camera
                                
                                Color
                                
                                ComponentDefinition
                                
                                ComponentInstance
                                
                                Console
                                
                                ConstructionLine
                                
                                ConstructionPoint
                                
                                Curve
                                
                                DefinitionList
                                
                                DefinitionObserver
                                
                                DefinitionsObserver
                                
                                Drawingelement
                                
                                Edge
                                
                                EdgeUse
                                
                                Entities
                                
                                EntitiesObserver
                                
                                Entity
                                
                                EntityObserver
                                
                                Face
                                	PointOutside
                                	PointInside
                                	PointOnFace
                                	PointUnknown
                                	PointOnEdge
                                	PointNotOnPlane
                                	PointOnVertex
                                
                                Geodesic
                                	TETRA_S
                                	SQRT2
                                	PRIMITIVES
                                	TETRA_R
                                	GOLDEN_MEAN
                                	TETRA_Q
                                	TETRA_T
                                	SQRT3
                                
                                Group
                                
                                HLR
                                
                                Image
                                
                                Importer
                                	ImportFail
                                	ImportFileNotFound
                                	ImportSuccess
                                	ImporterNotFound
                                	ImportCanceled
                                
                                InputPoint
                                
                                InstanceObserver
                                
                                Layer
                                
                                Layers
                                
                                LayersObserver
                                
                                Loop
                                
                                Material
                                
                                Materials
                                
                                MaterialsObserver
                                
                                Menu
                                
                                Model
                                
                                ModelObserver
                                
                                OptionsManager
                                
                                OptionsProvider
                                
                                OptionsProviderObserver
                                
                                Page
                                
                                Pages
                                	UnitsPixels
                                	ImageLinked
                                	UnitsNormalizedY
                                	ImageEmbeddedAndLinked
                                	UnitsNormalizedX
                                	ImageEmbedded
                                
                                PagesObserver
                                
                                PickHelper
                                
                                RenderingOptions
                                	ROPAssign
                                	ROPSetDisplayInstanceAxes
                                	ROPSetFogHint
                                	ROPSetDisplaySketchAxes
                                	ROPSetGroundColor
                                	ROPSetExtendEdges
                                	ROPSetLineExtension
                                	ROPSetDepthQueWidth
                                	ROPSetSectionDefaultCutColor
                                	ROPSetFogUseBkColor
                                	ROPSetTexture
                                	ROPSetHighlightColor
                                	ROPEditComponent
                                	ROPSetModelTransparency
                                	ROPSetDrawUnderground
                                	ROPSetFaceColorMode
                                	ROPSetFogDist
                                	ROPSetLockedColor
                                	ROPSetSkyColor
                                	ROPSetJitterEdges
                                	ROPSetExtendLines
                                	ROPSetLineEndEdges
                                	ROPSetSectionInactiveColor
                                	ROPSetDisplayDims
                                	ROPSetTransparencyObsolete
                                	ROPSetForegroundColor
                                	ROPDrawHidden
                                	ROPSetEdgeType
                                	ROPSetDrawGround
                                	ROPSetProfileWidth
                                	ROPSetFogColor
                                	ROPSetProfilesOnlyEdges
                                	ROPSetHideConstructionGeometry
                                	ROPSetEdgeColorMode
                                	ROPSetDisplayColorByLayer
                                	ROPSetDepthQueEdges
                                	ROPSetSectionActiveColor
                                	ROPSetDisplayText
                                	ROPSetRenderMode
                                	ROPSetBackgroundColor
                                	ROPSetSectionDisplayMode
                                	ROPSetFaceColor
                                	ROPSetDrawHorizon
                                	ROPSetProfileEdges
                                	ROPSetDisplayFog
                                	ROPSetLineEndWidth
                                	ROPSetSectionCutWidth
                                	ROPSetEdgeDisplayMode
                                	ROPSetConstructionColor
                                	ROPTransparencySortMethod
                                	ROPSetMaterialTransparency
                                	ROPSetGroundTransparency
                                
                                RenderingOptionsObserver
                                
                                SectionPlane
                                
                                Selection
                                
                                SelectionObserver
                                
                                ShadowInfo
                                
                                ShadowInfoObserver
                                
                                Style
                                
                                Styles
                                
                                Text
                                
                                Texture
                                
                                TextureWriter
                                
                                Tools
                                
                                ToolsObserver
                                
                                UVHelper
                                
                                Vertex
                                
                                View
                                
                                ViewObserver
                                
                                ["AppObserver", "ArcCurve", "AttributeDictionaries", "AttributeDictionary", "Behavior", "Camera", "Color", "ComponentDefinition", "ComponentInstance", "Console", "ConstructionLine", "ConstructionPoint", "Curve", "DefinitionList", "DefinitionObserver", "DefinitionsObserver", "Drawingelement", "Edge", "EdgeUse", "Entities", "EntitiesObserver", "Entity", "EntityObserver", "Face", "Geodesic", "Group", "HLR", "Image", "Importer", "InputPoint", "InstanceObserver", "Layer", "Layers", "LayersObserver", "Loop", "Material", "Materials", "MaterialsObserver", "Menu", "Model", "ModelObserver", "OptionsManager", "OptionsProvider", "OptionsProviderObserver", "Page", "Pages", "PagesObserver", "PickHelper", "RenderingOptions", "RenderingOptionsObserver", "SectionPlane", "Selection", "SelectionObserver", "ShadowInfo", "ShadowInfoObserver", "Style", "Styles", "Text", "Texture", "TextureWriter", "Tools", "ToolsObserver", "UVHelper", "Vertex", "View", "ViewObserver"]
                                

                                TIG

                                1 Reply Last reply Reply Quote 0
                                • thomthomT Offline
                                  thomthom
                                  last edited by

                                  RenderingOptions got contants!! 😲

                                  One can actually use constants - that refer to integers (I assume indexes) to refer to options. That should be more efficient than strings.

                                  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

                                    @thomthom said:

                                    RenderingOptions got contants!! 😲
                                    One can actually use constants - that refer to integers (I assume indexes) to refer to options. That should be more efficient than strings.

                                    Yes it's weird ?
                                    I can't really see what half of these do...

                                    TIG

                                    1 Reply Last reply Reply Quote 0
                                    • thomthomT Offline
                                      thomthom
                                      last edited by

                                      hm... yea - the names are odd. Might just be internal constants. Which would explain why they are not documented.

                                      Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                      List of my plugins and link to the CookieWare fund

                                      1 Reply Last reply Reply Quote 0
                                      • T Offline
                                        TheDro
                                        last edited by

                                        Alright so I posted my results on the api but is it possible to edit it in case there is a mistake?(not that I've found one) Oh and it's posted as anonymous.... whatever. πŸ˜›

                                        1 Reply Last reply Reply Quote 0
                                        • 1
                                        • 2
                                        • 1 / 2
                                        • First post
                                          Last post
                                        Buy SketchPlus
                                        Buy SUbD
                                        Buy WrapR
                                        Buy eBook
                                        Buy Modelur
                                        Buy Vertex Tools
                                        Buy SketchCuisine
                                        Buy FormFonts

                                        Advertisement