public static void ImportPattern(this Document doc, string name, List <string> lines) { using (Transaction t = new Transaction(doc, "Create Grids")) { t.Start(); List <FillGrid> grids = new List <FillGrid>(); FillPattern pat = new FillPattern(name, FillPatternTarget.Model, FillPatternHostOrientation.ToHost); foreach (string line in lines) { FillGrid grid = new FillGrid(); grid.Angle = double.Parse(line.Split(',')[0]) * Math.PI / 180; grid.Origin = new UV(double.Parse(line.Split(',')[1]) / 12, double.Parse(line.Split(',')[2]) / 12); grid.Shift = double.Parse(line.Split(',')[3]) / 12; grid.Offset = double.Parse(line.Split(',')[4]) / 12; var segments = new List <double>(); segments.Add(Math.Abs(double.Parse(line.Split(',')[5])) / 12); segments.Add(Math.Abs(double.Parse(line.Split(',')[6])) / 12); grid.SetSegments(segments); grids.Add(grid); } pat.SetFillGrids(grids); FillPatternElement fpe = FillPatternElement.Create(doc, pat); t.Commit(); } }
/// <summary> /// Create a fillgrid /// </summary> /// <param name="origin"></param> /// <param name="offset"></param> /// <param name="angle"></param> /// <param name="shift"></param> /// <param name="segments"></param> /// <returns></returns> private FillGrid CreateGrid(UV origin, double offset, double angle, double shift, params double[] segments) { FillGrid fillGrid = new FillGrid(); // The arguments: origin, offset (vertical distance between lines), // angle, shift (delta between location of start point per line) // The last two arguments are the segments: e.g. 1.0 units on, // 0.1 units off (units are Revit units (ft)) fillGrid.Origin = origin; fillGrid.Offset = offset; fillGrid.Angle = angle; fillGrid.Shift = shift; List <double> segmentsList = new List <double>(); foreach (double d in segments) { segmentsList.Add(d); } fillGrid.SetSegments(segmentsList); return(fillGrid); }
private bool AssignFillGridsFromString(string[] grids, double scale, double rotationAngle) { var newFillGrids = new List <FillGrid>(); foreach (string s in grids) { if (string.IsNullOrEmpty(s.Trim())) { continue; } string[] segs = s.Split(','); if (segs.Count() < 5) { return(false); } var f = new FillGrid(); List <double> lineSegs = new List <double>(); if (!double.TryParse(segs[0], out var angle)) { return(false); } if (!double.TryParse(segs[1], out var x)) { return(false); } if (!double.TryParse(segs[2], out var y)) { return(false); } if (!double.TryParse(segs[3], out var shift)) { return(false); } if (!double.TryParse(segs[4], out var offset)) { return(false); } for (int i = 5; i < segs.Length; i++) { if (!double.TryParse(segs[i], out var individualSeg)) { return(false); } individualSeg *= scale; lineSegs.Add(Math.Abs(individualSeg.ToFeet())); } x *= scale; y *= scale; shift *= scale; offset *= scale; angle += rotationAngle; f.Angle = angle.ToRad(); f.Origin = new UV(x.ToFeet(), y.ToFeet()); f.Shift = shift.ToFeet(); f.Offset = offset.ToFeet(); f.SetSegments(lineSegs); newFillGrids.Add(f); } fillPattern.SetFillGrids(newFillGrids); return(true); }