public SolverGeometricObject ExtractGeometry(Node node)
        {
            if (!SolverGeometryExtracter.HasShapeOrInteractive(node))
            {
                return(null);
            }
            var functionName = FunctionUtils.GetFunctionName(node);

            if (string.IsNullOrEmpty(functionName))
            {
                return(null);
            }
            if (IsHidden(node))
            {
                return(null);
            }
            SolverGeometryExtracter extracter;
            var tryExtracter = GeometryExtracters.TryGetValue(functionName, out extracter);

            return(!tryExtracter
                       ? _genericExtracter.ExtractSolverGeometry(node)
                       : extracter.ExtractSolverGeometry(node));
        }
 private void RegisterExtracter(string shapeType, SolverGeometryExtracter extracter)
 {
     GeometryExtracters[shapeType] = extracter;
 }