Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape.

First time visiting? Here are some places to start:

1. Looking for a certain topic? Check out the categories filter or use Search (upper right).
2. Need support? Ask a question to our Community Support category.
3. Please submit support tickets for bugs but you can request improvements in the Product Feedback category.
4. Be respectful, on topic and if you see a problem, Flag it.

If you would like to contact our Community Manager personally, feel free to send a private message or an email.

# Is it possible to check if a point(x,y,z) is on a surface or in free space?

Member Posts: 9 EDU
i'm making a script that genrates some holes automatically.. I'll need to check if the polygon i'm extruding is in free space or on a surface? is that possible and how?
Tagged:

• Posts: 1,285
``````const distanceResult = evDistance(context, {"side0" : someFace, "extendSide0" : true, "side1" : somePoint});
if (distanceResult.distance < TOLERANCE.zeroLength)
{
// somePoint lies on the underlying surface of someFace
}
else
{
// somePoint does not lie on the underlying surface of someFace
}``````

'somePoint' can be a Query for a Vertex, a vector (like vector(1, 2, 3) * inch or the result of evVertexPoint), or even a Query for all the vertices of your polygon (the 'distance' will be the distance of the closest point, so by doing this you could tell if any of the points lie on the surface).

Jake Rosenfeld - Modeling Team

• Moderator, Onshape Employees, Developers Posts: 1,285
When you say 'Surface', do you mean a Query for a face?  If so you can use evDistance().  If the distance returned is less than 'TOLERANCE.zeroLength', than the point and face are touching.  If you use the 'extendSide<i>' option for evDistance, you can extend the input faces to their full (possibly infinite) underlying surface.

Jake Rosenfeld - Modeling Team
• Member Posts: 9 EDU
edited February 2018
Yes i mean the query of a face What would you have as input in evDistance? and how do i check a certain point and not the entire face?
• Moderator, Onshape Employees, Developers Posts: 1,285
``````const distanceResult = evDistance(context, {"side0" : someFace, "extendSide0" : true, "side1" : somePoint});
if (distanceResult.distance < TOLERANCE.zeroLength)
{
// somePoint lies on the underlying surface of someFace
}
else
{
// somePoint does not lie on the underlying surface of someFace
}``````

'somePoint' can be a Query for a Vertex, a vector (like vector(1, 2, 3) * inch or the result of evVertexPoint), or even a Query for all the vertices of your polygon (the 'distance' will be the distance of the closest point, so by doing this you could tell if any of the points lie on the surface).

Jake Rosenfeld - Modeling Team
• Member Posts: 9 EDU
This works, but i would like to check if the point is within the face of the body... i tried to remove the "extendSide" part but then no point lies on the surface..
• Moderator, Onshape Employees, Developers Posts: 1,285
@frederik_larsen108

Could you provide a URL for a document that has an example of the issue you're facing? It would be easier to answer if I could see what's going on.
Jake Rosenfeld - Modeling Team
• Moderator, Onshape Employees Posts: 2,175
@frederik_larsen108 ;Have you tried qContainsPoint?
Neil Cooke, Director of Technical Marketing, Onshape Inc.
• Onshape Employees, Developers, HDM Posts: 921
qContainsPoint should work.  Removing extendSide0 should also work.  I can see a couple of issues with the units: for side1, the units in your vector are already length units -- multiplying by meter turns them into area (that's incorrect, but it shouldn't fix the problem).  In the comparison to zeroLength, you divide by millimiter, whereas zeroLength tolerance is intended for meters.
If that doesn't help, try focusing on one of the points in your pointArray and displaying it and the points returned by evDistance using the debug function.
Ilya Baran \ Director, Architecture and FeatureScript \ Onshape Inc