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.
    • TIGT Online
      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 Online
          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 Online
                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 Online
                    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 Online
                        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 Online
                            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 Online
                                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