Feature script CANNOT_RESOLVE_ENTITIES error

joe_gatling
joe_gatling Member Posts: 3 ✭✭
Hello, I am very new to feature script I am writing a feature script that will automatically add holes to a part at a fixed spacing. The goal is to pass a line along which the holes should be cut, and the spacing desired and have the script decide how many holes will fit, and how to center them along the line.  I have the logic of the hole placement working, but the final boolean to actually subtract them from my part is giving me a "CANNOT_RESOLVE_ENTITIES" error.  I am pretty advanced in other programming languages like c#, but the concepts involved in FS are really giving me a headache.

The document I am working on is here: https://cad.onshape.com/documents/1bf535513ae3dcbf66a9e1ae/w/949a41da612184a3bb92d3ac/e/1fb9668c48c8b413d51dc58b

When regenerating, the opBoolean line at the bottom throws the error.  Any help would be appreciated.

The code is as follows:
FeatureScript 1150;
import(path : "onshape/std/geometry.fs", version : "1150.0");

annotation { "Feature Type Name" : "Connection Holes" }
export const myFeature = defineFeature(function(context is Context, id is Id, definition is map)
    precondition
    {
        annotation { "Name" : "Hole Diameter" }
        isLength(definition.holeDiameter, LENGTH_BOUNDS);    
        
        annotation { "Name" : "Hole Depth" }
        isLength(definition.holeDepth, LENGTH_BOUNDS);    
        
        annotation { "Name" : "Spacing" }
        isLength(definition.spacing, LENGTH_BOUNDS);
        
        annotation { "Name" : "Edges", "Filter" : EntityType.EDGE && GeometryType.LINE}
        definition.lines is Query;  
        
        annotation { "Name" : "Merge scope", "Filter" : EntityType.BODY && BodyType.SOLID }
        definition.mergeScope is Query;
        
    }
    {
        const lines = evaluateQuery(context, definition.lines);
         
        for (var line in lines) 
        { 
            var length = evLength(context, {
                    "entities" : line
            });
            
            var numberOfHoles is number = floor(length / definition.spacing);
            var tPerHole is number = definition.spacing / length;
            var remainingT is number = 1.0 - (tPerHole * numberOfHoles);
            
            // debug(context, "Length: " ~ length);            
            // debug(context, "Holes: " ~ numberOfHoles);
            // debug(context, "t Per Hole: " ~ tPerHole);
            // debug(context, "test: " ~ (remainingT + (tPerHole * numberOfHoles)));

            var sketchPlane = evOwnerSketchPlane(context, {
                    "entity" : line
            });
            
            var normal = sketchPlane.normal;            
            var baseId is Id = id + "cylinder";
            
            for(var i = 0; i <= numberOfHoles; i += 1)
            {
                var t = remainingT/2.0 + tPerHole * i;
                
                var point = evEdgeTangentLine(context, 
                {
                    "edge" : line,
                    "parameter" : t
                }).origin;
                
                fCylinder(context, baseId + i, {
                        "topCenter" : point,
                        "bottomCenter" : point - normal * definition.holeDepth,
                        "radius" : definition.holeDiameter/2.0
                });
            }
            
            debug(context, qCreatedBy(baseId, EntityType.BODY));
            
            opBoolean(context, id + "boolean1", {
                    "tools" : qCreatedBy(baseId, EntityType.BODY),
                    "targets" : definition.mergeScope,
                    "operationType" : BooleanOperationType.SUBTRACTION
            });
        }
    });


Best Answer

  • joe_gatling
    joe_gatling Member Posts: 3 ✭✭
    Answer ✓
    OMG.  Never mind.  I turns out I didn't have any entities defined in definition.mergeScope so there were no targets to subtract from.   :#

Answers

  • joe_gatling
    joe_gatling Member Posts: 3 ✭✭
    Answer ✓
    OMG.  Never mind.  I turns out I didn't have any entities defined in definition.mergeScope so there were no targets to subtract from.   :#