コード例 #1
0
        private void BtnTX_Click(object sender, EventArgs e)
        {
            AcadDocument AcadDoc        = AcadApp.ActiveDocument;
            AcadObject   pSelectLineobj = pSelectLineobj = GetHX();

            if (pSelectLineobj == null)
            {
                return;
            }
            try
            {
                AcadLWPolyline Adlwp      = (AcadLWPolyline)pSelectLineobj;
                double[]       AdlwpPoint = (double[])Adlwp.Coordinates;
                int            PointCount = AdlwpPoint.Length / 2;
                superGridControlCoords.PrimaryGrid.Rows.Clear();
                // ISTPoint[] pSTPoints = new ISTPoint[PointCount];
                for (int j = 0; j < PointCount; j++)
                {
                    ISTPoint pSTPoint = new STPointClass()
                    {
                        X = AdlwpPoint[j * 2], Y = AdlwpPoint[j * 2 + 1]
                    };
                    superGridControlCoords.PrimaryGrid.Rows.Add(new DevComponents.DotNetBar.SuperGrid.GridRow(
                                                                    new object[] { j + 1, Math.Round(AdlwpPoint[j * 2 + 1], 3).ToString("0.000"), Math.Round(AdlwpPoint[j * 2], 3).ToString("0.000") })
                    {
                        Tag = pSTPoint
                    });
                }
                superGridControlCoords.Tag = Adlwp;
                TxbTXMJ.Text = Adlwp.Area.ToString("0.00");
            }
            finally
            { }
        }
コード例 #2
0
        private string GetPointID()
        {
            //IPipePoint pPipePoint = null;
            AcadObject pAcadObject = PickObject();

            if (pAcadObject == null)
            {
                return(null);
            }
            if (pAcadObject.ObjectName.Equals("AcDbText") || pAcadObject.ObjectName.Equals("AcDbMInsertBlock"))
            {
                AcadDictionary pAcadDictionary = pAcadObject.GetExtensionDictionary();
                if (pAcadDictionary.Count == 1)
                {
                    string ID = (pAcadDictionary.Item(0) as AcadXRecord).Name;
                    return(ID);

                    /*  string SURVEYID = GetPointSURVEYID(ID);
                     * if (SURVEYID != string.Empty)
                     * {
                     *
                     *    return SURVEYID;
                     * }
                     * else return string.Empty;*/
                }
            }
            return(string.Empty);
        }
コード例 #3
0
        private ISTGeometry ConvertDBObject(AcadObject pAcadObject)
        {
            ISTPointCollection pSTPointCollection = new STPolygonClass();
            AcadLWPolyline     Adlwp = (AcadLWPolyline)pAcadObject;

            double[] AdlwpPoint = (double[])Adlwp.Coordinates;
            int      PointCount = AdlwpPoint.Length / 2;

            for (int j = 0; j < PointCount - 1; j++)
            {
                ISTPoint fromPoint = new STPointClass();
                fromPoint.X = AdlwpPoint[j * 2];
                fromPoint.Y = AdlwpPoint[j * 2 + 1];

                ISTPoint toPoint = new STPointClass();
                toPoint.X = AdlwpPoint[j * 2 + 2];
                toPoint.Y = AdlwpPoint[j * 2 + 3];

                if (Adlwp.GetBulge(j) != 0)  //添加弧线转折现处理代码
                {
                    double Angle = Math.Atan(Adlwp.GetBulge(j)) * 4;
                    string url   = HR.Utility.CommonVariables.GetAppSetString("ConvertArcToPolyline");
                    string data  = string.Format("Angle={0}&FromPointX={1}&FromPointY={2}&ToPointX={3}&ToPointY={4}&f=json"
                                                 , Angle, fromPoint.X, fromPoint.Y, toPoint.X, toPoint.Y);
                    string Request = PostData(url, data);
                    if (Request.Contains("error"))
                    {
                        throw new Exception("调用曲线转折线服务异常");
                    }
                    XmlNode  pPointNode = Newtonsoft.Json.JsonConvert.DeserializeXmlNode(Request);
                    string[] XYs        = pPointNode.FirstChild.InnerText.TrimEnd().Split(';');
                    foreach (string XY in XYs)
                    {
                        string[] pXY    = XY.Split(',');
                        ISTPoint pPoint = new STPointClass();
                        try
                        {
                            pPoint.X = double.Parse(pXY[0]);
                            pPoint.Y = double.Parse(pXY[1]);
                            pSTPointCollection.AddPoint(pPoint);
                        }
                        catch { continue; }
                    }
                }
                else
                {
                    pSTPointCollection.AddPoint(fromPoint);
                }
                if (j == PointCount - 2)
                {
                    pSTPointCollection.AddPoint(toPoint);
                }
            }
            ISTPoint FPoint = new STPointClass();

            FPoint.X = AdlwpPoint[0];
            FPoint.Y = AdlwpPoint[1];
            pSTPointCollection.AddPoint(FPoint);
            return(pSTPointCollection);
        }
コード例 #4
0
        private string GetTextString(string title)
        {
            string       str     = string.Empty;
            AcadDocument AcadDoc = AcadApp.ActiveDocument;

            Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);
            object returnObj, pickPoint;
            string pickPrompt = title;

            try
            {
                AcadDoc.Utility.GetEntity(out returnObj, out pickPoint, pickPrompt);
            }
            catch (Exception) { return(""); }
            AcadObject returnCADObj = (AcadObject)returnObj;

            if (returnCADObj.ObjectName == "AcDbText")
            {
                str = ((AcadText)returnCADObj).TextString;
            }
            else if (returnCADObj.ObjectName == "AcDbMText")
            {
                string Text = ((AcadMText)returnCADObj).TextString;
                if (Text.Contains('*'))
                {
                    int FirstIndex = Text.IndexOf('*');
                    str = Text.Substring(FirstIndex, Text.IndexOf('*', FirstIndex + 1) - FirstIndex + 1);
                }
                else
                {
                    str = Text;
                }
            }
            return(str);
        }
コード例 #5
0
        private AcadObject GetHX()
        {
            // tableLayoutPanel2.Enabled = false;
            AcadDocument AcadDoc = AcadApp.ActiveDocument;

            Microsoft.VisualBasic.Interaction.AppActivate(AcadApp.Caption);
            object returnObj, pickPoint;
            string pickPrompt = "获取入库红线";

            try
            {
                AcadDoc.Utility.GetEntity(out returnObj, out pickPoint, pickPrompt);
            }
            catch { return(null); }
            AcadObject returnCADObj = (AcadObject)returnObj;

            if (returnCADObj.ObjectName == "AcDbPolyline")
            {
                AcadLWPolyline Adlwp = (AcadLWPolyline)returnCADObj;
                if (!Adlwp.Closed)
                {
                    return(null);
                }
                GeoChange = true;
                return(returnCADObj);
            }
            //Microsoft.VisualBasic.Interaction.AppActivate(this.Text);
            return(null);
        }
コード例 #6
0
        private bool InternFindTextStyleNameByObjectID(double vdblObjectID, ref string rstrName, ref string nrstrErrMsg)
        {
            nrstrErrMsg = null;
            rstrName    = null;
            AcadDatabase  acadDatabase = mobjAcadDatabase;
            string        nrstrErrMsg2 = "";
            bool          InternFindTextStyleNameByObjectID = default(bool);
            AcadTextStyle dobjAcadTextStyle2;
            AcadObject    dobjAcadObject2 = default(AcadObject);

            if (!acadDatabase.FriendObjectIdToObject(vdblObjectID, ref dobjAcadObject2, ref nrstrErrMsg2))
            {
                nrstrErrMsg = "Objekt kann über die Objekt-ID nicht gefunden werden.";
            }
            else if (Operators.CompareString(dobjAcadObject2.ObjectName, "AcDbTextStyleTableRecord", TextCompare: false) != 0)
            {
                nrstrErrMsg = "Das über die Objekt-ID gefundene Objekt ist ungültig.";
            }
            else
            {
                dobjAcadTextStyle2 = (AcadTextStyle)dobjAcadObject2;
                rstrName           = dobjAcadTextStyle2.Name;
                InternFindTextStyleNameByObjectID = true;
            }
            dobjAcadTextStyle2 = null;
            dobjAcadObject2    = null;
            return(InternFindTextStyleNameByObjectID);
        }
コード例 #7
0
ファイル: SLUICECtrl.cs プロジェクト: chenbin2254/ImportToCAD
        private IPipePoint GetPointObject()
        {
            IPipePoint pPipePoint  = null;
            AcadObject pAcadObject = PickObject();

            if (pAcadObject == null)
            {
                return(null);
            }
            if (pAcadObject.ObjectName.Equals("AcDbText") || pAcadObject.ObjectName.Equals("AcDbMInsertBlock"))
            {
                AcadDictionary pAcadDictionary = pAcadObject.GetExtensionDictionary();
                if (pAcadDictionary.Count > 1)
                {
                    AcadXRecord pAcadXRecord1 = pAcadDictionary.Item(1) as AcadXRecord;

                    AcadXRecord pAcadXRecord2 = pAcadDictionary.Item(0) as AcadXRecord;
                    string      TableName, ID;
                    if (pAcadXRecord1.Name.StartsWith("PS_"))
                    {
                        TableName = pAcadXRecord1.Name;
                        ID        = pAcadXRecord2.Name;
                    }
                    else
                    {
                        TableName = pAcadXRecord2.Name;
                        ID        = pAcadXRecord1.Name;
                    }
                    //if( )
                    pPipePoint = Pipeobject.GetDataByID(ID, TableName) as IPipePoint;
                    return(pPipePoint);
                }
            }
            return(null);
        }
コード例 #8
0
        public AcSmSheet GetSheetFromLayout(AcadObject pAcDbLayout)
        {
            IAcSmSheetSetMgr ssMgr = new AcSmSheetSetMgr();
            AcSmSheet        sheet;

            ssMgr.GetSheetFromLayout(pAcDbLayout, out sheet);
            return(sheet);
        }
コード例 #9
0
        private static void BackHatch(AcadObject AcadObject)
        {
            AcadDictionary    dictionary = AcadDoc.ModelSpace.GetExtensionDictionary();
            AcadSortentsTable sentityObj = (AcadSortentsTable)dictionary.GetObject("ACAD_SORTENTS");

            AcadObject[] entities = new AcadObject[] { AcadObject };
            sentityObj.MoveToBottom(entities);
        }
コード例 #10
0
ファイル: SawingTechOperation.cs プロジェクト: presscad/CAM
        public void SetFromBorder(Border border)
        {
            ProcessingArea = AcadObject.Create(border.ObjectId);
            var par = ((SawingTechProcess)TechProcess).SawingTechProcessParams;

            if (SawingModes == null)
            {
                SawingModes = (border.ObjectId.IsLine() ? par.SawingLineModes : par.SawingCurveModes).ConvertAll(x => x.Clone());
            }
            OuterSide      = border.OuterSide;
            IsExactlyBegin = border.IsExactlyBegin;
            IsExactlyEnd   = border.IsExactlyEnd;
        }
コード例 #11
0
ファイル: Disk3DTechProcessView.cs プロジェクト: presscad/CAM
        private void bObjects_Click(object sender, EventArgs e)
        {
            Acad.SelectObjectIds();
            Interaction.SetActiveDocFocus();
            var ids = Interaction.GetSelection("\nВыберите объекты", $"{AcadObjectNames.Surface},{AcadObjectNames.Region}");

            if (ids.Length == 0)
            {
                return;
            }
            _techProcess.ProcessingArea = AcadObject.CreateList(ids);
            tbObjects.Text = _techProcess.ProcessingArea.GetDesc();
            lbSize.Text    = Acad.GetSize(_techProcess.ProcessingArea);
        }
コード例 #12
0
        private void bObjects_Click(object sender, EventArgs e)
        {
            Interaction.SetActiveDocFocus();
            Acad.SelectObjectIds();
            var ids = Interaction.GetSelection("\nВыберите окружности", AcadObjectNames.Circle);

            if (ids.Length == 0)
            {
                return;
            }
            _techProcess.ProcessingArea = AcadObject.CreateList(ids);
            tbObjects.Text = _techProcess.ProcessingArea.GetDesc();
            Acad.SelectObjectIds(ids);
        }
コード例 #13
0
        private void bObjects_Click(object sender, System.EventArgs e)
        {
            Interaction.SetActiveDocFocus();
            Acad.SelectObjectIds();
            var ids = Interaction.GetSelection("\nВыберите объекты контура");

            if (ids.Length == 0)
            {
                return;
            }
            _techProcess.ProcessingArea = AcadObject.CreateList(ids);
            tbObjects.Text = _techProcess.ProcessingArea.GetDesc();
            Acad.SelectObjectIds(ids);
        }
コード例 #14
0
        private void bProcessingArea_Click(object sender, EventArgs e)
        {
            Interaction.SetActiveDocFocus();
            Acad.SelectObjectIds();
            var ids = Interaction.GetSelection("\nВыберите объекты контура плитки", "LINE");

            if (ids.Length == 0)
            {
                return;
            }
            _techProcess.ProcessingArea = AcadObject.CreateList(ids);
            tbContour.Text = _techProcess.ProcessingArea.GetDesc();
            Acad.SelectObjectIds(ids);
            SetParamsEnabled();
        }
コード例 #15
0
        private void bObjects_Click(object sender, EventArgs e)
        {
            Interaction.SetActiveDocFocus();
            Acad.SelectObjectIds();
            var ids = Interaction.GetSelection("\nВыберите профиль [Отрезок], [Дуга], [Полилиния]", $"{AcadObjectNames.Line},{AcadObjectNames.Arc},{AcadObjectNames.Lwpolyline}");

            if (ids.Length == 0)
            {
                return;
            }
            ids = new ObjectId[] { ids[0] };
            _techProcess.ProcessingArea = AcadObject.CreateList(ids);
            tbObjects.Text = _techProcess.ProcessingArea.GetDesc();
            Acad.SelectObjectIds(ids);
        }
コード例 #16
0
ファイル: TechProcessBase.cs プロジェクト: airmay/CAM
        public virtual void SerializeInit()
        {
            if (OriginX != 0 || OriginY != 0)
            {
                OriginObject = Acad.CreateOriginObject(new Point3d(OriginX, OriginY, 0));
            }

            AcadObject.LoadAcadProps(this);

            TechOperations.ForEach(p =>
            {
                AcadObject.LoadAcadProps(p);
                p.TechProcessBase = this;
                p.SerializeInit();
            });
        }
コード例 #17
0
        private void bRail_Click(object sender, EventArgs e)
        {
            Interaction.SetActiveDocFocus();
            Acad.SelectObjectIds();
            var ids = Interaction.GetSelection("\nВыберите направляющую [Отрезок]", AcadObjectNames.Line);

            if (ids.Length == 1)
            {
                _techProcess.Rail = AcadObject.Create(ids[0]);
                tbRail.Text       = _techProcess.Rail.GetDesc();
                Acad.SelectObjectIds(ids);
            }
            else
            {
                _techProcess.Rail = null;
                tbRail.Text       = "";
            }
        }
コード例 #18
0
        public static void ShowFields()
        {
            var Selection = Input.Objects("Выделите объекты для просмотра полей"); if (Input.StatusBad)

            {
                return;
            }

            using (var th = new TransactionHelper())
            {
                var AcadObjects = th.ReadObjects(Selection);
                foreach (var AcadObject in AcadObjects)
                {
                    var AcadObjectType = AcadObject.GetType();
                    Messaging.Tweet("Объект типа " + AcadObjectType.Name);
                    BaseTypeInfo(AcadObjectType, AcadObject);
                }
            }
        }
コード例 #19
0
        private void bObjects_Click(object sender, EventArgs e)
        {
            if (_techProcess.ProcessingArea == null)
            {
                Acad.Alert("Укажите контур плитки");
                return;
            }
            Interaction.SetActiveDocFocus();
            Acad.SelectObjectIds();
            var ids = Interaction.GetSelection("\nВыберите 2 элемента плитки");

            if (ids.Length > 0)
            {
                _techProcess.CalcType(ids);
                _techProcess.Objects = AcadObject.CreateList(ids);
                tbObjects.Text       = _techProcess.Objects.GetDesc();
                tactileTechProcessBindingSource.ResetBindings(false);
                SetParamsEnabled();
            }
        }
コード例 #20
0
ファイル: SLUICECtrl.cs プロジェクト: chenbin2254/ImportToCAD
        private AcadObject PickObject()
        {
            try
            {
                Document     acDoc   = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                AcadDocument AcadDoc = acDoc.AcadDocument as AcadDocument;

                Microsoft.VisualBasic.Interaction.AppActivate(AcadDoc.Application.Caption);
                keybd_event(Keys.Escape, 0, 0, 0);
                SendKeys.SendWait("{ESC}");
                System.Windows.Forms.Application.DoEvents();
                object returnObj, pickPoint;
                string pickPrompt = "选择对象";
                AcadDoc.Utility.GetEntity(out returnObj, out pickPoint, pickPrompt);
                AcadObject returnCADObj = (AcadObject)returnObj;

                return(returnCADObj);
            }
            catch
            { return(null); }
        }
コード例 #21
0
        public IXMRK GetXMRK()
        {
            if (m_XMRK == null)
            {
                m_XMRK = new XMRKClass();
            }
            //添加获取属性信息代码


            if (GeoChange)//如果重新设置了图形
            {
                AcadObject pAcadObject = superGridControlCoords.Tag as AcadObject;
                if (m_XMRK.ID == -1 && pAcadObject == null)
                {
                    throw new Exception("未获取入库图形");
                }
                m_XMRK.STGeometry = ConvertDBObject(pAcadObject);
                //m_XMRK.STGeometry.SRID = 300000;
                //if (!m_XMRK.STGeometry.IsSimplify())
                //{
                m_XMRK.STGeometry = m_XMRK.STGeometry.Simplify();
                //   m_XMRK.CADPath=
                //}

                ISTPointCollection pSTPointCollection = new STPointCollectionClass();
                double[]           AdlwpPoint         = (double[])(pAcadObject as AcadLWPolyline).Coordinates;
                int PointCount = AdlwpPoint.Length / 2;
                for (int j = 0; j < PointCount; j++)
                {
                    ISTPoint pSTPoint = new STPointClass()
                    {
                        X = AdlwpPoint[j * 2], Y = AdlwpPoint[j * 2 + 1]
                    };
                    pSTPointCollection.AddPoint(pSTPoint);
                }
                m_XMRK.SoucePoints = pSTPointCollection;
            }
            return(m_XMRK);
        }
コード例 #22
0
ファイル: SawingTechProcess.cs プロジェクト: airmay/CAM
        public List <Border> CreateExtraObjects(params ObjectId[] ids)
        {
            ExtraObjectsGroup?.DeleteGroup();
            ExtraObjectsGroup = null;

            var techOperations = TechOperations.FindAll(p => p.ProcessingArea != null);

            techOperations.FindAll(p => ids.Contains(p.ProcessingArea.ObjectId)).ForEach(p => ((SawingTechOperation)p).OuterSide = Side.None);
            _borders = ids.Except(techOperations.Select(p => p.ProcessingArea.ObjectId)).Select(p => new Border(p)).ToList();
            var borders = _borders.Concat(techOperations.Select(p => new Border((SawingTechOperation)p))).ToList();

            borders.ForEach(p => p.Curve = Acad.OpenForRead(p.ObjectId));
            ProcessingArea = AcadObject.CreateList(borders.Select(p => p.ObjectId));

            while ((borders.Find(p => p.OuterSide != Side.None) ?? borders.FirstOrDefault()) is Border startBorder)
            {
                if (startBorder.OuterSide == Side.None)
                {
                    startBorder.OuterSide = GetOuterSide(startBorder.Curve);
                }
                var contour = CalcBordersChain(startBorder, Corner.End);
                if (borders.Contains(startBorder))
                {
                    var contourBack = CalcBordersChain(startBorder, Corner.Start);
                    contourBack.Reverse();
                    contourBack.Add(startBorder.Curve);
                    contourBack.AddRange(contour);
                    contour = contourBack;
                    borders.Remove(startBorder);
                }
                var sign = startBorder.OuterSide == Side.Left ? 1 : -1;

                var hatchId = Graph.CreateHatch(contour, sign);
                if (hatchId.HasValue)
                {
                    ExtraObjectsGroup = ExtraObjectsGroup.AppendToGroup(hatchId.Value);
                }
            }
            return(_borders);

            List <Curve> CalcBordersChain(Border border, Corner corner)
            {
                var point   = border.Curve.GetPoint(corner);
                var contour = new List <Curve>();

                while (borders.SingleOrDefault(p => p != border && p.Curve.HasPoint(point)) is Border nextBorder)
                {
                    contour.Add(nextBorder.Curve);
                    borders.Remove(nextBorder);
                    var nextCorner = nextBorder.Curve.GetCorner(point);
                    nextBorder.OuterSide = nextCorner != corner ? border.OuterSide : border.OuterSide.Opposite();

                    if (border.MustCalc || nextBorder.MustCalc)
                    {
                        var isExactly = CalcIsExactly(border, corner, nextBorder, nextCorner, point);
                        border.SetIsExactly(corner, isExactly);
                        nextBorder.SetIsExactly(nextCorner, isExactly);
                    }
                    border = nextBorder;
                    corner = nextCorner.Swap();
                    point  = border.Curve.GetPoint(corner);
                }
                return(contour);
            }

            bool CalcIsExactly(Border border, Corner corner, Border nextBorder, Corner nextCorner, Point3d point)
            {
                var v1               = border.Curve.GetTangent(corner);
                var v2               = nextBorder.Curve.GetTangent(nextCorner);
                var isLeftTurn       = v1.MinusPiToPiAngleTo(v2) > Consts.Epsilon;
                var isLeftOuterSide  = border.OuterSide == Side.Left;
                var isNextStartPoint = nextCorner == Corner.Start;

                return(isLeftTurn ^ isLeftOuterSide ^ isNextStartPoint);
            }

            Side GetOuterSide(Curve curve)
            {
                var startPoint = curve.GetPointAtParameter((curve.EndParam + curve.StartParam) / 2);
                var point      = Interaction.GetLineEndPoint("Выберите направление внешней нормали к объекту", startPoint);
                var vector     = curve.GetTangent(startPoint);

                return(vector.IsTurnRight((point - startPoint).ToVector2d()) ? Side.Right : Side.Left);
            }
        }
コード例 #23
0
        private void DrawCircle(Point3d ZoomPoint)
        {
            DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
            Document     acDoc   = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database     acCurDb = acDoc.Database;
            Entity       entity  = null;

            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                LayerTable       acLyrTbl     = acTrans.GetObject(acCurDb.LayerTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) as LayerTable;
                string           strLayerName = "Zoom";
                LayerTableRecord acLyrTblRec  = new LayerTableRecord();

                if (acLyrTbl.Has(strLayerName) == false)
                {
                    acLyrTblRec.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(255, 255, 255);
                    acLyrTblRec.Name  = strLayerName;
                    acLyrTbl.UpgradeOpen();
                    acLyrTbl.Add(acLyrTblRec);
                    acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true);
                }
                else
                {
                    TypedValue[] glq = new TypedValue[]
                    {
                        new TypedValue((int)DxfCode.LayerName, strLayerName)
                    };
                    SelectionFilter       sf = new SelectionFilter(glq);
                    PromptSelectionResult SS = acDoc.Editor.SelectAll(sf);
                    Autodesk.AutoCAD.EditorInput.SelectionSet SSet = SS.Value;
                    if (SSet != null)
                    {
                        foreach (ObjectId id in SSet.GetObjectIds())
                        {
                            AcadObject Adobj = null;
                            entity = (Entity)acTrans.GetObject(id, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite, true);
                            DBObject obj = (DBObject)entity;
                            Adobj = (AcadObject)obj.AcadObject;
                            Adobj.Delete();
                        }
                    }
                }

                BlockTable       acBlkTbl;
                BlockTableRecord acBlkTblRec;
                acBlkTbl    = acTrans.GetObject(acCurDb.BlockTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead) as BlockTable;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as BlockTableRecord;

                Circle acCirc = new Circle();
                acCirc.SetDatabaseDefaults();
                acCirc.Center = ZoomPoint;
                acCirc.Radius = 0.05;
                acCirc.Layer  = strLayerName;

                acBlkTblRec.AppendEntity(acCirc);
                acTrans.AddNewlyCreatedDBObject(acCirc, true);

                ObjectIdCollection collection = new ObjectIdCollection();
                collection.Add(acCirc.ObjectId);

                Hatch hatch = new Hatch();
                hatch.HatchStyle = HatchStyle.Normal;
                hatch.Layer      = strLayerName;
                hatch.Color      = Autodesk.AutoCAD.Colors.Color.FromRgb(0, 0, 255);
                hatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
                hatch.AppendLoop(HatchLoopTypes.Default, collection);
                hatch.EvaluateHatch(true);
                acBlkTblRec.AppendEntity(hatch);
                acTrans.AddNewlyCreatedDBObject(hatch, true);

                docLock.Dispose();
                acTrans.Commit();
            }
        }