//public void CalculateLocations(Element element, XYZ offset) //{ // var scale = 1 / VLConstraints.OrientFontSizeScale * VLConstraints.CurrentFontSizeScale; // var width = CSALocationType.GetLineWidth() * scale; // var height = 400 * scale; // var widthFoot = UnitHelper.ConvertToFoot(width, VLUnitType.millimeter); // var heightFoot = UnitHelper.ConvertToFoot(height, VLUnitType.millimeter); // var verticalFix = UnitHelper.ConvertToFoot(100, VLUnitType.millimeter) * scale; // var locationCurve = TargetType.GetLine(element); // UpdateVectors(locationCurve); // //线起始点 (中点) // LineStartLocation = (locationCurve.GetEndPoint(0) + locationCurve.GetEndPoint(1)) / 2; // //文本位置 start:(附着元素中点+线基本高度+文本高度*(文本个数-1)) end: start+宽 // //高度,宽度 取决于文本 // ParallelLinesLocations = new List<TextLocation>(); // TextLocations = new List<XYZ>(); // for (int i = Texts.Count() - 1; i >= 0; i--) // { // var start = LineStartLocation + (heightFoot + i * VLConstraints.CurrentFontHeight) * VerticalVector; // var end = start + widthFoot * ParallelVector; // ParallelLinesLocations.Add(new TextLocation(start, end)); // TextLocations.Add(CSALocationType.GetTextLocation(verticalFix, VerticalVector, start, end)); // } // //线终点 (最高的文本位置) // LineEndLocation = ParallelLinesLocations[0].Start; //} //public void CalculateLocations(Element element) //{ // CalculateLocations(element, new XYZ(0, 0, 0)); //} #endregion #region 线族的计算方案 public void CalculateLocations(Element element, FamilyInstance line, XYZ offset) { //数据准备 var locationCurve = TargetType.GetLine(element); var miniHeight = CurrentFontHeight * 2; UpdateVectors((locationCurve as Line)); //ParallelVector = VLLocationHelper.GetVectorByQuadrant((locationCurve as Line).Direction, QuadrantType.OneAndFour); //VerticalVector = VLLocationHelper.GetVectorByQuadrant(new XYZ(ParallelVector.Y, -ParallelVector.X, 0), QuadrantType.OneAndTwo); //计算线的定位位置 bool isRegenerate = offset != null; if (!isRegenerate) { LineLocation = (locationCurve.GetEndPoint(0) + locationCurve.GetEndPoint(1)) / 2; offset = new XYZ(0, 0, 0); LineHeight = UnitHelper.ConvertToFoot(1000, VLUnitType.millimeter); } else { LineLocation = locationCurve.Project(LineLocation + offset).XYZPoint; LineHeight = line.GetParameters(TagProperty.线高度1.ToString()).First().AsDouble() + VLLocationHelper.GetLengthBySide(offset, VerticalVector); LineHeight = LineHeight > miniHeight ? LineHeight : miniHeight;//确保最短长度有一个文字高度 } //高度,宽度 取决于文本 FontScale = 1 / VLConstraintsForCSA.OrientFontSizeScale * CurrentFontSizeScale; //LineWidth = UnitHelper.ConvertToFoot(CSALocationType.GetLineWidth() * FontScale, VLUnitType.millimeter); var verticalFix = CurrentFontHeight * VLConstraintsForCSA.TextSpace;; //偏移修正 为了显示更好 方便更改 var horizontalFix = UnitHelper.ConvertToFoot(50, VLUnitType.millimeter); //偏移修正 为了显示更好 方便更改 LineSpace = CurrentFontHeight * (1 + VLConstraintsForCSA.TextSpace); TextLocations = new List <XYZ>(); for (int i = Texts.Count() - 1; i >= 0; i--) { var start = LineLocation + (LineHeight + i * LineSpace) * VerticalVector; var end = start + LineWidth * ParallelVector; TextLocations.Add(CSALocationType.GetTextLocation(CurrentFontHeight, verticalFix, VerticalVector, horizontalFix, ParallelVector, start, end)); } }
public static XYZ GetTextLocation(this CSALocationType CSALocationType, double currentFontHeight, double verticalFix, XYZ verticalVector, double horizontalFix, XYZ horizontalVector, XYZ start, XYZ end) { return(CSALocationType == CSALocationType.OnEdge ? end + (currentFontHeight / 2 + verticalFix) * verticalVector : start + (currentFontHeight + verticalFix) * verticalVector + horizontalFix * horizontalVector); }
public static double GetLineWidth(this CSALocationType CSALocationType) { return(CSALocationType == CSALocationType.OnEdge ? 400 : 3000); }