/// <summary> /// Последовательность штрихов и пробелов типа линии /// </summary> /// <param name="ltype"></param> /// <param name="ltScale"></param> /// <returns></returns> public static List <double> GetLinePattern(LinetypeTableRecord ltype, double ltScale = 1) { List <double> pattern = new List <double>(); for (int i = 0; i < ltype.NumDashes; i++) { //Учтена возможность вставки подряд двух пробелов или двух штрихов double dash = ltype.DashLengthAt(i); if (dash != 0) { double dashValue = dash * ltScale; if (i != 0 && Math.Sign(pattern[i - 1]) == Math.Sign(dashValue)) { pattern[i - 1] += dashValue;//такой же знак как и у предыдущего => объединить в один } else { pattern.Add(dashValue);//новый штрих } } } if (pattern.Count == 0)//если данные не получены, то выдать патерн для сплошной линии { pattern.Add(1); } return(pattern); }
Stream(ArrayList data, LinetypeTableRecord rec) { data.Add(new Snoop.Data.ClassSeparator(typeof(LinetypeTableRecord))); data.Add(new Snoop.Data.String("Ascii Description", rec.AsciiDescription)); data.Add(new Snoop.Data.String("Comments", rec.Comments)); data.Add(new Snoop.Data.Bool("Is scaled to fit", rec.IsScaledToFit)); data.Add(new Snoop.Data.Distance("Pattern length", rec.PatternLength)); data.Add(new Snoop.Data.Int("Number of dashes", rec.NumDashes)); int i, len; len = rec.NumDashes; for (i = 0; i < len; i++) { data.Add(new Snoop.Data.CategorySeparator(string.Format("--- DASH [{0}] ---", i))); data.Add(new Snoop.Data.Distance("Length", rec.DashLengthAt(i))); data.Add(new Snoop.Data.ObjectId("Shape style", rec.ShapeStyleAt(i))); data.Add(new Snoop.Data.Int("Shape number at", rec.ShapeNumberAt(i))); data.Add(new Snoop.Data.Vector2d("Shape offset at", rec.ShapeOffsetAt(i))); data.Add(new Snoop.Data.Double("Shape scale at", rec.ShapeScaleAt(i))); data.Add(new Snoop.Data.Bool("Shape is UCS oriented at", rec.ShapeIsUcsOrientedAt(i))); data.Add(new Snoop.Data.Angle("Shape rotation at", rec.ShapeRotationAt(i))); try { data.Add(new Snoop.Data.String("Text at", rec.TextAt(i))); } catch (Autodesk.AutoCAD.Runtime.Exception e) { if (e.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.NotApplicable) { data.Add(new Snoop.Data.Exception("Text at", e)); } else { throw e; } } } }