private static string GetHeadGeometryString(ArrowHeadType arrowHeadType) { switch (arrowHeadType) { case ArrowHeadType.Simple: return(SimpleArrowHead); case ArrowHeadType.Hollow: return(HollowArrowHead); default: throw new NotImplementedException($"{arrowHeadType} not implemented"); } }
/// <summary> /// Añadir nueva cota al documento actual. /// </summary> /// <param name="P1_XY">Punto Inicial [System.Drawing]</param> /// <param name="P2_XY">Punto Final [System.Drawing]</param> /// <param name="Layer">Capa de la cota.</param> /// <param name="Style">Estilo de la cota.</param> /// <param name="DesplazCota">Desplazamiento de la Cota perpendicularmente a la línea formada.</param> /// <param name="DeplazaTextX">Desplazamiento en X del texto asociado a la cota</param> /// <param name="DeplazaTextY">Desplazamiento en Y del texto asociado a la cota</param> /// <param name="Precision">Cantidad de decimales de la cota. Ejemplo: (0,0.0,0.00,0.000)</param> /// <param name="Text">Cambia la medición original al texto establecido.</param> /// <param name="TextHeight">Alto del texto.</param> /// <param name="ArrowheadSize">Tamaño de las puntas de la cota.</param> /// <param name="headType1">Tipo de cabeza de la cota en la punta inicial.</param> /// <param name="headType2">Tipo de cabeza de la cota en la punta final.</param> /// <param name="TextRotation">Angulo de rotación en grados del texto.</param> /// <param name="RA">Aplicar rotación automatica.</param> public static void AddCota(PointF P1_XY, PointF P2_XY, string Layer, string Style, float DesplazCota = 0, float DeplazaTextX = 0, float DeplazaTextY = 0, PrecisionCota Precision = PrecisionCota.Dos, string Text = "", double TextHeight = 0.0015, double ArrowheadSize = 0.001, ArrowHeadType headType1 = ArrowHeadType.ArrowDot, ArrowHeadType headType2 = ArrowHeadType.ArrowDot, double TextRotation = 0, bool RA = true) { try { double[] P1_XYZ = ConvertirPuntoEnDobules3D(P1_XY); double[] P2_XYZ = ConvertirPuntoEnDobules3D(P2_XY); if (AcadDoc != null && P1_XYZ.Length == 3 && P2_XYZ.Length == 3) { double Rotation_Rad; double X = P2_XYZ[0] - P1_XYZ[0]; double Y = P2_XYZ[1] - P1_XYZ[1]; //Encontrar Angulo Rotation_Rad = Math.Abs(Math.Atan(Y / X)); double DesX = (Distancia(P1_XYZ, P2_XYZ) / 2) * Math.Cos(Rotation_Rad); double DesY = (Distancia(P1_XYZ, P2_XYZ) / 2) * Math.Sin(Rotation_Rad); double DesplazarXCota = DesplazCota * Math.Sin(Rotation_Rad); double DesplazarYCota = DesplazCota * Math.Cos(Rotation_Rad); double[] LocationText = new double[] { P1_XYZ[0] + DesX + DesplazarXCota, P1_XYZ[1] + DesY + DesplazarYCota, P1_XYZ[2] + (P2_XYZ[2] - P1_XYZ[2]) / 2 }; double[] TextPosition = new double[] { LocationText[0] + DeplazaTextX, LocationText[1] + DeplazaTextY, LocationText[2] }; if (!RA) { Rotation_Rad = 0; } AcadDimRotated cota = AcadDoc.ModelSpace.AddDimRotated(P1_XYZ, P2_XYZ, LocationText, Rotation_Rad); //Cotas siempre con Puntas Redondas cota.Layer = Layer; cota.StyleName = Layer; cota.TextStyle = Style; cota.TextHeight = TextHeight; cota.ArrowheadSize = ArrowheadSize; cota.PrimaryUnitsPrecision = Clasf_precision(Precision); cota.TextPosition = TextPosition; cota.Arrowhead1Type = Clasf_ArrowHeadType(headType1); cota.Arrowhead2Type = Clasf_ArrowHeadType(headType2); cota.TextRotation = TextRotation * Math.PI / 180; if (Text != "") { cota.TextOverride = Text; } cota.Update(); } } catch { NotificadorErrores?.Invoke("Error inesperado."); } }
private static AcDimArrowheadType Clasf_ArrowHeadType(ArrowHeadType headType) { if (headType == ArrowHeadType.ArrowDefault) { return(AcDimArrowheadType.acArrowDefault); } else if (headType == ArrowHeadType.ArrowDot) { return(AcDimArrowheadType.acArrowDot); } else { return(AcDimArrowheadType.acArrowDot); } }
private static IEnumerable <PathFigure> CreatePathFigures(IList <Point> points, ArrowHeadType arrowHeadType, double arrowHeadSize, double arrowHeadLengthPerWidth) { var startPoint = points[points.Count - 2]; var endPoint = points[points.Count - 1]; var arrowVector = endPoint - startPoint; var arrowHeadVector = arrowVector / arrowVector.Length * arrowHeadSize; switch (arrowHeadType) { case ArrowHeadType.Hollow: yield return(CreateArrowHead(endPoint, arrowHeadVector, arrowHeadLengthPerWidth, isClosed: true)); yield break; case ArrowHeadType.Simple: yield return(CreateArrowHead(endPoint, arrowHeadVector, arrowHeadLengthPerWidth, isClosed: false)); yield break; } }
public ConnectorType(ArrowHeadType arrowHeadType, LineType shaftLineType) { ArrowHeadType = arrowHeadType; ShaftLineType = shaftLineType; }
private static IEnumerable <PathFigure> CreatePathFigures(IList <Point> routePoints, ArrowHeadType arrowHeadType, double arrowHeadSize) { if (routePoints.Count > 2) { yield return(CreatePathFigureWithoutLastSegment(routePoints)); } var lastSegment = routePoints.TakeLast(2).ToArray(); switch (arrowHeadType) { case ArrowHeadType.Hollow: yield return(CreateArrowShaftForHollowHead(lastSegment, arrowHeadSize)); yield break; case ArrowHeadType.Simple: yield return(CreateArrowShaftForSimpleHead(lastSegment)); yield break; } }