예제 #1
0
        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);
        }
예제 #3
0
        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);
        }