Example #1
0
        /// <inheritdoc />
        public override void MoveGripPointsAt(
            Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            try
            {
                if (IsApplicable(entity))
                {
                    foreach (var gripData in grips)
                    {
                        if (gripData is SecantNodalLeaderGrip levelMarkGrip)
                        {
                            var gripPoint         = levelMarkGrip.GripPoint;
                            var secantNodalLeader = levelMarkGrip.SecantNodalLeader;

                            if (levelMarkGrip.GripName == GripName.InsertionPoint)
                            {
                                ((BlockReference)entity).Position = gripPoint + offset;
                                secantNodalLeader.InsertionPoint  = gripPoint + offset;
                            }
                            else if (levelMarkGrip.GripName == GripName.LeaderPoint)
                            {
                                secantNodalLeader.EndPoint = gripPoint + offset;
                            }

                            // Вот тут происходит перерисовка примитивов внутри блока
                            secantNodalLeader.UpdateEntities();
                            secantNodalLeader.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else
                        {
                            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                        }
                    }
                }
                else
                {
                    base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }
 /// <inheritdoc />
 public override void MoveGripPointsAt(
     Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
 {
     try
     {
         if (IsApplicable(entity))
         {
             EntityUtils.LinearEntityGripPointMoveProcess(
                 entity, grips, offset, () => base.MoveGripPointsAt(entity, grips, offset, bitFlags));
         }
         else
         {
             base.MoveGripPointsAt(entity, grips, offset, bitFlags);
         }
     }
     catch (Exception exception)
     {
         if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
         {
             ExceptionBox.Show(exception);
         }
     }
 }
Example #3
0
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips,
                                              Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            var donut = entity as Circle;

            if (donut != null)
            {
                var xdata = donut.GetXData(CommandClass.AppName);
                if (xdata != null && xdata.Length > 0)
                {
                    foreach (var grip in grips)
                    {
                        var outGrip = grip as DonutOutGripData;
                        if (outGrip != null)
                        {
                            donut.SetXData(CommandClass.AppName, 0,
                                           new TypedValue((int)DxfCode.ExtendedDataReal,
                                                          (outGrip.GripPoint + offset - donut.Center).Length));
                        }

                        var inGrip = grip as DonutInGripData;
                        if (inGrip != null)
                        {
                            donut.Radius = (inGrip.GripPoint + offset - donut.Center).Length;
                            //donut.SetXData(CommandClass.AppName, 0,
                            //    new TypedValue((int)DxfCode.ExtendedDataReal,
                            //        (outGrip.GripPoint + offset - donut.Center).Length));
                        }
                    }
                }
            }

            if (grips.OfType <DonutOutGripData>().Count() < grips.Count)
            {
                base.MoveGripPointsAt(entity, grips, offset, bitFlags);
            }
        }
Example #4
0
        //移动夹点
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            var ismove = false;

            foreach (GripData gd in grips)
            {
                if (gd is UserGripData && ismove == false)
                {
                    //UserGripData lagd = (UserGripData)gd;
                    if (entity is BlockReference)
                    {
                        var brf = entity as BlockReference;
                        brf.Position = brf.Position.Add(offset);
                    }
                    else if (entity is DBText)
                    {
                        var txt = entity as DBText;
                        txt.Position       = txt.Position.Add(offset);
                        txt.AlignmentPoint = txt.AlignmentPoint.Add(offset);
                    }
                    else if (entity is MText)
                    {
                        var txt = entity as MText;
                        txt.Location = txt.Location.Add(offset);
                    }
                    ismove = true;
                }
            }
            if (grips.Count > 0)
            {
                if (entity is BlockReference)
                {
                    if (!ismove)
                    {
                        base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                    }
                    mpt1 = pt1.Add(offset);
                    mpt2 = pt2.Add(offset);
                    pt   = GeTools.MidPoint(mpt1, mpt2);
                }
                else if (entity is DBText)
                {
                    if (!ismove)
                    {
                        base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                    }
                    pt = ((DBText)entity).Position;
                }
                else if (entity is MText)
                {
                    if (!ismove)
                    {
                        base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                    }
                    pt = ((MText)entity).Location;
                }
            }
        }
        /// <inheritdoc />
        public override void MoveGripPointsAt(
            Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            try
            {
                if (IsApplicable(entity))
                {
                    foreach (var gripData in grips)
                    {
                        if (gripData is SectionVertexGrip vertexGrip)
                        {
                            var section = vertexGrip.Section;

                            if (vertexGrip.GripIndex == 0)
                            {
                                ((BlockReference)entity).Position = vertexGrip.GripPoint + offset;
                                section.InsertionPoint            = vertexGrip.GripPoint + offset;
                            }
                            else if (vertexGrip.GripIndex == section.MiddlePoints.Count + 1)
                            {
                                section.EndPoint = vertexGrip.GripPoint + offset;
                            }
                            else
                            {
                                section.MiddlePoints[vertexGrip.GripIndex - 1] =
                                    vertexGrip.GripPoint + offset;
                            }

                            // Вот тут происходит перерисовка примитивов внутри блока
                            section.UpdateEntities();
                            section.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else if (gripData is SectionTextGrip textGrip)
                        {
                            var section = textGrip.Section;
                            if (textGrip.Name == TextGripName.TopText)
                            {
                                var topStrokeVector = section.MiddlePoints.Any()
                                    ? (section.InsertionPoint - section.MiddlePoints.First()).GetNormal()
                                    : (section.InsertionPoint - section.EndPoint).GetNormal();
                                var topShelfVector = topStrokeVector.GetPerpendicularVector().Negate();
                                var deltaY         = topStrokeVector.DotProduct(offset) / section.BlockTransform.GetScale();
                                var deltaX         = topShelfVector.DotProduct(offset) / section.BlockTransform.GetScale();
                                if (double.IsNaN(textGrip.CachedAlongTopShelfTextOffset))
                                {
                                    section.AlongTopShelfTextOffset = deltaX;
                                }
                                else
                                {
                                    section.AlongTopShelfTextOffset = textGrip.CachedAlongTopShelfTextOffset + deltaX;
                                }

                                if (double.IsNaN(textGrip.CachedAcrossTopShelfTextOffset))
                                {
                                    section.AcrossTopShelfTextOffset = deltaY;
                                }
                                else
                                {
                                    section.AcrossTopShelfTextOffset = textGrip.CachedAcrossTopShelfTextOffset + deltaY;
                                }

                                if (MainSettings.Instance.SectionDependentTextMovement)
                                {
                                    if (double.IsNaN(textGrip.CachedAlongBottomShelfTextOffset))
                                    {
                                        section.AlongBottomShelfTextOffset = deltaX;
                                    }
                                    else
                                    {
                                        section.AlongBottomShelfTextOffset = textGrip.CachedAlongBottomShelfTextOffset + deltaX;
                                    }

                                    if (double.IsNaN(textGrip.CachedAcrossBottomShelfTextOffset))
                                    {
                                        section.AcrossBottomShelfTextOffset = deltaY;
                                    }
                                    else
                                    {
                                        section.AcrossBottomShelfTextOffset = textGrip.CachedAcrossBottomShelfTextOffset + deltaY;
                                    }
                                }
                            }

                            if (textGrip.Name == TextGripName.BottomText)
                            {
                                var bottomStrokeVector = section.MiddlePoints.Any()
                                    ? (section.EndPoint - section.MiddlePoints.Last()).GetNormal()
                                    : (section.EndPoint - section.InsertionPoint).GetNormal();
                                var bottomShelfVector = bottomStrokeVector.GetPerpendicularVector();
                                var deltaY            = bottomStrokeVector.DotProduct(offset) / section.BlockTransform.GetScale();
                                var deltaX            = bottomShelfVector.DotProduct(offset) / section.BlockTransform.GetScale();

                                if (double.IsNaN(textGrip.CachedAlongBottomShelfTextOffset))
                                {
                                    section.AlongBottomShelfTextOffset = deltaX;
                                }
                                else
                                {
                                    section.AlongBottomShelfTextOffset = textGrip.CachedAlongBottomShelfTextOffset + deltaX;
                                }

                                if (double.IsNaN(textGrip.CachedAcrossBottomShelfTextOffset))
                                {
                                    section.AcrossBottomShelfTextOffset = deltaY;
                                }
                                else
                                {
                                    section.AcrossBottomShelfTextOffset = textGrip.CachedAcrossBottomShelfTextOffset + deltaY;
                                }

                                if (MainSettings.Instance.SectionDependentTextMovement)
                                {
                                    if (double.IsNaN(textGrip.CachedAlongTopShelfTextOffset))
                                    {
                                        section.AlongTopShelfTextOffset = deltaX;
                                    }
                                    else
                                    {
                                        section.AlongTopShelfTextOffset = textGrip.CachedAlongTopShelfTextOffset + deltaX;
                                    }

                                    if (double.IsNaN(textGrip.CachedAcrossTopShelfTextOffset))
                                    {
                                        section.AcrossTopShelfTextOffset = deltaY;
                                    }
                                    else
                                    {
                                        section.AcrossTopShelfTextOffset = textGrip.CachedAcrossTopShelfTextOffset + deltaY;
                                    }
                                }
                            }

                            section.UpdateEntities();
                            section.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else if (gripData is SectionAddVertexGrip addVertexGrip)
                        {
                            addVertexGrip.NewPoint = addVertexGrip.GripPoint + offset;
                        }
                        else
                        {
                            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                        }
                    }
                }
                else
                {
                    base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }
Example #6
0
        /// <inheritdoc />
        public override void MoveGripPointsAt(
            Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            try
            {
                if (IsApplicable(entity))
                {
                    foreach (var gripData in grips)
                    {
                        if (gripData is LevelMarkGrip levelMarkGrip)
                        {
                            var gripPoint = levelMarkGrip.GripPoint;
                            var levelMark = levelMarkGrip.LevelMark;
                            var scale     = levelMark.GetFullScale();
                            var horV      = (levelMark.EndPoint - levelMark.ObjectPoint).GetNormal();

                            if (levelMarkGrip.GripName == LevelMarkGripName.BasePoint)
                            {
                                ((BlockReference)entity).Position = gripPoint + offset;
                                levelMark.InsertionPoint          = gripPoint + offset;
                            }
                            else if (levelMarkGrip.GripName == LevelMarkGripName.ObjectPoint)
                            {
                                levelMark.ObjectPoint           = gripPoint + offset;
                                levelMark.BottomShelfStartPoint = new Point3d(
                                    levelMark.BottomShelfStartPoint.X,
                                    levelMark.ObjectPoint.Y,
                                    levelMark.BottomShelfStartPoint.Z);
                                levelMark.EndPoint = new Point3d(
                                    levelMark.EndPoint.X,
                                    levelMark.ObjectPoint.Y,
                                    levelMark.EndPoint.Z);
                            }
                            else if (levelMarkGrip.GripName == LevelMarkGripName.BottomShelfStartPoint)
                            {
                                levelMark.BottomShelfStartPoint = gripPoint + offset;
                                if (levelMark.ObjectLine)
                                {
                                    levelMark.ObjectPoint =
                                        levelMark.BottomShelfStartPoint - (horV * levelMark.ObjectLineOffset * scale);

                                    levelMark.EndPoint =
                                        levelMark.BottomShelfStartPoint + (horV * _cachedBottomShelfLength);
                                }
                                else
                                {
                                    levelMark.ObjectPoint = new Point3d(
                                        levelMark.ObjectPoint.X,
                                        levelMark.BottomShelfStartPoint.Y,
                                        levelMark.ObjectPoint.Z);
                                    levelMark.EndPoint =
                                        levelMark.BottomShelfStartPoint + (horV * levelMark.BottomShelfLength * scale);
                                }
                            }
                            else if (levelMarkGrip.GripName == LevelMarkGripName.ArrowPoint)
                            {
                                levelMark.SetArrowPoint(gripPoint + offset);
                            }
                            else if (levelMarkGrip.GripName == LevelMarkGripName.TopShelfPoint)
                            {
                                levelMark.ShelfPoint = gripPoint + offset;
                            }

                            // Вот тут происходит перерисовка примитивов внутри блока
                            levelMark.UpdateEntities();
                            levelMark.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else
                        {
                            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                        }
                    }
                }
                else
                {
                    base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }
Example #7
0
        /// <inheritdoc/>
        public override void MoveGripPointsAt(
            Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            try
            {
                if (IsApplicable(entity))
                {
                    // Проходим по коллекции ручек
                    foreach (var gripData in grips)
                    {
                        if (gripData is BreakLineGrip gripPoint)
                        {
                            var breakLine = gripPoint.BreakLine;
                            var scale     = breakLine.GetFullScale();

                            // Далее, в зависимости от имени ручки произвожу действия
                            if (gripPoint.GripName == BreakLineGripName.StartGrip)
                            {
                                // Переношу точку вставки блока, и точку, описывающую первую точку в примитиве
                                // Все точки всегда совпадают (+ ручка)
                                var newPt  = gripPoint.GripPoint + offset;
                                var length = breakLine.EndPoint.DistanceTo(newPt);

                                if (length < breakLine.MinDistanceBetweenPoints * scale)
                                {
                                    /* Если новая точка получается на расстоянии меньше минимального, то
                                     * переносим ее в направлении между двумя точками на минимальное расстояние
                                     */
                                    var tmpInsertionPoint = ModPlus.Helpers.GeometryHelpers.Point3dAtDirection(
                                        breakLine.EndPoint, newPt, breakLine.EndPoint,
                                        breakLine.MinDistanceBetweenPoints * scale);

                                    if (breakLine.EndPoint.Equals(newPt))
                                    {
                                        // Если точки совпали, то задаем минимальное значение
                                        tmpInsertionPoint = new Point3d(
                                            breakLine.EndPoint.X + (breakLine.MinDistanceBetweenPoints * scale),
                                            breakLine.EndPoint.Y, breakLine.EndPoint.Z);
                                    }

                                    ((BlockReference)entity).Position = tmpInsertionPoint;
                                    breakLine.InsertionPoint          = tmpInsertionPoint;
                                }
                                else
                                {
                                    ((BlockReference)entity).Position = gripPoint.GripPoint + offset;
                                    breakLine.InsertionPoint          = gripPoint.GripPoint + offset;
                                }
                            }

                            if (gripPoint.GripName == BreakLineGripName.MiddleGrip)
                            {
                                // Т.к. средняя точка нужна для переноса примитива, но не соответствует точки вставки блока
                                // и получается как средняя точка между InsertionPoint и EndPoint, то я переношу
                                // точку вставки
                                var lengthVector = (breakLine.InsertionPoint - breakLine.EndPoint) / 2;
                                ((BlockReference)entity).Position = gripPoint.GripPoint + offset + lengthVector;
                            }

                            if (gripPoint.GripName == BreakLineGripName.EndGrip)
                            {
                                var newPt = gripPoint.GripPoint + offset;
                                if (newPt.Equals(((BlockReference)entity).Position))
                                {
                                    breakLine.EndPoint = new Point3d(
                                        ((BlockReference)entity).Position.X + (breakLine.MinDistanceBetweenPoints * scale),
                                        ((BlockReference)entity).Position.Y, ((BlockReference)entity).Position.Z);
                                }

                                // С конечной точкой все просто
                                else
                                {
                                    breakLine.EndPoint = gripPoint.GripPoint + offset;
                                }
                            }

                            // Вот тут происходит перерисовка примитивов внутри блока
                            breakLine.UpdateEntities();
                            breakLine.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else
                        {
                            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                        }
                    }
                }
                else
                {
                    base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }
Example #8
0
 public void MoveGripPointsAtSubentityPaths(FullSubentityPath[] subPaths, IntPtr[] appData, Vector3d offset, MoveGripPointsFlags bitFlags)
 {
     createInstance();
     BaseEntity.MoveGripPointsAtSubentityPaths(subPaths, appData, offset, bitFlags);
     tr.Dispose();
 }
Example #9
0
 public void MoveGripPointsAt(GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
 {
     createInstance();
     BaseEntity.MoveGripPointsAt(grips, offset,bitFlags);
     tr.Dispose();
 }
 public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
 {
     /*ArrowGripData gdata = new ArrowGripData();
      * gdata.GripPoint = _getCustomGrip(entity);
      * grips.Add(gdata);*/
     base.MoveGripPointsAt(entity, grips, offset, bitFlags);
 }
Example #11
0
 public void MoveGripPointsAtSubentityPaths(FullSubentityPath[] subPaths, IntPtr[] appData, Vector3d offset, MoveGripPointsFlags bitFlags)
 {
     createInstance();
     BaseEntity.MoveGripPointsAtSubentityPaths(subPaths, appData, offset, bitFlags);
     tr.Dispose();
 }
Example #12
0
 public void MoveGripPointsAt(GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
 {
     createInstance();
     BaseEntity.MoveGripPointsAt(grips, offset, bitFlags);
     tr.Dispose();
 }
Example #13
0
        /// <inheritdoc />
        public override void MoveGripPointsAt(
            Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            try
            {
                if (IsApplicable(entity))
                {
                    foreach (var gripData in grips)
                    {
                        if (gripData is NodalLeaderGrip levelMarkGrip)
                        {
                            var gripPoint   = levelMarkGrip.GripPoint;
                            var nodalLeader = levelMarkGrip.NodalLeader;
                            var scale       = nodalLeader.GetFullScale();

                            if (levelMarkGrip.GripName == GripName.InsertionPoint)
                            {
                                ((BlockReference)entity).Position = gripPoint + offset;
                                nodalLeader.InsertionPoint        = gripPoint + offset;
                                nodalLeader.FramePoint            = _initFramePoint + offset;
                            }
                            else if (levelMarkGrip.GripName == GripName.FramePoint)
                            {
                                if (nodalLeader.FrameType == FrameType.Rectangular)
                                {
                                    var currentPosition = gripPoint + offset;
                                    var frameHeight     =
                                        Math.Abs(currentPosition.Y - nodalLeader.InsertionPoint.Y) / scale;
                                    var frameWidth = Math.Abs(currentPosition.X - nodalLeader.InsertionPoint.X) / scale;

                                    if (!(frameHeight <= nodalLeader.MinDistanceBetweenPoints) &&
                                        !(frameWidth <= nodalLeader.MinDistanceBetweenPoints))
                                    {
                                        nodalLeader.FramePoint = gripPoint + offset;
                                    }
                                }
                                else
                                {
                                    nodalLeader.FramePoint = gripPoint + offset;
                                }
                            }
                            else if (levelMarkGrip.GripName == GripName.LeaderPoint)
                            {
                                nodalLeader.EndPoint = gripPoint + offset;
                            }

                            // Вот тут происходит перерисовка примитивов внутри блока
                            nodalLeader.UpdateEntities();
                            nodalLeader.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else
                        {
                            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                        }
                    }
                }
                else
                {
                    base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }
        /// <inheritdoc />
        public override void MoveGripPointsAt(
            Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            try
            {
                if (IsApplicable(entity))
                {
                    // Проходим по коллекции ручек
                    foreach (var gripData in grips)
                    {
                        // Приводим ручку к моему классу
                        var gripPoint = gripData as AxisGrip;

                        // Проверяем, что это та ручка, что мне нужна.
                        if (gripPoint != null)
                        {
                            // Далее, в зависимости от имени ручки произвожу действия
                            var axis  = gripPoint.Axis;
                            var scale = axis.GetFullScale();

                            if (gripPoint.GripName == AxisGripName.StartGrip)
                            {
                                // Переношу точку вставки блока, и точку, описывающую первую точку в примитиве
                                // Все точки всегда совпадают (+ ручка)
                                var newPt  = gripPoint.GripPoint + offset;
                                var length = axis.EndPoint.DistanceTo(newPt);
                                if (length < axis.MinDistanceBetweenPoints * scale)
                                {
                                    /* Если новая точка получается на расстоянии меньше минимального, то
                                     * переносим ее в направлении между двумя точками на минимальное расстояние
                                     */
                                    var tmpInsertionPoint = ModPlus.Helpers.GeometryHelpers.Point3dAtDirection(
                                        axis.EndPoint, newPt, axis.EndPoint,
                                        axis.MinDistanceBetweenPoints * scale);

                                    if (axis.EndPoint.Equals(newPt))
                                    {
                                        // Если точки совпали, то задаем минимальное значение
                                        tmpInsertionPoint = new Point3d(
                                            axis.EndPoint.X,
                                            axis.EndPoint.Y - (axis.MinDistanceBetweenPoints * scale),
                                            axis.EndPoint.Z);
                                    }

                                    ((BlockReference)entity).Position = tmpInsertionPoint;
                                    axis.InsertionPoint = tmpInsertionPoint;
                                }
                                else
                                {
                                    ((BlockReference)entity).Position = gripPoint.GripPoint + offset;
                                    axis.InsertionPoint = gripPoint.GripPoint + offset;
                                }
                            }

                            if (gripPoint.GripName == AxisGripName.MiddleGrip)
                            {
                                // Т.к. средняя точка нужна для переноса примитива, но не соответствует точки вставки блока
                                // и получается как средняя точка между InsertionPoint и EndPoint, то я переношу
                                // точку вставки
                                var lengthVector = (axis.InsertionPoint - axis.EndPoint) / 2;
                                ((BlockReference)entity).Position = gripPoint.GripPoint + offset + lengthVector;
                            }

                            if (gripPoint.GripName == AxisGripName.EndGrip)
                            {
                                var     newPt = gripPoint.GripPoint + offset;
                                Point3d newEndPoint;
                                if (newPt.Equals(((BlockReference)entity).Position))
                                {
                                    newEndPoint = new Point3d(
                                        ((BlockReference)entity).Position.X,
                                        ((BlockReference)entity).Position.Y - (axis.MinDistanceBetweenPoints * scale),
                                        ((BlockReference)entity).Position.Z);
                                    axis.EndPoint = newEndPoint;
                                }
                                else
                                {
                                    axis.EndPoint = gripPoint.GripPoint + offset;
                                    newEndPoint   = gripPoint.GripPoint + offset;
                                }

                                // change bottom orient point
                                axis.BottomOrientPoint = GetSavePositionPoint(
                                    _initInsertionPoint,
                                    gripPoint.GripPoint,
                                    newEndPoint,
                                    _initBottomOrientPoint);
                            }

                            if (gripPoint.GripName == AxisGripName.BottomMarkerGrip)
                            {
                                var mainVector = axis.EndPoint - axis.InsertionPoint;
                                var v          = mainVector.CrossProduct(Vector3d.ZAxis).GetNormal();
                                axis.BottomMarkerPoint = gripPoint.GripPoint + (offset.DotProduct(v) * v);

                                // Меняю также точку маркера-ориентира
                                if (_initBottomOrientPoint != Point3d.Origin)
                                {
                                    axis.BottomOrientPoint = _initBottomOrientPoint + (offset.DotProduct(v) * v);
                                }
                            }

                            if (gripPoint.GripName == AxisGripName.TopMarkerGrip)
                            {
                                var mainVector = axis.InsertionPoint - axis.EndPoint;
                                var v          = mainVector.CrossProduct(Vector3d.ZAxis).GetNormal();
                                axis.TopMarkerPoint = gripPoint.GripPoint + (offset.DotProduct(v) * v);

                                // Меняю также точку маркера-ориентира
                                if (_initTopOrientPoint != Point3d.Origin)
                                {
                                    axis.TopOrientPoint = _initTopOrientPoint + (offset.DotProduct(v) * v);
                                }
                            }

                            if (gripPoint.GripName == AxisGripName.BottomOrientGrip)
                            {
                                var mainVector = axis.EndPoint - axis.InsertionPoint;
                                var v          = mainVector.CrossProduct(Vector3d.ZAxis).GetNormal();
                                var newPoint   = gripPoint.GripPoint + (offset.DotProduct(v) * v);

                                if (Math.Abs((newPoint - axis.BottomMarkerPoint).Length) >
                                    axis.MarkersDiameter * scale)
                                {
                                    axis.BottomOrientPoint = newPoint;
                                }
                                else
                                {
                                    if (newPoint.X >= axis.BottomMarkerPoint.X)
                                    {
                                        axis.BottomOrientPoint =
                                            axis.BottomMarkerPoint + (v * -1 * axis.MarkersDiameter * scale);
                                    }
                                    else
                                    {
                                        axis.BottomOrientPoint =
                                            axis.BottomMarkerPoint + (v * axis.MarkersDiameter * scale);
                                    }
                                }
                            }

                            if (gripPoint.GripName == AxisGripName.TopOrientGrip)
                            {
                                var mainVector = axis.InsertionPoint - axis.EndPoint;
                                var v          = mainVector.CrossProduct(Vector3d.ZAxis).GetNormal();
                                var newPoint   = gripPoint.GripPoint + (offset.DotProduct(v) * v);

                                if (Math.Abs((newPoint - axis.TopMarkerPoint).Length) >
                                    axis.MarkersDiameter * scale)
                                {
                                    axis.TopOrientPoint = newPoint;
                                }
                                else
                                {
                                    if (newPoint.X >= axis.TopMarkerPoint.X)
                                    {
                                        axis.TopOrientPoint =
                                            axis.TopMarkerPoint + (v * axis.MarkersDiameter * scale);
                                    }
                                    else
                                    {
                                        axis.TopOrientPoint =
                                            axis.TopMarkerPoint + (v * -1 * axis.MarkersDiameter * scale);
                                    }
                                }
                            }

                            // Вот тут происходит перерисовка примитивов внутри блока
                            axis.UpdateEntities();
                            axis.BlockRecord.UpdateAnonymousBlocks();
                        }
                        else
                        {
                            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                        }
                    }
                }
                else
                {
                    base.MoveGripPointsAt(entity, grips, offset, bitFlags);
                }
            }
            catch (Exception exception)
            {
                if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy)
                {
                    ExceptionBox.Show(exception);
                }
            }
        }
Example #15
0
        //移动夹点
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            LArrow3 la = new LArrow3(entity);

            foreach (GripData gd in grips)
            {
                if (gd is LArrowGripData3)
                {
                    LArrowGripData3 lagd = (LArrowGripData3)gd;
                    lagd.Move(la, offset);
                }
            }
            for (int i = grips.Count - 1; i >= 0; i--)
            {
                if (grips[i] is LArrowGripData3)
                {
                    grips.Remove(grips[i]);
                }
            }
            if (grips.Count > 0)
            {
                base.MoveGripPointsAt(entity, grips, offset, bitFlags);
            }
        }
Example #16
0
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            var wall = entity as Line;

            if (wall != null)
            {
                var xdata = wall.GetXData(CommandJson.AppName);

                var data = DBHelper.GetNODData(CommandJson.AppName, xdata[0].Value.ToString())?.Data?.AsArray();

                var wallPara = JsonConvert.DeserializeObject <Wall>(
                    data[1].Value.ToString());

                foreach (var grip in grips)
                {
                    var wallGrip = grip as WallGripData;

                    if (wallGrip != null)
                    {
                        if (wallGrip.IsStartPoint)
                        {
                            wall.StartPoint = wallGrip.GripPoint + offset;
                        }
                        else
                        {
                            wall.EndPoint = wallGrip.GripPoint + offset;
                        }
                    }

                    wallPara.Pos.X  = wall.StartPoint.X;
                    wallPara.Pos.Y  = wall.StartPoint.Y;
                    wallPara.Dir.X  = wall.EndPoint.X - wall.StartPoint.X;
                    wallPara.Dir.Y  = wall.EndPoint.Y - wall.StartPoint.Y;
                    wallPara.Size.H = wall.Length;

                    var newData = new ResultBuffer(
                        new TypedValue((int)DxfCode.Text,
                                       wallPara.GetType().ToString()),
                        new TypedValue((int)DxfCode.Text,
                                       JsonConvert.SerializeObject(wallPara)
                                       ));

                    DBHelper.SetNODData(CommandJson.AppName, wall.Id.ToString(),
                                        new Xrecord {
                        Data = newData
                    });
                }
            }
        }
        public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
        {
            /*ArrowGripData gdata = new ArrowGripData();
             * gdata.GripPoint = _getCustomGrip(entity);
             * grips.Add(gdata);*/
            base.MoveGripPointsAt(entity, grips, offset, bitFlags);
#if DEBUG
            if (_entities != null)
            {
                IgorKL.ACAD3.Model.Tools.AppendEntity(_entities);
                _entities = null;
            }
#endif
        }