Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        /*Переход на полилинию на перспективу
         * [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);
                }
            }
        }