private string Traverse(Point3d from, Line line, GCodeConfig config) { string gcode = ""; if (from.DistanceTo(line.StartPoint.Add(offset)) <= config.Tolerance) { gcode += $"G01 {config.Formatter.Format2D(line.EndPoint.Add(offset))};\n"; foreach (ObjectId id in Utils.SelectAroundPoint(line.EndPoint.Add(offset), config)) { if (objectIds.Contains(id)) { objectIds.Remove(id); foreach (Type type in config.AvailableTypes) { try { gcode += Traverse(line.EndPoint.Add(offset), (dynamic)Convert.ChangeType(transaction.GetObject(id, OpenMode.ForRead), type), config); } catch (Exception) { } } } } gcode += (!config.AdditionalArguments.Contains("--no-return")) ? $"G01 {config.Formatter.Format2D(line.StartPoint.Add(offset))};\n" : ""; } else { gcode += $"G01 {config.Formatter.Format2D(line.StartPoint.Add(offset))};\n"; foreach (ObjectId id in Utils.SelectAroundPoint(line.StartPoint.Add(offset), config)) { if (objectIds.Contains(id)) { objectIds.Remove(id); foreach (Type type in config.AvailableTypes) { try { gcode += Traverse(line.StartPoint.Add(offset), (dynamic)Convert.ChangeType(transaction.GetObject(id, OpenMode.ForRead), type), config); } catch (Exception) { } } } } gcode += (!config.AdditionalArguments.Contains("--no-return")) ? $"G01 {config.Formatter.Format2D(line.EndPoint.Add(offset))};\n" : ""; } return(gcode); }
internal override string Process(ObjectIdCollection objects, GCodeConfig config) { Utils.Init(out Editor editor); offset = editor.CurrentUserCoordinateSystem.Translation; offset = offset.Negate(); Point3d point = editor.GetPoint("Select starting point: ").Value; objectIds = objects; foreach (ObjectId id in objectIds) { Utils.Explode(id, ref objectIds); } using (this.transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()) return(Traverse(point, config)); }
internal override ObjectIdCollection Select(GCodeConfig config) { Utils.Init(out Editor editor); PromptSelectionResult res = editor.GetSelection(new PromptSelectionOptions() { MessageForAdding = "Select objects: " }, new SelectionFilter(config.Filter)); if (!(res.Status == PromptStatus.OK)) { return(new ObjectIdCollection()); } return(new ObjectIdCollection(res.Value.GetObjectIds())); }
private string Traverse(Point3d point, GCodeConfig config) { string gcode = ((!config.AdditionalArguments.Contains("--no-entry")) ? $"G00 {config.Formatter.Format2D(point.Add(new Vector3d(0, 1, 0)))};\n" : "") + $"G01 {config.Formatter.Format2D(point)};\n"; foreach (ObjectId id in Utils.SelectAroundPoint(point, config)) { if (objectIds.Contains(id)) { objectIds.Remove(id); foreach (Type type in config.AvailableTypes) { try { gcode += Traverse(point, (dynamic)Convert.ChangeType(transaction.GetObject(id, OpenMode.ForRead), type), config); } catch (Exception) { } } } } gcode += (!config.AdditionalArguments.Contains("--no-return")) ? $"G01 {config.Formatter.Format2D(point)};\n" : ""; gcode += (!config.AdditionalArguments.Contains("--no-entry")) ? $"G01 {config.Formatter.Format2D(point.Add(new Vector3d(0, 1, 0)))};\n" : ""; return(gcode); }
internal abstract string Process(ObjectIdCollection objects, GCodeConfig config);
internal abstract ObjectIdCollection Select(GCodeConfig config);