private BCOM.Element createLeader() { List <BCOM.Element> elements = new List <BCOM.Element>(); if (pointIndex_ < 1) { points_[1] = points_[2] = points_[0]; } else if (pointIndex_ < 2) { points_[2] = points_[1]; } else { points_[2] = app_.Point3dFromXY(points_[2].X, points_[1].Y); } int kX = (points_[2].X - points_[1].X) >= 0 ? 1 : -1; BCOM.TextElement textUpper = app_.CreateTextElement1( null, leaderInfo_.TextLines[0], app_.Point3dZero(), app_.Matrix3dZero()); textUpper.Redraw(BCOM.MsdDrawingMode.Temporary); textUpper.set_Origin(points_[2].shift(dY: textUpper.Range.getHeight() * 0.75)); BCOM.TextElement textLower = app_.CreateTextElement1( null, leaderInfo_.TextLines[1], app_.Point3dZero(), app_.Matrix3dZero()); textLower.Redraw(BCOM.MsdDrawingMode.Temporary); textLower.set_Origin(points_[2].shift(dY: -textUpper.Range.getHeight() * 0.25)); double maxwidth = Math.Max(textUpper.Range.getWidth(), textLower.Range.getWidth()); if (kX < 0) { textUpper.set_Origin(textUpper.get_Origin().shift(-maxwidth)); textLower.set_Origin(textLower.get_Origin().shift(-maxwidth)); } points_[3] = app_.Point3dFromXY(points_[2].X + kX * (maxwidth + leaderInfo_.GapTextAfter), points_[2].Y); BCOM.Element line = app_.CreateLineElement1(null, points_); elements.Add(line); elements.Add(textUpper); elements.Add(textLower); return(app_.CreateCellElement1( "PenetrLeader", elements.ToArray(), points_[0])); }