evOwnerSketchPlane can't figure out a sketch's plane

gregory_tu
gregory_tu Member Posts: 6 EDU
Doc Link: https://cad.onshape.com/documents/e746e5a1af6ab69016ffd94f/w/081cbbc49abd4344596a9144/e/a9ac389edf3d50f310bc8113
(At bottom of featurescript is where I've been trying to get it to work)

I made a ridged tab feature that could add a little tab connection for 3dp parts, but when I try to have evOwnerSketchPlane evaluate a sketch's plane that was placed on an inside edge, on the inside of a cylindrical face, instead of on the outside of a cylindrical pin head, it says it cannot resolve (@evOwnerSketchPlane: CANNOT_RESOLVE_PLANE). This situation should be the same except for the faces around the edge, but the edge itself should still be perfectly circular, and planar, so I don't know why it now can't figure it out as I am still directly referencing what created the sketch.

Best Answer

  • NeilCooke
    NeilCooke Moderator, Onshape Employees Posts: 6,116 image
    edited April 2024 Answer ✓
    You were querying the sketch outside the loop, so moved it inside and changed your id hierarchy:

    for (i = 0; i < size(pinHeadEdge.subqueries); i += 1)
                {
                    var sketchPlane = evPlanarEdge(context, { "edge" : qNthElement(pinHeadEdge, i) });
    
                    var slitSketch = newSketchOnPlane(context, id + i + "slitSketch12", {
                            "sketchPlane" : sketchPlane
                        });
                    // Create new sketch on each pin edge plane
    
                    var circA = measureDiameter(context, {
                                "entity" : qNthElement(pinHeadEdge, i)
                            }) / meter / 2;
                    // Measure pin head diameter
    
                    var tabWidth = (definition.slitDepth / meter / definition.tabFlexMult) / (definition.ridgeSize / meter / 0.000396875);
    
                    var slitWidth = max(definition.ridgeSize * 2 / meter, circA - tabWidth * 2);
    
                    skRectangle(slitSketch, "slitRectangle", {
                                "firstCorner" : vector(-circA - definition.ridgeSize / meter, slitWidth) * meter,
                                "secondCorner" : vector(0, -slitWidth) * meter
                            });
    
                    skSolve(slitSketch);
                    // Solve sketch
    
                    opExtrude(context, id + i + "extrude12", {
                                "entities" : qSketchRegion(id + i + "slitSketch12"),
                                "direction" : sketchPlane.normal * -1,
                                "endBound" : BoundingType.BLIND,
                                "endDepth" : definition.slitDepth,
                            });
                }


    Senior Director, Technical Services, EMEA

Answers

  • NeilCooke
    NeilCooke Moderator, Onshape Employees Posts: 6,116 image
    edited April 2024 Answer ✓
    You were querying the sketch outside the loop, so moved it inside and changed your id hierarchy:

    for (i = 0; i < size(pinHeadEdge.subqueries); i += 1)
                {
                    var sketchPlane = evPlanarEdge(context, { "edge" : qNthElement(pinHeadEdge, i) });
    
                    var slitSketch = newSketchOnPlane(context, id + i + "slitSketch12", {
                            "sketchPlane" : sketchPlane
                        });
                    // Create new sketch on each pin edge plane
    
                    var circA = measureDiameter(context, {
                                "entity" : qNthElement(pinHeadEdge, i)
                            }) / meter / 2;
                    // Measure pin head diameter
    
                    var tabWidth = (definition.slitDepth / meter / definition.tabFlexMult) / (definition.ridgeSize / meter / 0.000396875);
    
                    var slitWidth = max(definition.ridgeSize * 2 / meter, circA - tabWidth * 2);
    
                    skRectangle(slitSketch, "slitRectangle", {
                                "firstCorner" : vector(-circA - definition.ridgeSize / meter, slitWidth) * meter,
                                "secondCorner" : vector(0, -slitWidth) * meter
                            });
    
                    skSolve(slitSketch);
                    // Solve sketch
    
                    opExtrude(context, id + i + "extrude12", {
                                "entities" : qSketchRegion(id + i + "slitSketch12"),
                                "direction" : sketchPlane.normal * -1,
                                "endBound" : BoundingType.BLIND,
                                "endDepth" : definition.slitDepth,
                            });
                }


    Senior Director, Technical Services, EMEA