Beispiel #1
0
        public static DBObject Create(this Grevit.Types.DrawingPoint a, Transaction tr)
        {
            try
            {
                LayerTable lt  = (LayerTable)tr.GetObject(Command.Database.LayerTableId, OpenMode.ForRead);
                Point3d    pp  = a.point.ToPoint3d();
                DBPoint    ppp = new DBPoint(pp);
                ppp.SetDatabaseDefaults(Command.Database);

                if (a.TypeOrLayer != "")
                {
                    if (lt.Has(a.TypeOrLayer))
                    {
                        ppp.LayerId = lt[a.TypeOrLayer];
                    }
                }
                BlockTable       bt = (BlockTable)tr.GetObject(Command.Database.BlockTableId, OpenMode.ForRead);
                BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                ms.AppendEntity(ppp);
                tr.AddNewlyCreatedDBObject(ppp, true);
                return(ppp);
            }

            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
            }


            return(null);
        }
        private void DrawPoint(Point3d a)
        {
            DBPoint b = new DBPoint(a);

            Ed.WriteMessage("selamın aleyküm");
            AppendEntity(Db.BlockTableId, b);
        }
        public static Point3dCollection GetPoints()
        {
            Document activeDoc = Application.DocumentManager.MdiActiveDocument;
            Database db        = activeDoc.Database;
            Editor   ed        = activeDoc.Editor;

            TypedValue[] values = { new TypedValue((int)DxfCode.Start, "Point") };

            SelectionFilter       filter = new SelectionFilter(values);
            PromptSelectionResult psr    = ed.SelectAll(filter);
            SelectionSet          ss     = psr.Value;

            if (ss == null)
            {
                return(null);
            }

            Point3dCollection collPoints = new Point3dCollection();

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                for (int i = 0; i < ss.Count; ++i)
                {
                    DBPoint dbPt = trans.GetObject(ss[i].ObjectId, OpenMode.ForRead) as DBPoint;
                    collPoints.Add(new Point3d(dbPt.Position.X, dbPt.Position.Y, dbPt.Position.Z));
                }
                trans.Commit();
            }
            return(collPoints);
        }
Beispiel #4
0
        private static SpreadPoint GetSpreadPoint(DBPoint dbPoint)
        {
            var rbName = dbPoint.GetXDataForApplication(_nameAppName);

            if (rbName == null)
            {
                return(null);
            }
            var rbCode = dbPoint.GetXDataForApplication(_codeAppName);

            if (rbCode == null)
            {
                return(null);
            }

            var rbNameArray = rbName.AsArray();
            var rbCodeArray = rbCode.AsArray();

            if (rbCodeArray.Length < 2 || rbNameArray.Length < 2)
            {
                return(null);
            }

            return(new SpreadPoint()
            {
                Point = dbPoint.Position,
                Name = (string)rbNameArray[1].Value,
                Code = (string)rbCodeArray[1].Value
            });
        }
Beispiel #5
0
        /// <summary> 计算选择的所有曲线的面积与长度之和 </summary>
        public ExternalCmdResult Polyline2Point(DocumentModifier docMdf, SelectionSet impliedSelection)
        {
            _docMdf = docMdf;
            //
            var pl = SelectUtils.PickEntity <Polyline3d>(docMdf.acEditor, message: "选择一个三维多段线对象");

            if (pl == null)
            {
                return(ExternalCmdResult.Cancel);
            }

            //
            var cs = EditStateIdentifier.GetCurrentEditState(docMdf);

            cs.CurrentBTR.UpgradeOpen();

            foreach (ObjectId id in pl)
            {
                var vert = id.GetObject(OpenMode.ForRead) as PolylineVertex3d;
                if (vert != null)
                {
                    var     pt = vert.Position;
                    DBPoint p  = new DBPoint(pt);
                    cs.CurrentBTR.AppendEntity(p);
                    docMdf.acTransaction.AddNewlyCreatedDBObject(p, true);
                }
            }
            cs.CurrentBTR.DowngradeOpen();

            return(ExternalCmdResult.Commit);
        }
Beispiel #6
0
        public void IzradiPoint()
        {
            Corridor corr   = OdabraniCorridor();
            Point3d  ptDraw = PocetnaTockaNaStacionaziD(corr);

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                BlockTable acBlkTbl;
                acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord acBlkTblRec;
                acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                DBPoint acPoint = new DBPoint(ptDraw);


                acBlkTblRec.AppendEntity(acPoint);
                tr.AddNewlyCreatedDBObject(acPoint, true);

                db.Pdmode = 34;
                db.Pdsize = 10;

                tr.Commit();
            }
        }
        //------------------------------------------------------------------------//
        //
        public static void AddPinToModel(DBPoint P, int mode, double size, int color = 255)
        {
            Document acDoc   = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;

            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                if (acBlkTblRec == null)
                {
                    return;
                }

                acCurDb.Pdmode = mode;
                acCurDb.Pdsize = size;

                P.ColorIndex = color;
                acBlkTblRec.AppendEntity(P);
                acTrans.AddNewlyCreatedDBObject(P, true);

                acTrans.Commit();
            }
        }
Beispiel #8
0
        public void MidPoint()
        {
            Document doc = GetDocument();
            Database db  = doc.Database;
            Editor   ed  = doc.Editor;

            try
            {
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    PromptSelectionOptions pso    = new PromptSelectionOptions();
                    TypedValue[]           tv     = new TypedValue[] { new TypedValue(0, "POINT") };
                    SelectionFilter        filter = new SelectionFilter(tv);

                    PromptSelectionResult psr = ed.GetSelection(filter);

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

                    var    res = psr.Value.GetObjectIds();
                    double x = 0, y = 0;
                    int    n = 0;
                    foreach (ObjectId objectId in res)
                    {
                        var pt = trans.GetObject(objectId, OpenMode.ForRead) as DBPoint;
                        if (pt != null)
                        {
                            n++;
                            x += pt.Position.X;
                            y += pt.Position.Y;
                        }
                    }
                    if (n == 0)
                    {
                        return;
                    }

                    var avgPt = new Point3d(x / n, y / n, 0);

                    BlockTable bt = trans.GetObject(db.BlockTableId
                                                    , OpenMode.ForRead) as BlockTable;

                    BlockTableRecord btr = trans.GetObject(
                        bt[BlockTableRecord.ModelSpace],
                        OpenMode.ForWrite) as BlockTableRecord;

                    DBPoint po = new DBPoint(avgPt);
                    btr.AppendEntity(po);
                    trans.AddNewlyCreatedDBObject(po, true);

                    trans.Commit();
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage(ex.Message + ex.StackTrace);
            }
        }
Beispiel #9
0
        public static void Touch(ObjectId[] polylineIds)
        {
            var database = polylineIds[0].Database;

            using (var tr = database.TransactionManager.StartTransaction())
            {
                foreach (var polylineId in polylineIds)
                {
                    var curve = tr.GetObject(polylineId, OpenMode.ForRead) as Curve;

                    // 读取CAD图元
                    var reader     = new DwgReader();
                    var lineString = reader.ReadGeometry(curve, tr) as LineString;
                    //lineString.Touches()

                    // 做出缓冲区
                    var geometry = LineStringSelfIntersectionsOp(lineString);

                    if (geometry.GeometryType == "Point")
                    {
                        var     writer = new DwgWriter();
                        DBPoint dbPt   = writer.WriteDbPoint(geometry as Point);
                        CadUtils.DrawPoint(tr, database, dbPt);
                    }
                }

                tr.Commit();
            }
        }
        private bool _AddCenterPointToList(Entity ent, ref List <Point3d> lists)
        {
            Circle circle = ent as Circle;

            if (circle != null)
            {
                if (!lists.Contains(circle.Center))
                {
                    lists.Add(circle.Center);
                    return(true);
                }

                return(false);
            }

            DBPoint point = ent as DBPoint;

            if (point != null)
            {
                if (!lists.Contains(point.Position))
                {
                    lists.Add(point.Position);
                    return(true);
                }

                return(false);
            }

            return(false);
        }
Beispiel #11
0
        public static BlockTableRecord GetRedPointTemplate(Database documentDatabase)
        {
            var entities = new List <Entity>();

            DBPoint dbPoint = new DBPoint(new Point3d(0, 0, 0));

            //dbPoint.SetDatabaseDefaults();

            dbPoint.Color = Color.FromRgb(255, 0, 0);
            entities.Add(dbPoint);

            var text = new MText();

            text.Location   = new Point3d(0.05, 0, 0);
            text.Attachment = AttachmentPoint.MiddleLeft;
            text.TextHeight = 0.05;
            text.Color      = dbPoint.Color;
            text.Contents   = "redPoint_";
            entities.Add(text);

            var block = CreateNewBlock(documentDatabase);

            SetBlockEntities(block, entities);

            return(block);
        }
Beispiel #12
0
        void GenerateLink()
        {
            Database db   = Application.DocumentManager.MdiActiveDocument.Database;
            Line     Elem = new Line();
            DBPoint  Node = new DBPoint();
            Point3d  pt   = new Point3d();

            double earthkeyx1 = -30000;
            double earthkeyx2 = -80000;

            List <double> earthxlist = Linsteps(earthkeyx1, earthkeyx2, -5000).ToList();
            List <double> towerzlist = Linsteps(FrontE.StartPoint.Z, FrontE.StartPoint.Z + 10 * 2500, 2500).ToList();
            List <double> beamxlist = Linsteps(keyx3, keyx4, cabledx).ToList();
            int           nearth, ntower, nbeam;
            int           comm = -1;

            foreach (double tz in towerzlist)
            {
                comm++;
                for (int dir = -1; dir <= 2; dir += 2)
                {
                    double ex = earthxlist[comm];
                    double bx = beamxlist[comm];
                    double ey = dir * 11000;

                    pt   = new Point3d(ex, ey, 0);
                    Node = new DBPoint(pt);
                    Node.SetNodeId(db, GlobalNodeId);
                    NodeList.Add(Node);
                    nearth = GlobalNodeId;
                    GlobalNodeId++;

                    double tx = GetBackXCoord(tz);
                    double ty = dir * Math.Sqrt((tz - tlevel) * (11000 * 11000) / (beamlevel - tlevel));


                    pt     = new Point3d(tx, ty, tz);
                    Node   = new DBPoint(pt);
                    ntower = GetClosestDBP(Node);

                    pt    = new Point3d(bx, ey, 0);
                    Node  = new DBPoint(pt);
                    nbeam = GetClosestDBP(Node);

                    if (nbeam == -1 || ntower == -1 || nearth == -1)
                    {
                        ;
                    }
                    Elem = new Line(NodeList[GetNodeListIndex(nearth)].Position, NodeList[GetNodeListIndex(ntower)].Position);
                    Elem.SetElemXData(db, nearth, ntower, 0, GlobalElemId, "背索");
                    ElemList.Add(Elem);
                    GlobalElemId++;

                    Elem = new Line(NodeList[GetNodeListIndex(ntower)].Position, NodeList[GetNodeListIndex(nbeam)].Position);
                    Elem.SetElemXData(db, ntower, nbeam, 0, GlobalElemId, "主索");
                    ElemList.Add(Elem);
                    GlobalElemId++;
                }
            }
        }
Beispiel #13
0
Datei: Db.cs Projekt: 15831944/EM
        makePointEnt(Point3d pt, int colorIndex, Database db)
        {
            int mode = (int)AcadApp.GetSystemVariable("pdmode");

            if (mode == 0)
            {
                AcadApp.SetSystemVariable("pdmode", 99);
            }

            try
            {
                using (Transaction tr = BaseObjs.startTransactionDb())
                {
                    using (DBPoint dbPt = new DBPoint(pt))
                    {
                        dbPt.ColorIndex = colorIndex;
                        SymTbl.AddToCurrentSpace(dbPt, db);
                    }
                    tr.Commit();
                }
            }
            catch (System.Exception ex)
            {
                BaseObjs.writeDebug(ex.Message + " Db.cs: line: 431");
            }
        }
Beispiel #14
0
        public static void Create(Grevit.Types.DrawingPoint a)
        {
            Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
            Transaction tr = db.TransactionManager.StartTransaction();
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            try
            {
                LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);
                Point3d pp = GrevitPtoPoint3d(a.point);
                DBPoint ppp = new DBPoint(pp);
                ppp.SetDatabaseDefaults(db);

                if (a.TypeOrLayer != "") { if (lt.Has(a.TypeOrLayer)) ppp.LayerId = lt[a.TypeOrLayer]; }
                BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                ms.AppendEntity(ppp);
                tr.AddNewlyCreatedDBObject(ppp, true);
                writeProperties(ppp, a.parameters, tr);
                storeID(a, ppp.Id);
                tr.Commit();
            }

            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
                ed.WriteMessage(e.Message);
                tr.Abort();
            }

            finally
            {
                tr.Dispose();
            }
        }
Beispiel #15
0
 /// <summary>
 /// Создание расчетной точки из найденной точки на чертеже (DBPoint)
 /// </summary>
 /// <param name="dbPt">Инс точка на чертеже</param>
 /// <param name="model">Модель</param>
 public InsPointBase(DBPoint dbPt, InsModel model)
 {
     this.Model = model;
     Point      = dbPt.Position;
     DBPointId  = dbPt.Id;
     SubscribeDbo(dbPt);
 }
Beispiel #16
0
        private static ObjectId GetSpreadPointAnnotationId(DBPoint dbPoint, Transaction transaction)
        {
            var groupId = GetSpreadPointGroupId(dbPoint, transaction);

            if (groupId.IsNull)
            {
                return(ObjectId.Null);
            }

            ObjectId resultId  = ObjectId.Null;
            var      group     = transaction.GetObject(groupId, OpenMode.ForRead) as Group;
            var      entityIds = group.GetAllEntityIds();

            foreach (ObjectId id in entityIds)
            {
                var text = transaction.GetObject(id, OpenMode.ForRead) as DBText;
                if (text != null)
                {
                    resultId = id;
                    text.Dispose();
                    break;
                }
            }
            group.Dispose();
            return(resultId);
        }
        /// <summary>
        /// Function for editing autocad draw if user want to color marks
        /// </summary>
        /// <param name="mark">Current deformation mark</param>
        /// <param name="trans">Current transaction</param>
        public static void EditIfColor(DeformationMark mark, Transaction trans)
        {
            DBText  name  = null;
            DBPoint point = null;

            try
            {
                name  = (DBText)trans.GetObject(mark.NameId, OpenMode.ForRead);
                point = (DBPoint)trans.GetObject(mark.PointId, OpenMode.ForRead);
            }
            catch (Exception)
            {
                WinForms.MessageBox.Show("ERROR: Не удалось найти на чертеже примитивы для марки " + mark.Name, "Ошибка");
                throw;
            }

            if (mark.Status == false)
            {
                ColorText(name, 1);
                ColorPoint(point, 1);
            }
            else
            {
                ColorText(name, 3);
                ColorPoint(point, 3);
            }
        }
Beispiel #18
0
        Point()
        {
            m_db = Utils.Db.GetCurDwg();

            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

            PromptPointOptions prPtOpt = new PromptPointOptions("\nPoint");
            PromptPointResult  prPtRes = ed.GetPoint(prPtOpt);

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

            using (DBPoint point = new DBPoint()) {
                point.Position = prPtRes.Value;
                Utils.Db.TransformToWcs(point, m_db);

                // TBD: not sure why, but the call to set the EcsRotation must come
                // after we do the TransformToWcs().  Need to investigate whether that
                // is a bug or intended behavior.
                point.EcsRotation = GetDimHorizRotation();
                Utils.SymTbl.AddToCurrentSpaceAndClose(point, m_db);
            }
        }
Beispiel #19
0
        public static ObjectId CreatePoint(Point3d p1)
        {
            // Get the current document and database
            Document acDoc   = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;
            var      outLine = ObjectId.Null;

            // Start a transaction
            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                // Open the Block table for read
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                                             OpenMode.ForRead) as BlockTable;

                // Open the Block table record Model space for write
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                                OpenMode.ForWrite) as BlockTableRecord;

                var pnt = new DBPoint(p1);
                // Add the new object to the block table record and the transaction
                outLine = acBlkTblRec.AppendEntity(pnt);
                acTrans.AddNewlyCreatedDBObject(pnt, true);

                // Save the new object to the database
                acTrans.Commit();
            }
            return(outLine);
        }
Beispiel #20
0
 public static void DrawPoint(Transaction tr, Database database, Point3d point3D, int colorIndex = 1)
 {
     using (var dbPt = new DBPoint(point3D))
     {
         DrawPoint(tr, database, dbPt, colorIndex);
     }
 }
        /// <summary>
        /// Create AutoCAD's object-point by Dynamo's point and option include Z-cordinate. Return an object id of item.
        /// </summary>
        /// <param name="doc_dyn"></param>
        /// <param name="Point_position"></param>
        /// <param name="IncludeZ"></param>
        /// <returns></returns>
        public static ObjectId CreateAcadPoint(Autodesk.AutoCAD.DynamoNodes.Document doc_dyn, DynGeom.Point Point_position, bool IncludeZ = true)
        {
            //Document doc = Application.DocumentManager.MdiActiveDocument;
            Document doc      = doc_dyn.AcDocument;
            Database db       = doc.Database;
            ObjectId point_id = ObjectId.Null;

            using (DocumentLock acDocLock = doc.LockDocument())
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    BlockTable acBlkTbl;
                    acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                    BlockTableRecord acBlkTblRec;
                    acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                    double coord_z = Point_position.Z; if (!IncludeZ)
                    {
                        coord_z = 0d;
                    }
                    DBPoint acPoint = new DBPoint(new Point3d(Point_position.X, Point_position.Y, coord_z));
                    acBlkTblRec.AppendEntity(acPoint);
                    tr.AddNewlyCreatedDBObject(acPoint, true);
                    point_id = acPoint.ObjectId;


                    tr.Commit();
                }
            }
            return(point_id);
        }
Beispiel #22
0
        public static DBObject Create(this Grevit.Types.DrawingPoint a, Transaction tr)
        {
            try
            {
                LayerTable lt = (LayerTable)tr.GetObject(Command.Database.LayerTableId, OpenMode.ForRead);
                Point3d pp = a.point.ToPoint3d();
                DBPoint ppp = new DBPoint(pp);
                ppp.SetDatabaseDefaults(Command.Database);

                if (a.TypeOrLayer != "") { if (lt.Has(a.TypeOrLayer)) ppp.LayerId = lt[a.TypeOrLayer]; }
                BlockTable bt = (BlockTable)tr.GetObject(Command.Database.BlockTableId, OpenMode.ForRead);
                BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                ms.AppendEntity(ppp);
                tr.AddNewlyCreatedDBObject(ppp, true);
                return ppp;
            }

            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
            }


            return null;

        }
Beispiel #23
0
        /// <summary>
        /// Add point by Point3d set
        /// </summary>
        /// <param name="points"></param>
        public void Create(HashSet <Point3d> points)
        {
            if (points == null)
            {
                return;
            }
            var db = HostApplicationServices.WorkingDatabase;

            using (var trans = db.TransactionManager.StartTransaction())
            {
                var blkTbl = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                if (blkTbl == null)
                {
                    return;
                }

                var rcd = trans.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                if (rcd == null)
                {
                    return;
                }

                foreach (var pt in points)
                {
                    var dbPt = new DBPoint(pt);
                    rcd.AppendEntity(dbPt);
                    trans.AddNewlyCreatedDBObject(dbPt, true);
                }

                trans.Commit();
            }
        }
        public static ObjectId CreatePoint(this Database database, Point3d p, string layerName = null, short layerColor = 256, short entityCollor = 256)
        {
            using (var transAction = database.TransactionManager.StartOpenCloseTransaction())
            {
                // Get the layer table from the drawing
                using (var blocktable = (BlockTable)transAction.GetObject(database.BlockTableId, OpenMode.ForRead))
                {
                    var blockTableRecord = (BlockTableRecord)transAction.GetObject(blocktable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                    ObjectId id;
                    //create the entity
                    using (var dbPoint = new DBPoint(p))

                    {
                        dbPoint.SetDatabaseDefaults();

                        if (layerName != null)
                        {
                            database.CreateLayer(layerName, layerColor, "");
                            dbPoint.Layer = layerName;
                        }

                        dbPoint.ColorIndex = entityCollor;
                        id = blockTableRecord.AppendEntity(dbPoint);
                        transAction.AddNewlyCreatedDBObject(dbPoint, true);
                        transAction.Commit();
                        return(id);
                    }
                }
            }
        }
        public static void AddPoint(Point3d pt3)
        {
            Document acDoc   = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;

            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                // Open the Block table for read
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;

                // Open the Block table record Model space for write
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                using (DBPoint acPoint = new DBPoint(pt3))
                {
                    // Add the new object to the block table record and the transaction
                    acBlkTblRec.AppendEntity(acPoint);
                    acTrans.AddNewlyCreatedDBObject(acPoint, true);
                }

                // Save the new object to the database
                acTrans.Commit();
            }
        }
Beispiel #26
0
        public void iCmd_ConvertCircleToPoint()
        {
            IList <Circle> circles;

            if (!TrySelectObjects <Circle>(out circles, OpenMode.ForRead, "\nВыберите круги: "))
            {
                return;
            }
            try
            {
                using (Transaction trans = Tools.StartTransaction())
                {
                    BlockTable acBlkTbl;
                    acBlkTbl = trans.GetObject(Application.DocumentManager.MdiActiveDocument.Database.BlockTableId,
                                               OpenMode.ForRead) as BlockTable;
                    BlockTableRecord acBlkTblRec;
                    acBlkTblRec = trans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                                  OpenMode.ForWrite) as BlockTableRecord;
                    foreach (var circle in circles)
                    {
                        DBPoint point = new DBPoint(new Point3d(circle.Center.ToArray()));
                        point.SetDatabaseDefaults();
                        acBlkTblRec.AppendEntity(point);
                        trans.AddNewlyCreatedDBObject(point, true);
                    }
                    trans.Commit();
                }
            }
            catch (Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); }
        }
Beispiel #27
0
        public void AddPointZ()
        {
            Editor             ed            = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptPointOptions getStartPoint = new PromptPointOptions("Select start point");
            PromptPointResult  startPoint    = ed.GetPoint(getStartPoint);

            PromptPointOptions getEndtPoint = new PromptPointOptions("Select end point");
            PromptPointResult  endPoint     = ed.GetPoint(getEndtPoint);

            PromptPointOptions getNewPoint = new PromptPointOptions("Select new point");
            PromptPointResult  newPoint    = ed.GetPoint(getNewPoint);

            //Create new point
            Database    curDwg      = Application.DocumentManager.MdiActiveDocument.Database;
            Transaction transaction = curDwg.TransactionManager.StartTransaction();
            BlockTable  blkTbl;

            blkTbl = transaction.GetObject(curDwg.BlockTableId, OpenMode.ForRead) as BlockTable;

            BlockTableRecord blkTblRec;

            blkTblRec = transaction.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

            // Create a point with selected new point
            double xStartPoint = startPoint.Value.X;
            double yStartPoint = startPoint.Value.Y;
            double zStartPoint = startPoint.Value.Z;

            double xEndPoint = endPoint.Value.X;
            double yEndPoint = endPoint.Value.Y;
            double zEndPoint = endPoint.Value.Z;

            double xCreatePoint = newPoint.Value.X;
            double yCreatePoint = newPoint.Value.Y;
            double zCreatePoint;

            double distanceStartEndPoints = Math.Sqrt(Math.Pow((xStartPoint - xEndPoint), 2) + Math.Pow((yStartPoint - yEndPoint), 2));
            double distanceStartNewPoints = Math.Sqrt(Math.Pow((xStartPoint - xCreatePoint), 2) + Math.Pow((yStartPoint - yCreatePoint), 2));

            zCreatePoint = Math.Abs(zStartPoint - zEndPoint) * distanceStartNewPoints / distanceStartEndPoints + zStartPoint;

            //point addition TODO commented START
            DBPoint dbPoint = new DBPoint(new Point3d(xCreatePoint, yCreatePoint, zCreatePoint));

            dbPoint.SetDatabaseDefaults();
            // Add the new object to the block table record and the transaction
            blkTblRec.AppendEntity(dbPoint);
            transaction.AddNewlyCreatedDBObject(dbPoint, true);
            //point addition TODO commented END

            // Save the new object to the database
            transaction.Commit();

#if (DEBUG_PRINT)
            Application.ShowAlertDialog("start point = (" + xStartPoint.ToString() + " ," + yStartPoint.ToString() + " ," + zStartPoint.ToString() + ")");
            Application.ShowAlertDialog("end point = (" + xEndPoint.ToString() + " ," + yEndPoint.ToString() + " ," + zEndPoint.ToString() + ")");
            Application.ShowAlertDialog("distanceStartEndPoints=" + distanceStartEndPoints.ToString() + "; distanceStartNewPoints=" + distanceStartNewPoints.ToString() + ")");
#endif
        }
Beispiel #28
0
        public void PLinePoints()
        {
            Document doc = GetDocument();
            Database db  = doc.Database;
            Editor   ed  = doc.Editor;

            try
            {
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    PromptEntityOptions peo = new PromptEntityOptions(
                        "\nSelect a polyline: ")
                    {
                        AllowNone = false
                    };
                    peo.SetRejectMessage("\n>>>Select a polyline: ");
                    peo.AddAllowedClass(typeof(Polyline), true);
                    PromptEntityResult per;
                    Polyline           pline;
                    while (true)
                    {
                        per = ed.GetEntity(peo);
                        if (per.Status == PromptStatus.Cancel)
                        {
                            return;
                        }
                        pline = trans.GetObject(per.ObjectId, OpenMode.ForRead) as Polyline;
                        if (per.Status == PromptStatus.OK && pline != null)
                        {
                            break;
                        }
                    }

                    //pline = trans.GetObject(per.ObjectId, OpenMode.ForRead) as Polyline;

                    BlockTable bt = trans.GetObject(db.BlockTableId
                                                    , OpenMode.ForRead) as BlockTable;

                    BlockTableRecord btr = trans.GetObject(
                        bt[BlockTableRecord.ModelSpace],
                        OpenMode.ForWrite) as BlockTableRecord;

                    for (int i = 0, len = pline.NumberOfVertices; i < len; i++)
                    {
                        DBPoint po = new DBPoint(pline.GetPoint3dAt(i));
                        btr.AppendEntity(po);
                        trans.AddNewlyCreatedDBObject(po, true);
                    }
                    db.Pdsize = -2;
                    db.Pdmode = 35;

                    trans.Commit();
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage(ex.Message + ex.StackTrace);
            }
        }
Beispiel #29
0
 /// <summary>
 /// 往要生成的点表中插入一条记录
 /// </summary>
 /// <param name="pointEnt">点实体类型</param>
 private void AppendPoint(DBPoint pointEnt)
 {
     System.Data.DataRow dr = GetPointTable().NewRow();
     dr[POSITION]  = PntToString(pointEnt.Position);
     dr[BLOCKNAME] = "Point";
     dr[LAYER]     = BelongLayer;
     mPointTable.Rows.Add(dr);
 }
Beispiel #30
0
        static public void PointDepictor()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;
            Editor   ed  = doc.Editor;

            // Create a TypedValue array to define the filter criteria
            TypedValue[] tyval = new TypedValue[1];
            tyval.SetValue(new TypedValue((int)DxfCode.Start, "POINT"), 0);

            // Assign the filter criteria to a SelectionFilter object
            SelectionFilter selfil = new SelectionFilter(tyval);

            // Selecting
            PromptSelectionResult psres = ed.SelectAll(selfil);

            if (psres.Status != PromptStatus.OK)
            {
                return;
            }
            SelectionSet selset = psres.Value;

            ObjectId[] oids = selset.GetObjectIds();

            // Cast dbobj to a point and draw a circle each
            using (Transaction tx = db.TransactionManager.StartTransaction())
            {
                BlockTable       bt    = tx.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord btrec = tx.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                foreach (ObjectId oid in oids)
                {
                    DBPoint pt  = (DBPoint)tx.GetObject(oid, OpenMode.ForRead);
                    Point3d pt3 = (Point3d)pt.Position;

                    using (Circle circ = new Circle())
                    {
                        circ.Center     = pt3;
                        circ.Radius     = 5;
                        circ.ColorIndex = 1;

                        btrec.AppendEntity(circ);
                        tx.AddNewlyCreatedDBObject(circ, true);
                    }
                }

                tx.Commit();
            }

            // Pause for a keystroke
            PromptStringOptions pstopt = new PromptStringOptions("Press any key to continue...");

            pstopt.AllowSpaces = true;
            PromptResult pstres = ed.GetString(pstopt);

            // Undo previous
            doc.SendStringToExecute("undo 1 ", true, false, false);
        }
Beispiel #31
0
 public Point3d getPointAtVector(Point3d startpoint,Vector3d offset)
 {
     Point3d calculatedPoint = new Point3d();
     DBPoint point = new DBPoint(startpoint);
     point.TransformBy(Matrix3d.Displacement(offset));
     calculatedPoint = point.Position;
     point.Dispose();
     return calculatedPoint;
 }
Beispiel #32
0
 public static bool Clear(this DBPoint obj)
 {
     if (Math.Abs(obj.Position.Z) < TOLERANCE)
     {
         return(false);
     }
     obj.Position = obj.Position.ClearZ();
     return(true);
 }
Beispiel #33
0
 private void Prepare(Transaction tr)
 {
     Document acDoc          = Application.DocumentManager.MdiActiveDocument;
     Database acCurDb        = acDoc.Database;
     RXClass  rxClassOfPoint = new DBPoint().GetRXClass();
     //List<DBPoint> points = this.ObjectsOfType1(acCurDb, rxClassOfPoint, tr).Cast<DBPoint>().ToList();
     //acDoc.Editor.SetImpliedSelection(points.Select(p => p.Id).ToArray());
     //this.PointJsonList = PointJson.GetPointsFrom(points);
 }
Beispiel #34
0
        /**
         * @brief   Metodo que contiene toda la lógica para procesar cada tipo de entidad. En función del tipo de entidad crea las estructuras
         *          en memoria necesarias y almacena toda la información en la clase dwgFile para que posteriormente sea explotada.
         *
         **/
        private static void ProcesarObjetos(ObjectId acObjId, BlockTable acBlkTbl, BlockTableRecord acBlkTblRec, Transaction t, ObjectId parentId)
        {
            Entity ent = (Entity)t.GetObject(acObjId, OpenMode.ForRead);
            switch (acObjId.ObjectClass.DxfName)
            {
                case "POINT":
                    DBPoint porigen = (DBPoint)ent;
                    dwgPunto punto = new dwgPunto();
                    punto.objId = acObjId;
                    punto.capaId = ent.LayerId;
                    punto.parentId = parentId;
                    punto.coordenadas = porigen.Position;
                    punto.colorPunto = porigen.Color;
                    punto.color_R = porigen.Color.Red;
                    punto.color_G = porigen.Color.Green;
                    punto.color_B = porigen.Color.Blue;

                    if (dwgf.dwgPuntos.ContainsKey(punto.objId) == false)
                    {
                        dwgf.dwgPuntos.Add(punto.objId, punto);
                    }
                    log("Procesado punto: " + punto.objId.ToString(),true,true);
                    break;
                case "LINE":
                    Line lorigen = (Line)ent;
                    dwgLinea linea = new dwgLinea();
                    linea.objId = acObjId;
                    linea.capaId = ent.LayerId;
                    linea.parentId = parentId;
                    linea.colorLinea = lorigen.Color;
                    linea.color_R = lorigen.Color.Red;
                    linea.color_G = lorigen.Color.Green;
                    linea.color_B = lorigen.Color.Blue;

                    linea.LineWeight = (Double)lorigen.LineWeight;

                    if (linea.LineWeight == -1)
                    {
                        log("Ancho de la linea igual al ancho de la capa: " + linea.objId.ToString(), true, true);
                        // Reemplazar por el ancho de la capa.
                        linea.LineWeight = dlwdefault;
                        dwgCapa c;
                        dwgf.dwgCapas.TryGetValue(linea.capaId,out c);
                        if (c != null)
                        {
                            linea.LineWeight = c.default_gruesoLinea;
                        }
                    }
                    else if ((linea.LineWeight == -2) || (linea.LineWeight == -3))
                    {
                        // -2: Reemplazar por el ancho del bloque. Esto habra que implementarlo cuando se de soporte a bloques.
                        // -3: ancho por defecto del autocad. Comando LWDEFAULT
                        log("Ancho de la linea igual al del bloque o al ancho por defecto: " + linea.objId.ToString(), true, true);
                        linea.LineWeight = dlwdefault;
                    }

                    DBPoint p_origen_0 = new DBPoint(lorigen.StartPoint);
                    DBPoint p_final_0 = new DBPoint(lorigen.EndPoint);
                    acBlkTblRec.AppendEntity(p_origen_0);
                    acBlkTblRec.AppendEntity(p_final_0);
                    t.AddNewlyCreatedDBObject(p_origen_0, true);
                    t.AddNewlyCreatedDBObject(p_final_0, true);

                    dwgPunto p_origen_1 = new dwgPunto();
                    p_origen_1.objId = p_origen_0.ObjectId;
                    p_origen_1.coordenadas = p_origen_0.Position;
                    p_origen_1.capaId = linea.capaId;
                    linea.p_origen = p_origen_1;

                    dwgPunto p_final_1 = new dwgPunto();
                    p_final_1.objId = p_final_0.ObjectId;
                    p_final_1.coordenadas = p_final_0.Position;
                    p_final_1.capaId = linea.capaId;
                    linea.p_final = p_final_1;

                    if (dwgf.dwgPuntos.ContainsKey(p_origen_1.objId) == false)
                    {
                        dwgf.dwgPuntos.Add(p_origen_1.objId, p_origen_1);
                    }
                    if (dwgf.dwgPuntos.ContainsKey(p_final_1.objId) == false)
                    {
                        dwgf.dwgPuntos.Add(p_final_1.objId, p_final_1);
                    }
                    if (dwgf.dwgLineas.ContainsKey(linea.objId) == false)
                    {
                        dwgf.dwgLineas.Add(linea.objId, linea);
                    }
                    log("Procesada linea: " + linea.objId.ToString(), true, true);
                    break;
                case "LWPOLYLINE":
                    dwgPolylinea poli = new dwgPolylinea();
                    poli.objId = acObjId;
                    poli.capaId = ent.LayerId;
                    poli.parentId = parentId;

                    // Descomponemos en subcomponentes.
                    DBObjectCollection entitySet = new DBObjectCollection();
                    log("Descomponemos polylinea en lineas y puntos: " + poli.objId.ToString(), true, true);
                    entitySet = dwgDecoder.ObtenerPuntosyLineas(ent, acBlkTbl, acBlkTblRec, t);

                    // Procesamos cada uno de los subcomponentes.
                    // Solo pueden ser: lineas y arcos. Una polylinea no puede formarse con nada mas.
                    foreach (Entity ent2 in entitySet)
                    {
                        switch (ent2.ObjectId.ObjectClass.DxfName)
                        {
                            case "LINE":
                                log("Obtenida linea: " + poli.objId.ToString() + ":" + ent2.ObjectId.ToString(),true, true);
                                poli.lineas.Add(ent2.ObjectId);
                                break;
                            case "ARC":
                                log("Obtenido arco: " + poli.objId.ToString() + ":" + ent2.ObjectId.ToString(), true, true);
                                poli.arcos.Add(ent2.ObjectId);
                                break;
                            default:
                                log("Al descomponer polylinea, objeto no reconocido:" + ent2.ObjectId.ObjectClass.DxfName, true, true);
                                break;
                        }
                        log("Procesamos la nueva entidad obtenida - " + ent2.ObjectId.ObjectClass.DxfName + ":" + ent2.ObjectId, true, true);
                        dwgDecoder.ProcesarObjetos(ent2.ObjectId, acBlkTbl, acBlkTblRec, t, poli.objId);

                    }

                    if ((entitySet.Count > 0) && (dwgf.dwgPolylineas.ContainsKey(poli.objId) == false))
                    {
                        dwgf.dwgPolylineas.Add(poli.objId, poli);
                    }
                    log("Procesada polilinea: " + poli.objId.ToString(),true, true);
                    break;
                case "ARC":
                    Arc ar = (Arc) ent;
                    dwgArco arco = new dwgArco();
                    arco.objId = acObjId;
                    arco.capaId = ent.LayerId;
                    arco.parentId = parentId;
                    arco.radio = ar.Radius;
                    arco.angulo_inicio = ar.StartAngle;
                    arco.angulo_final = ar.EndAngle;

                    DBPoint p_centro = new DBPoint(ar.Center);
                    acBlkTblRec.AppendEntity(p_centro);
                    t.AddNewlyCreatedDBObject(p_centro, true);

                    dwgPunto p_centro_1 = new dwgPunto();
                    p_centro_1.objId = p_centro.ObjectId;
                    p_centro_1.coordenadas = p_centro.Position;
                    p_centro_1.capaId = arco.capaId;

                    if (dwgf.dwgPuntos.ContainsKey(p_centro_1.objId) == false)
                    {
                        dwgf.dwgPuntos.Add(p_centro_1.objId, p_centro_1);
                    }

                    arco.punto_centro = p_centro_1.objId;

                    // Descomponemos en subcomponentes.
                    log("Descomponemos arco en lineas: " + arco.objId.ToString(), true, true);
                    DBObjectCollection entitySet2 = new DBObjectCollection();

                    entitySet2 = herramientasCurvas.curvaAlineas((Curve)ent, 5, acBlkTbl, acBlkTblRec, t,arco.capaId, dwgf);

                    // Procesamos cada uno de los subcomponentes.
                    // Solo pueden ser: lineas. Eso lo garantiza la funcion curvaAlineas
                    foreach (Entity ent2 in entitySet2)
                    {
                        log("Nueva entidad - " + ent2.ObjectId.ObjectClass.DxfName + ":" + ent2.ObjectId, true, true);
                        arco.lineas.Add(ent2.ObjectId);
                        dwgDecoder.ProcesarObjetos(ent2.ObjectId, acBlkTbl, acBlkTblRec, t, arco.objId);
                    }

                    if (dwgf.dwgArcos.ContainsKey(arco.objId) == false)
                    {
                        dwgf.dwgArcos.Add(arco.objId, arco);
                    }
                    log("Procesado arco: " + arco.objId.ToString(),true, true);
                    break;
                default:
                    log("Elemento no reconocido para procesar. No procesado. " + acObjId.ObjectClass.ClassVersion.ToString(),true,true);
                    break;
            }
            return;
        }
Beispiel #35
0
        private Dictionary<string, PanelBase> matchingPlans(List<FacadeMounting> facadesMounting, List<FloorArchitect> floorsAr)
        {
            // Определение окон в монтажных планах по архитектурным планам
             var panelsBase = new Dictionary<string, PanelBase>(); // string - ключ - маркаСБ + Марки Окон по порядку.

             // Список монтажных планов - уникальных
             var floorsMount = facadesMounting.SelectMany(f => f.Floors);
             foreach (var floorMount in floorsMount)
             {
            // Найти соотв арх план
            var floorAr = floorsAr.Find(f =>
                              f.Section == floorMount.Section &&
                              f.IsEqualMountingStorey(floorMount.Storey)
                           );

            //Test Добавить текст имени плана Ар в блок монтажного плана
            #if Test
            {
               if (floorAr != null)
               {
                  using (var btrMount = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord)
                  {
                     DBText textFindPlanAr = new DBText();
                     textFindPlanAr.TextString = floorAr.BlName;
                     btrMount.AppendEntity(textFindPlanAr);
                     //btrMount.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(textFindPlanAr, true);
                  }
               }
            }
            #endif

            if (floorAr == null)
            {
               Inspector.AddError($"Не найден блок архитектурного плана для соответствующего монтажного плана '{floorMount.BlRefName}'",
                  floorMount.IdBlRefMounting,
                  icon: System.Drawing.SystemIcons.Error);
            }
            else if (floorAr.Windows.Count == 0)
            {
               Inspector.AddError($"Не найдено ни одного окна в блоке архитектурного плана '{floorMount.BlRefName}'.",
                  floorAr.IdBlRef,
                  icon: System.Drawing.SystemIcons.Error);
            }

            foreach (var panelMount in floorMount.PanelsSbInFront)
            {
               Panel panelXml = GetPanelXml(panelMount.MarkSb, panelMount);
               if (panelXml == null) continue;

               PanelBase panelBase = new PanelBase(panelXml, this, panelMount);

               // Определение окон в панели по арх плану
               if (panelXml.windows?.window != null)
               {
                  foreach (var window in panelXml.windows.window)
                  {
                     if (floorAr == null || floorAr.Windows.Count==0)
                     {
                        break;
                     }

                     // Точка окна внутри панели по XML описанию
                     Point3d ptOpeningCenter = new Point3d(window.posi.X + window.width * 0.5, 0, 0);
                     // Точка окна внутри монтажного плана
                     Point3d ptWindInModel = panelMount.ExtTransToModel.MinPoint.Add(ptOpeningCenter.GetAsVector());
                     Point3d ptWindInArPlan = ptWindInModel.TransformBy(floorMount.Transform.Inverse());

                     var windowKey = floorAr?.Windows.GroupBy(w => w.Key.DistanceTo(ptWindInArPlan))?.MinBy(w => w.Key);
                     if (windowKey == null || windowKey.Key > 600)
                     {
                        Inspector.AddError(
                           $"Не найдено соответствующее окно в архитектурном плане. Блок монтажной панели {panelMount.MarkSb}",
                           panelMount.ExtTransToModel, panelMount.IdBlRef, icon: System.Drawing.SystemIcons.Error);
                        continue;
                     }
                     panelBase.WindowsBaseCenters.Add(ptOpeningCenter, windowKey.First().Value);

                     // Test Добавление точек окна в блоке монтажки
            #if Test
                     {
                        using (var btrMountPlan = floorMount.IdBtrMounting.Open(OpenMode.ForWrite) as BlockTableRecord)
                        {
                           using (DBPoint ptWinInPlan = new DBPoint(ptWindInArPlan))
                           {
                              ptWinInPlan.ColorIndex = 2;
                              btrMountPlan.AppendEntity(ptWinInPlan);
                              //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInPlan, true);
                           }

                           using (DBText dbText = new DBText())
                           {
                              dbText.Position = ptWindInArPlan;
                              dbText.TextString = windowKey.First().Value;
                              btrMountPlan.AppendEntity(dbText);
                              //btrMountPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(dbText, true);
                           }
                        }
                        using (var btrArPlan = floorAr.IdBtr.Open(OpenMode.ForWrite) as BlockTableRecord)
                        {
                           using (DBPoint ptWinInArPlan = new DBPoint(ptWindInArPlan))
                           {
                              ptWinInArPlan.ColorIndex = 1;
                              btrArPlan.AppendEntity(ptWinInArPlan);
                              //btrArPlan.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(ptWinInArPlan, true);
                           }
                        }
                     }
            #endif
                  }
               }
               // Уникальный ключ панели - МаркаСБ + Марки окон
               string key = panelBase.MarkWithoutElectric;
               if (panelBase.WindowsBaseCenters.Count > 0)
               {
                  string windowMarks = string.Join(";", panelBase.WindowsBaseCenters.Values);
                  key += windowMarks;
               }
               PanelBase panelBaseUniq;
               if (!panelsBase.TryGetValue(key, out panelBaseUniq))
               {
                  panelsBase.Add(key, panelBase);
                  panelBaseUniq = panelBase;
               }
               panelMount.PanelBase = panelBaseUniq;
            }
             }
             return panelsBase;
        }
 public ChangeableDBPoint(DBPoint point)
 {
     DBPoint = point;
 }
Beispiel #37
0
 public Point(DBPoint point)
 {
     _id = point.Id;
     _name = "point";
     _position = new Coordinates() { X = point.Position.X, Y = point.Position.Y };
     _height = point.Position.Z;
 }