protected override void SolveInstance(IGH_DataAccess DA) { int inputCount = 8; var inputs = new IGH_Goo[inputCount]; for (int i = 0; i < inputCount; i++) { if (!DA.GetData(i, ref inputs[i])) { return; } } var target = (inputs[0] as GH_Target).Value as JointTarget; var attributes = new ExtrusionAttributes() { NozzleDiameter = (inputs[1] as GH_Number).Value, LayerHeight = (inputs[2] as GH_Number).Value, SafeZOffset = (inputs[3] as GH_Number).Value, SafeSpeed = target.Speed, ApproachSpeed = (inputs[4] as GH_Speed).Value, ExtrusionSpeed = (inputs[5] as GH_Speed).Value, SafeZone = target.Zone, ApproachZone = (inputs[6] as GH_Zone).Value, ExtrusionZone = (inputs[7] as GH_Zone).Value, Tool = target.Tool, Frame = target.Frame, Home = target.Joints }.Initialize(); DA.SetData(0, new GH_ExtrusionAttributes(attributes)); }
public ExternalExtrusionToolpath(IList <Polyline> polylines, ExtrusionAttributes attributes, double extrusionFactor, double suckBack, double startDistance, double loopDistance) { _att = attributes; _extrusionFactor = extrusionFactor; _suckBack = -suckBack; _startDistance = startDistance; _loopDistance = loopDistance; var robotPosition = Point3d.Origin; robotPosition.Transform(Transform.PlaneToPlane(_att.Frame.Plane, Plane.WorldXY)); var paths = polylines.Select(p => ToTargets(p, robotPosition)).ToList(); CreateTargets(paths); }
public ExternalExtrusionToolpath(List <List <Plane> > locations, List <List <double> > lengths, ExtrusionAttributes attributes, double extrusionFactor, double suckBack, double startDistance, double loopDistance) { _att = attributes; _extrusionFactor = extrusionFactor; _suckBack = -suckBack; _startDistance = startDistance; _loopDistance = loopDistance; var paths = new List <List <SimpleTarget> >(locations.Count); if (locations.Count != lengths.Count) { throw new ArgumentException("Number of paths in locations and lengths don't match."); } if (locations.Count == 0) { throw new ArgumentException("There should be more than one path."); } for (int i = 0; i < locations.Count; i++) { if (locations[i].Count != lengths[i].Count) { throw new ArgumentException($"Locations and lengths in path {i} don't match."); } int pathCount = locations[0].Count; var path = new List <SimpleTarget>(pathCount); for (int j = 0; j < locations[0].Count; j++) { path.Add(new SimpleTarget() { Location = locations[i][j], Length = lengths[i][j] }); } paths.Add(path); } CreateTargets(paths); }