public static void DrawWallArrows() { Matrix3d ucs = CoordinateSystem.CoordinateTools.GetCurrentUcs(); Point3d[] axisVectorPoints = GetAxisVectorCmd(ucs.CoordinateSystem3d); if (axisVectorPoints == null) { return; } axisVectorPoints[0] = axisVectorPoints[0].TransformBy(ucs); axisVectorPoints[1] = axisVectorPoints[1].TransformBy(ucs); Vector3d axisVector = axisVectorPoints[1] - axisVectorPoints[0]; axisVector = _calculateVector(axisVector, ucs.Inverse(), false); Point3d[] transientPoints = _vectorToScreen(axisVectorPoints[0], axisVector); using (CustomObjects.EntityDrawer grphic = new ValueArrow()) { //grphic.TrasientDisplay(new[] { new Line(axisVectorPoints[0], axisVectorPoints[1]) }); if (transientPoints != null && transientPoints.Length >= 2) { grphic.TrasientDisplay(new[] { new Line(transientPoints[0], transientPoints[1]) }); } DrawWallArrows(axisVector, ucs); } //grphic.Dispose(); }
/*Переход на полилинию на перспективу * [RibbonCommandButton("Стрелки отклонения", "Стрелки")] * [Autodesk.AutoCAD.Runtime.CommandMethod("iCmd_DrawValueArrows", Autodesk.AutoCAD.Runtime.CommandFlags.UsePickSet)] * public static void DrawValueArrows() * { * Matrix3d ucs = CoordinateSystem.CoordinateTools.GetCurrentUcs(); * double tolerance = _dataProvider.Read("tolerance", 0.005d); * bool isToleranceOnly = _dataProvider.Read("isToleranceOnly", false); * * Polyline pline; * if (!ObjectCollector.TrySelectAllowedClassObject(out pline)) * return; * * * PromptPointOptions ppo = new PromptPointOptions("\nУкажите фактическое положение:"); * ppo.AllowArbitraryInput = false; * ppo.Keywords.Add("Tolerance", "ДОПуск", "ДОПуск", true, true); * ppo.Keywords.Add("IsToleranceOnlyTrue", "ТОЛькоВДопуске", "ТОЛько В Допуске", true, true); * ppo.Keywords.Add("IsToleranceOnlyFalse", "ФАКТически", "ФАКТические данные", true, true); * ppo.Keywords.Add("Exit", "ВЫХод", "ВЫХод", true, true); * * PromptPointResult ppr; * while ((ppr = Tools.GetAcadEditor().GetPoint(ppo)).Status == PromptStatus.OK || ppr.Status == PromptStatus.Keyword) * { * var insertPoint = pline.GetOrthoNormalPoint(ppr.Value, new Plane()); * if (insertPoint == null || !insertPoint.HasValue) * continue; * try * { * Vector3d axisVector = pline.GetFirstDerivative(insertPoint.Value); * ValueArrow mainBlock = new ValueArrow(axisVector, ucs); * mainBlock._isToleranceOnly = isToleranceOnly; * mainBlock._toleranceBottom = tolerance; * mainBlock._insertPointUcs = insertPoint.Value; * * PromptStatus res = PromptStatus.Cancel; * if ((res = mainBlock.JigDraw()) != PromptStatus.OK) * return; * * _dataProvider.Write("tolerance", mainBlock._toleranceBottom); * _dataProvider.Write("isToleranceOnly", mainBlock._isToleranceOnly); * } * catch (Exception ex) * { * Tools.GetAcadEditor().WriteMessage($"\n\aОшибка \n{ex.Message}"); * return; * } * } * * } */ #endregion /// <summary> /// Основной метод вывода данных. Рисует стрелки по полученным с экрана точкам /// </summary> /// <param name="axisVector">Вектор направления оси/грани (перпендикулярно стрелкам)</param> /// <param name="ucs">Текущая ПСК</param> /// <param name="onlyOnce">ИСТИНА если нужно выполнить только раз, иначе цикл</param> /// <returns></returns> public static PromptStatus DrawWallArrows(Vector3d axisVector, Matrix3d ucs, bool onlyOnce = false, bool mirrorText = false) { double toleranceBottom = /*0.005;*/ _dataProvider.Read("tolerance", 0.005d); bool isToleranceOnly = /*false;*/ _dataProvider.Read("isToleranceOnly", false); object mirrorTextValue = null; if (mirrorText) { mirrorTextValue = SetMirrorTextValue(1); } try { Point3d?insertPoint = Point3d.Origin; while ((insertPoint = GetInsertPoint(axisVector, ucs, ref toleranceBottom, ref isToleranceOnly)).HasValue) { PromptStatus res = PromptStatus.Cancel; ValueArrow mainBlock = new ValueArrow(axisVector, ucs); mainBlock._isToleranceOnly = isToleranceOnly; mainBlock._toleranceBottom = toleranceBottom; mainBlock._insertPointUcs = insertPoint.Value; if ((res = mainBlock.JigDraw()) != PromptStatus.OK) { return(res); } if (onlyOnce) { break; } _dataProvider.Write("tolerance", mainBlock._toleranceBottom); _dataProvider.Write("isToleranceOnly", mainBlock._isToleranceOnly); } return(PromptStatus.OK); } catch (Exception ex) { Tools.GetAcadEditor().WriteMessage(ex.Message); return(PromptStatus.Error); } finally { if (mirrorText) { SetMirrorTextValue(mirrorTextValue); } } }