public void PaintTopInGame(ClipState clipState)
        {
            if (Hud.Render.UiHidden)
            {
                return;
            }
            if (clipState != ClipState.BeforeClip)
            {
                return;
            }

            var uiRect = Hud.Render.GetUiElement("Root.NormalLayer.minimap_dialog_backgroundScreen.minimap_dialog_pve.minimap_pve_main").Rectangle;

            NewPos = Hud.Window.CreateWorldCoordinate(Hud.Game.Me.FloorCoordinate);
            double DatSecond = Math.Truncate((double)(Hud.Game.CurrentRealTimeMilliseconds / 1000));

            if (!SpeedPos.ContainsKey(DatSecond))
            {
                SpeedPos.Add(DatSecond, NewPos);
            }

            int DictCount = SpeedPos.Count;

            if (DictCount >= 2)
            {
                var NextToLast = SpeedPos.OrderByDescending(b => b.Key).Skip(1).First();
                OldPos = NextToLast.Value;
            }
            if (DictCount >= 3)
            {
                var First = SpeedPos.OrderBy(b => b.Key).First();
                SpeedPos.Remove(First.Key);
            }

            DistanceFromLastSecond = OldPos.XYDistanceTo(Hud.Game.Me.FloorCoordinate);

            if (DistanceFromLastSecond > SpeedCooler)
            {
                SpeedCooler = SpeedCooler + (float)((DistanceFromLastSecond - SpeedCooler) / (DistanceFromLastSecond + 1));
            }
            else if (DistanceFromLastSecond < SpeedCooler)
            {
                SpeedCooler = SpeedCooler - (float)((SpeedCooler - DistanceFromLastSecond) / (DistanceFromLastSecond + 1));
            }


            double mph = Math.Round(SpeedCooler * 0.49);
            double kmh = Math.Round(SpeedCooler * 0.30);

            if (MetricSystem)
            {
                Speed = kmh + " km/h";
                var Meters = (int)(DistYards * 1.0936);
                if (Meters >= 1000)
                {
                    DistString = Math.Round((float)Meters / 1000, 1) + " km";
                }
                else
                {
                    DistString = Meters + " m";
                }
            }
            else
            {
                Speed = mph + " mph";
                if (DistYards >= 1760)
                {
                    DistString = Math.Round((float)DistYards / 1760, 1) + " mi";
                }
                else
                {
                    DistString = DistYards + " yd";
                }
            }


            if (DistYards > 49)
            {
                DistanceDecorator.Paint(uiRect.Right - 30f, uiRect.Bottom + 10f, 50f, 50f, HorizontalAlign.Left);
            }

            if (mph > 0)
            {
                SpeedDecorator.Paint(uiRect.Left, uiRect.Bottom - 35f, 50f, 50f, HorizontalAlign.Left);
            }
        }
 public override string ToString() => $"Move {Source.Name} from {OldPos.ToString()} to {NewPos.ToString()}";
Exemple #3
0
        private void PosUpgrade()
        {
            TypedValue[] tvs = new TypedValue[] {
                new TypedValue((int)DxfCode.Start, "INSERT")
            };
            PromptSelectionResult res = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.GetSelection(new SelectionFilter(tvs));

            if (res.Status != PromptStatus.OK)
            {
                return;
            }

            string blockName = "POZ_*";

            Database db = HostApplicationServices.WorkingDatabase;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                try
                {
                    // Filter pos blocks
                    List <ObjectId> list = new List <ObjectId>();
                    foreach (ObjectId id in res.Value.GetObjectIds())
                    {
                        if (id.ObjectClass == Autodesk.AutoCAD.Runtime.RXObject.GetClass(typeof(BlockReference)))
                        {
                            BlockReference blockRef = tr.GetObject(id, OpenMode.ForRead) as BlockReference;

                            BlockTableRecord block = null;
                            if (blockRef.IsDynamicBlock)
                            {
                                block = tr.GetObject(blockRef.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
                            }
                            else
                            {
                                block = tr.GetObject(blockRef.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
                            }

                            if (block != null)
                            {
                                if (WCMatch(block.Name, blockName))
                                {
                                    list.Add(id);
                                }
                            }
                        }
                    }

                    BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                    foreach (ObjectId id in list)
                    {
                        // Read pos block
                        OldPos oldPos = new OldPos(tr, id);

                        // Insert new pos
                        RebarPos pos = new RebarPos();

                        pos.SuspendUpdate();

                        pos.TransformBy(Matrix3d.Displacement(oldPos.insPoint.GetAsVector()));
                        pos.TransformBy(Matrix3d.Scaling(oldPos.scale, oldPos.insPoint));
                        pos.TransformBy(Matrix3d.Rotation(oldPos.rotation, Vector3d.ZAxis, oldPos.insPoint));

                        pos.Pos        = oldPos.pos;
                        pos.Count      = oldPos.count;
                        pos.Diameter   = oldPos.diameter;
                        pos.Spacing    = oldPos.spacing;
                        pos.Shape      = oldPos.shapeName;
                        pos.A          = oldPos.a;
                        pos.B          = oldPos.b;
                        pos.C          = oldPos.c;
                        pos.D          = oldPos.d;
                        pos.E          = oldPos.e;
                        pos.F          = oldPos.f;
                        pos.Multiplier = oldPos.multiplier;
                        pos.Note       = oldPos.note;

                        // Align note text
                        if (oldPos.noteInText)
                        {
                            pos.NoteAlignment = RebarPos.SubTextAlignment.Right;
                        }
                        else if (!oldPos.noteId.IsNull)
                        {
                            pos.NoteGrip = oldPos.notePt;
                        }

                        // Align length text
                        if (oldPos.lengthInText)
                        {
                            pos.LengthAlignment = RebarPos.SubTextAlignment.Right;
                        }
                        else if (!oldPos.lengthId.IsNull)
                        {
                            pos.LengthGrip = oldPos.lengthPt;
                        }

                        pos.Detached = oldPos.detached;
                        if (!oldPos.detached && !oldPos.showLength)
                        {
                            pos.Display = RebarPos.DisplayStyle.WithoutLength;
                        }

                        pos.ResumeUpdate();

                        pos.SetDatabaseDefaults(db);

                        btr.AppendEntity(pos);
                        tr.AddNewlyCreatedDBObject(pos, true);

                        // Erase old pos block
                        BlockReference bref = tr.GetObject(id, OpenMode.ForWrite) as BlockReference;
                        bref.Erase();
                    }
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message, "RebarPos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                tr.Commit();
            }
        }
        private void PosUpgrade()
        {
            TypedValue[] tvs = new TypedValue[] {
                new TypedValue((int)DxfCode.Start, "INSERT")
            };
            PromptSelectionResult res = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.GetSelection(new SelectionFilter(tvs));
            if (res.Status != PromptStatus.OK)
            {
                return;
            }

            string blockName = "POZ_*";

            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                try
                {
                    // Filter pos blocks
                    List<ObjectId> list = new List<ObjectId>();
                    foreach (ObjectId id in res.Value.GetObjectIds())
                    {
                        if (id.ObjectClass == Autodesk.AutoCAD.Runtime.RXObject.GetClass(typeof(BlockReference)))
                        {
                            BlockReference blockRef = tr.GetObject(id, OpenMode.ForRead) as BlockReference;

                            BlockTableRecord block = null;
                            if (blockRef.IsDynamicBlock)
                            {
                                block = tr.GetObject(blockRef.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
                            }
                            else
                            {
                                block = tr.GetObject(blockRef.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
                            }

                            if (block != null)
                            {
                                if (WCMatch(block.Name, blockName)) list.Add(id);
                            }
                        }
                    }

                    BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                    foreach (ObjectId id in list)
                    {
                        // Read pos block
                        OldPos oldPos = new OldPos(tr, id);

                        // Insert new pos
                        RebarPos pos = new RebarPos();

                        pos.SuspendUpdate();

                        pos.TransformBy(Matrix3d.Displacement(oldPos.insPoint.GetAsVector()));
                        pos.TransformBy(Matrix3d.Scaling(oldPos.scale, oldPos.insPoint));
                        pos.TransformBy(Matrix3d.Rotation(oldPos.rotation, Vector3d.ZAxis, oldPos.insPoint));

                        pos.Pos = oldPos.pos;
                        pos.Count = oldPos.count;
                        pos.Diameter = oldPos.diameter;
                        pos.Spacing = oldPos.spacing;
                        pos.Shape = oldPos.shapeName;
                        pos.A = oldPos.a;
                        pos.B = oldPos.b;
                        pos.C = oldPos.c;
                        pos.D = oldPos.d;
                        pos.E = oldPos.e;
                        pos.F = oldPos.f;
                        pos.Multiplier = oldPos.multiplier;
                        pos.Note = oldPos.note;

                        // Align note text
                        if (oldPos.noteInText)
                        {
                            pos.NoteAlignment = RebarPos.SubTextAlignment.Right;
                        }
                        else if (!oldPos.noteId.IsNull)
                        {
                            pos.NoteGrip = oldPos.notePt;
                        }

                        // Align length text
                        if (oldPos.lengthInText)
                        {
                            pos.LengthAlignment = RebarPos.SubTextAlignment.Right;
                        }
                        else if (!oldPos.lengthId.IsNull)
                        {
                            pos.LengthGrip = oldPos.lengthPt;
                        }

                        pos.Detached = oldPos.detached;
                        if (!oldPos.detached && !oldPos.showLength) pos.Display = RebarPos.DisplayStyle.WithoutLength;

                        pos.ResumeUpdate();

                        pos.SetDatabaseDefaults(db);

                        btr.AppendEntity(pos);
                        tr.AddNewlyCreatedDBObject(pos, true);

                        // Erase old pos block
                        BlockReference bref = tr.GetObject(id, OpenMode.ForWrite) as BlockReference;
                        bref.Erase();
                    }
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Error: " + ex.Message, "RebarPos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                tr.Commit();
            }
        }