Esempio n. 1
0
 modifyLayer(ObjectId idLayer, short colorIndex, LineWeight weight, string nameLineType = null)
 {
     try
     {
         using (BaseObjs._acadDoc.LockDocument())
         {
             using (Transaction tr = BaseObjs.startTransactionDb())
             {
                 LayerTableRecord Ltr = (LayerTableRecord)tr.GetObject(idLayer, OpenMode.ForWrite);
                 Ltr.Color      = Color.FromColorIndex(ColorMethod.ByBlock, colorIndex);
                 Ltr.LineWeight = weight;
                 if (nameLineType != null)
                 {
                     LinetypeTable LTT = Base_Tools45.LineType.getLineTypeTable();
                     if (LTT.Has(nameLineType) == false)
                     {
                         BaseObjs._db.LoadLineTypeFile(nameLineType, "acad.lin");
                     }
                     Ltr.LinetypeObjectId = LTT[nameLineType];
                 }
                 tr.Commit();
             }
         }
     }
     catch (System.Exception ex)
     {
         BaseObjs.writeDebug(ex.Message + " Layer.cs: line: 346");
     }
 }
Esempio n. 2
0
        public static void AddLayer(Transaction transaction, Layer layer)
        {
            Database db = Active.Database;

            LinetypeTable lineTypeTabel = transaction.GetObject <LinetypeTable>(db.LinetypeTableId, OpenMode.ForRead);
            LayerTable    layerTable    = transaction.GetObject <LayerTable>(db.LayerTableId, OpenMode.ForRead);

            if (GetLineType(transaction, layer.LineType) is LinetypeTableRecord lineType &&
                GetLayer(transaction, layer.Name) is LayerTableRecord)
            {
                LayerTableRecord newLayer = new LayerTableRecord()
                {
                    Name = layer.Name,

                    LinetypeObjectId = lineType.ObjectId,
                    Color            = Color.FromColorIndex(ColorMethod.ByAci, layer.ColorIndex)
                };
                using (new Wrappers.WriteEnabler(layerTable))
                {
                    if (layerTable.IsWriteEnabled)
                    {
                        layerTable.Add(newLayer);
                        transaction.AddNewlyCreatedDBObject(newLayer, true);
                    }
                }
            }
        }
Esempio n. 3
0
        getLinetypeTableRecord(string name)
        {
            LinetypeTableRecord LTtr = null;

            try
            {
                using (Transaction tr = BaseObjs.startTransactionDb())
                {
                    LinetypeTable LTT = getLineTypeTable();
                    if (LTT.Has(name) == true)
                    {
                        LTtr = (LinetypeTableRecord)tr.GetObject(LTT[name], OpenMode.ForRead);
                    }
                    else
                    {
                        BaseObjs._db.LoadLineTypeFile(name, "ACAD.LIN");
                        LTtr = (LinetypeTableRecord)tr.GetObject(LTT[name], OpenMode.ForRead);
                    }
                    tr.Commit();
                }
            }
            catch (System.Exception ex)
            {
                BaseObjs.writeDebug(ex.Message + " LineType.cs: line: 63");
            }
            return(LTtr);
        }
        /// <summary>
        /// 新建图层
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="layername">图层名</param>
        /// <param name="colorIndex">颜色索引</param>
        /// <param name="linetype">线型</param>
        /// <param name="lineWeight">线宽</param>
        /// <param name="isprint">是否打印</param>
        /// <param name="zs">注释</param>
        /// <returns></returns>
        public static ObjectId AddLayer(this Database db, string layername, short colorIndex, string linetype, LineWeight lineWeight, bool isprint, string zs)
        {
            //打开层表
            LayerTable lt = (LayerTable)db.LayerTableId.GetObject(OpenMode.ForRead);

            if (!lt.Has(layername))
            {
                LayerTableRecord ltr = new LayerTableRecord
                {
                    Name  = layername,
                    Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex)
                };//定义一个新的层表记录
                LinetypeTable ltt = (LinetypeTable)db.LinetypeTableId.GetObject(OpenMode.ForRead);
                if (ltt.Has(linetype))
                {
                    ltr.LinetypeObjectId = ltt[linetype];
                }
                else
                {
                    db.LoadLineTypeFile(linetype, "acadiso.lin");
                    ltr.LinetypeObjectId = ltt[linetype];
                }
                ltr.LineWeight  = lineWeight;
                ltr.IsPlottable = isprint;
                ltr.Description = zs;
                lt.UpgradeOpen();
                lt.Add(ltr);
                db.TransactionManager.AddNewlyCreatedDBObject(ltr, true);
                lt.DowngradeOpen();
            }
            return(lt[layername]);
        }
                                                   string.Format("Standartization\\{0}\\DataLayers.xml", codeGroup)); //  @"Z:\AutoCAD_server\ShareSettings\Standartization" + "\\" + codeGroup + "\\" + "DataLayers.xml";
        public List <LayerTableRecord> GetListLayers(Database db, bool isStandart)                                    //Список всех слоев в документе
        {
            List <LayerTableRecord> listLayers = new List <LayerTableRecord>();

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                if (isStandart)
                {
                    MainForm.dicLineTypes = new Dictionary <long, string>();
                    LinetypeTable acLinTbl = tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite) as LinetypeTable;
                    foreach (var item in acLinTbl)
                    {
                        LinetypeTableRecord btr = (LinetypeTableRecord)tr.GetObject(item, OpenMode.ForRead);
                        MainForm.dicLineTypes.Add(btr.Id.OldId, btr.Name);
                    }
                }

                var layerTable = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;
                foreach (var layer in layerTable)
                {
                    LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layer, OpenMode.ForWrite, true);
                    ltr.IsLocked = false;
                    listLayers.Add(ltr);
                }
                tr.Commit();
            }
            return(listLayers);
        }
Esempio n. 6
0
        public void CheckLinetype()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                LinetypeTable ltt = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
                //foreach(ObjectId id in ltt)
                //{
                //    LinetypeTableRecord lttr = (LinetypeTableRecord)tr.GetObject(id, OpenMode.ForRead);
                //}
                if (!ltt.Has("SWALL"))
                {
                    LinetypeTableRecord lttr = new LinetypeTableRecord();
                    lttr.Name             = "SWALL";
                    lttr.PatternLength    = 0.75;
                    lttr.NumDashes        = 3;
                    lttr.Comments         = "___________//_______";
                    lttr.AsciiDescription = "___________//_______";

                    ltt.UpgradeOpen();
                    ltt.Add(lttr);
                    tr.AddNewlyCreatedDBObject(lttr, true);
                    tr.Commit();
                }
            }
        }
Esempio n. 7
0
 /// <summary>
 /// Gets the linetype table records.
 /// </summary>
 /// <param name="symbolTbl">The symbol table.</param>
 /// <param name="mode">The mode.</param>
 /// <param name="filter">The filter.</param>
 /// <returns></returns>
 public static IEnumerable <LinetypeTableRecord> GetLinetypeTableRecords(this LinetypeTable symbolTbl,
                                                                         OpenMode mode = OpenMode.ForRead, SymbolTableRecordFilter filter = SymbolTableRecordFilter.None)
 {
     return
         (symbolTbl.GetSymbolTableRecords <LinetypeTableRecord>(
              symbolTbl.Database.TransactionManager.TopTransaction, mode, filter, false));
 }
Esempio n. 8
0
 // 创建带文字的线型 ////// 返回线型ID
 public static ObjectId CreateLineTypeWithText(string lineTypeName, string text)
 {
     Document    doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor;
     Transaction tr = db.TransactionManager.StartTransaction(); using (tr) { // 读出文字样式表
         TextStyleTable tt = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForRead);
         // 读出线型表
         LinetypeTable lt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite);
         if (lt.Has(lineTypeName))
         {
             return(lt[lineTypeName]);
         }
         else   // 创建新的线型记录.
         {
             LinetypeTableRecord ltr = new LinetypeTableRecord();
             // ...设置线型记录特性
             ltr.Name             = lineTypeName;
             ltr.AsciiDescription = lineTypeName + " Supply ---- " + text + " ---- " + text + " ---- " + text + " ----";
             ltr.PatternLength    = 1.1;
             ltr.NumDashes        = 3;                                                        //分为三段 // 线段Dash #1
             ltr.SetDashLengthAt(0, 0.5);                                                     // 线段Dash #2
             ltr.SetDashLengthAt(1, -0.3);
             ltr.SetShapeStyleAt(1, tt["Standard"]);                                          //文字样式设定
             ltr.SetShapeNumberAt(1, 0);                                                      //文字位置设定,用一二维向量控制
             ltr.SetShapeOffsetAt(1, new Vector2d(-0.1, -0.05)); ltr.SetShapeScaleAt(1, 0.1); //文字比例
             ltr.SetShapeIsUcsOrientedAt(1, false); ltr.SetShapeRotationAt(1, 0);             //文字方向,0为顺直接方向
             ltr.SetTextAt(1, text);                                                          //文字内容 // 线段Dash #3
             ltr.SetDashLengthAt(2, -0.3);                                                    // 添加新的线型记录到线型表
             ObjectId ltId = lt.Add(ltr);
             tr.AddNewlyCreatedDBObject(ltr, true);
             tr.Commit();
             return(ltId);//返回线型记录ID
         }
     }
 }
Esempio n. 9
0
        public void testLayerIterator()
        {
            Database     db       = HostApplicationServices.WorkingDatabase;
            Editor       ed       = Application.DocumentManager.MdiActiveDocument.Editor;
            StreamWriter textFile = new StreamWriter("c:\\3.txt", false);

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LayerTable    lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);
                LinetypeTable tt = (LinetypeTable)trans.GetObject(db.LinetypeTableId, OpenMode.ForRead);
                foreach (ObjectId layerId in lt)
                {
                    LayerTableRecord    ltr          = (LayerTableRecord)trans.GetObject(layerId, OpenMode.ForRead);
                    String              layerName    = ltr.Name;
                    String              colorName    = ltr.Color.ToString();
                    ObjectId            linetypeId   = ltr.LinetypeObjectId;
                    LinetypeTableRecord ttr          = (LinetypeTableRecord)trans.GetObject(linetypeId, OpenMode.ForRead);
                    String              linetypeName = ttr.Name;
                    String              withLayer    = ltr.LineWeight.ToString();
                    String              str          = layerName + "   " + colorName + "   " + linetypeName + "   " + withLayer;
                    textFile.WriteLine(str, false);
                }
                textFile.Close();
                trans.Commit();
            }
        }
 public static void DeleteLayer(string layerName, Database db)             //Удаление слоя
 {
     using (Transaction tr = db.TransactionManager.StartTransaction())
     {
         LinetypeTable acLinTbl   = tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite) as LinetypeTable;
         var           layerTable = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;
         foreach (var layer in layerTable)
         {
             LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(layer, OpenMode.ForWrite, true);
             if (ltr.Name.Equals("0"))
             {
                 db.Clayer = ltr.Id;                                                                //обязательная активация в текущий слой 0
             }
             if (!ltr.Name.Equals(layerName))
             {
                 continue;
             }
             try
             {
                 ltr.IsLocked = false;
                 ltr.Erase();
                 break;
             }
             catch { }
         }
         tr.Commit();
     }
 }
Esempio n. 11
0
        public static void RegisterLayer(this Database currentDatabase, string layerId, short colorIndex = 7,
                                         string linetype = "CONTINUOUS")
        {
            if (currentDatabase == null)
            {
                throw new ArgumentNullException(nameof(currentDatabase));
            }

            // Start a transaction
            Transaction acTrans = currentDatabase.TransactionManager.TopTransaction;

            // Open the Layer table for read
            LayerTable acLyrTbl = acTrans.GetObject(currentDatabase.LayerTableId, OpenMode.ForRead) as LayerTable;

            if (acLyrTbl is null)
            {
                throw new NullReferenceException("Layer table dictionary not retrieved");
            }

            //Return if layer exists
            if (acLyrTbl.Has(layerId))
            {
                return;
            }

            using (LayerTableRecord acLyrTblRec = new LayerTableRecord())
            {
                // Assign the layer the ACI color 3 and a name
                acLyrTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex);
                acLyrTblRec.Name  = layerId;

                LinetypeTable acLinTbl = acTrans.GetObject(currentDatabase.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;

                if (acLinTbl is null)
                {
                    throw new NullReferenceException("Linetype dictionary not retrieved");
                }

                if (acLinTbl.Has(linetype))
                {
                    // Set the linetype for the layer
                    acLyrTblRec.LinetypeObjectId = acLinTbl[linetype];
                }
                else
                {
                    throw new ArgumentOutOfRangeException("Linetype does not exist", new Exception());
                }

                // Upgrade the Layer table for write
                acLyrTbl.UpgradeOpen();

                // Append the new layer to the Layer table and the transaction
                acLyrTbl.Add(acLyrTblRec);
                acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true);
            }
        }
Esempio n. 12
0
            public string AjoutePolyline(double startx, double starty, double endx, double endy, double epaisseur, byte R, byte G, byte B, string legende, string linetype, string linfilepath)
            {
                //db = HostApplicationServices.WorkingDatabase;
                //doc = Application.DocumentManager.GetDocument(db);

                doc = Application.DocumentManager.MdiActiveDocument;
                db  = doc.Database;

                try
                {
                    DocumentLock loc = doc.LockDocument();
                    using (loc)
                    {
                        using (Transaction tr = db.TransactionManager.StartTransaction())
                        {
                            //doc.Editor.WriteMessage("ok 0");

                            LinetypeTable lt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite);
                            if (!lt.Has(linetype))
                            {
                                db.LoadLineTypeFile(linetype, linfilepath);
                            }

                            Polyline p = new Polyline();
                            p.AddVertexAt(p.NumberOfVertices, new Point2d(startx, starty), 0, epaisseur, epaisseur);
                            p.AddVertexAt(p.NumberOfVertices, new Point2d(endx, endy), 0, epaisseur, epaisseur);

                            p.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(R, G, B);

                            //doc.Editor.WriteMessage("ok 1");

                            //if (AddNewLineType(linetype, linfilepath, tr))
                            p.Linetype = linetype;

                            //doc.Editor.WriteMessage("ok 2");

                            if (startx - endx < UNITE_X)
                            {
                                endx = startx + UNITE_X;
                            }

                            BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                            btr.AppendEntity(p);
                            tr.AddNewlyCreatedDBObject(p, true);

                            //doc.Editor.WriteMessage("ok 3");

                            tr.Commit();

                            return("c bon");
                        }
                    }
                }
                catch (Exception excp) { return("c pas bon /" + excp.Message + "/" + excp.ErrorStatus.ToString()); }
            }
Esempio n. 13
0
        /// <summary>
        /// 设置当前线型
        /// </summary>
        /// <param name="db">数据库对象</param>
        /// <param name="typeName">要设置的线型名</param>
        public static void SetCurrentLineType(this Database db, string typeName)
        {
            var trans = db.TransactionManager;
            //打开线型表
            LinetypeTable lt = (LinetypeTable)trans.GetObject(db.LinetypeTableId, OpenMode.ForRead);

            if (lt.Has(typeName))          //如果存在名为typeName的线型
            {
                db.Celtype = lt[typeName]; //设置当前线型
            }
        }
        public static ObjectId LoadLineType(this Database db, string typeName)
        {
            LinetypeTable lt = (LinetypeTable)db.LinetypeTableId.GetObject(OpenMode.ForRead);

            if (!lt.Has(typeName))
            {
                db.LoadLineTypeFile(typeName, "acadiso.lin");
            }

            return(lt[typeName]);
        }
Esempio n. 15
0
        static public ObjectIdCollection GetObjIdNonGrafical(Database db)
        {
            ObjectIdCollection idsNonGraficals = new ObjectIdCollection();

            Transaction tr = db.TransactionManager.StartTransaction();

            using (tr)
            {
                //Block Table
                BlockTable btBlock = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                foreach (ObjectId btrId in btBlock)
                {
                    idsNonGraficals.Add(btrId);
                }

                //Dim Style
                DimStyleTable tbDimSty = tr.GetObject(db.DimStyleTableId, OpenMode.ForRead) as DimStyleTable;
                foreach (ObjectId btrId in tbDimSty)
                {
                    idsNonGraficals.Add(btrId);
                }

                //Layer
                LayerTable tbLayer = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
                foreach (ObjectId btrId in tbLayer)
                {
                    idsNonGraficals.Add(btrId);
                }

                //Line types
                LinetypeTable tbLinetype = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
                foreach (ObjectId btrId in tbLinetype)
                {
                    idsNonGraficals.Add(btrId);
                }

                //Table Style
                TextStyleTable tbTextStyle = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
                foreach (ObjectId btrId in tbTextStyle)
                {
                    idsNonGraficals.Add(btrId);
                }

                foreach (ObjectId objId in idsNonGraficals)
                {
                    if (!objId.IsValid)
                    {
                        idsNonGraficals.Remove(objId);
                    }
                }
            }

            return(idsNonGraficals);
        }
Esempio n. 16
0
        /// <summary>
        /// 从“acadiso.lin”线型文件中装载指定线型
        /// </summary>
        /// <param name="db">数据库对象</param>
        /// <param name="typeName">线型名</param>
        /// <returns>返回装载的线型的Id</returns>
        public static ObjectId LoadLineType(this Database db, string typeName)
        {
            //打开线型表
            LinetypeTable lt = (LinetypeTable)db.LinetypeTableId.GetObject(OpenMode.ForRead);

            if (!lt.Has(typeName))//如果不存在名为typeName的线型
            {
                //加载typeName线型
                db.LoadLineTypeFile(typeName, "acad.lin");
            }
            return(lt[typeName]);//返回加载的线型的ObjectId
        }
Esempio n. 17
0
        public static LinetypeTableRecord GetLineType(Transaction transaction, string lineTypeName)
        {
            Database db = Active.Database;

            LinetypeTable lineTypeTable = transaction.GetObject <LinetypeTable>(db.LinetypeTableId, OpenMode.ForRead);

            if (lineTypeTable.Has(lineTypeName))
            {
                ObjectId oid = lineTypeTable[lineTypeName];
                return(transaction.GetObject <LinetypeTableRecord>(oid, OpenMode.ForRead));
            }
            return(null);
        }
Esempio n. 18
0
        //根据线型名称得到线型ID
        public static ObjectId GetLineType(string lineTypeName)
        {
            ObjectId lineTypeId = ObjectId.Null;
            Document curDoc     = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Autodesk.AutoCAD.DatabaseServices.TransactionManager transactionManager = curDoc.Database.TransactionManager;
            using (Autodesk.AutoCAD.DatabaseServices.Transaction transaction = transactionManager.StartTransaction())
            {
                LinetypeTable curLineTypeTab = transactionManager.GetObject(curDoc.Database.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
                lineTypeId = curLineTypeTab[lineTypeName];
                transaction.Commit();
            }
            return(lineTypeId);
        }
Esempio n. 19
0
        public static void AddLineType(Transaction transaction, LineType lineType)
        {
            Document document = Active.Document;
            Database db       = document.Database;

            LinetypeTable lineTypeTable = transaction.GetObject <LinetypeTable>(db.LinetypeTableId, OpenMode.ForRead);

            // if the layer is not loaded in the current dwg
            if (!lineTypeTable.Has(lineType.Name))
            {
                db.LoadLineTypeFile(lineType.Name, lineType.FileName);
                // Todo: Test if commit doesn't close the transaction.
                transaction.Commit();
            }
        }
Esempio n. 20
0
            private void applyLineStyle(AC_Entity ent, Color lineColor, string LineStyle, double scale)
            {
                ent.Color = lineColor;
                tr.start_Transaction();
                LinetypeTable lintable = tr.AC_Tr.GetObject(tr.AC_Db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;

                if (!lintable.Has(LineStyle))
                {
                    tr.AC_Db.LoadLineTypeFile(LineStyle, "acad.lin");
                }
                tr.AC_Tr.Commit();
                tr.AC_Tr.Dispose();
                ent.Linetype      = LineStyle;
                ent.LinetypeScale = scale;
            }
Esempio n. 21
0
        // CheckLayers: Validate that required Layers and Linetypes
        // are present in the drawing. Add if not present.
        public static void CheckLayers(string layerToCheck, short colorToUse, string lineTypeToAssign)
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                // Open the Layer table for read
                LayerTable       lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;
                LayerTableRecord ltr;

                if (lt.Has(layerToCheck) == false)
                {
                    ltr = new LayerTableRecord();

                    // Assign the layer the ACI color
                    ltr.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByAci, colorToUse);

                    // Name the new Layer
                    ltr.Name = layerToCheck;

                    // Upgrade the Layer table for write
                    lt.UpgradeOpen();

                    // Append the new layer to the Layer table and the transaction
                    lt.Add(ltr);
                    tr.AddNewlyCreatedDBObject(ltr, true);
                }
                else
                {
                    ltr = tr.GetObject(lt[layerToCheck], OpenMode.ForRead) as LayerTableRecord;
                }

                // Open the Line Type table for read
                LinetypeTable linTbl = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;

                if (linTbl.Has(lineTypeToAssign) == false)
                {
                    // Load desired Linetype
                    db.LoadLineTypeFile(lineTypeToAssign, "acad.lin");
                }

                ltr.UpgradeOpen();
                ltr.LinetypeObjectId = linTbl[lineTypeToAssign];

                tr.Commit();
            } // End Trans
        }     // end CheckLayers()
Esempio n. 22
0
        public static bool CheckLinestyleExists(string LineStyleName)
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;

            using (Transaction tr = doc.TransactionManager.StartTransaction())
            {
                //LinetypeTableRecord lttr = new LinetypeTableRecord();
                LinetypeTable ltt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead, true);
                if (ltt.Has(LineStyleName))
                {
                    return(true);
                }

                return(false);
            }
        }
Esempio n. 23
0
        /// <summary>
        /// 创建一个新的线型
        /// </summary>
        /// <param name="db">数据库对象</param>
        /// <param name="typeName">线型名</param>
        /// <returns>返回新建线型的Id</returns>
        public static ObjectId AddLineType(this Database db, string typeName)
        {
            //打开线型表
            LinetypeTable lt = (LinetypeTable)db.LinetypeTableId.GetObject(OpenMode.ForRead);

            if (!lt.Has(typeName)) //如果存在名为typeName的线型表记录
            {
                lt.UpgradeOpen();  //切换线型表为写
                //新建一个线型表记录
                LinetypeTableRecord ltr = new LinetypeTableRecord();
                ltr.Name = typeName; //设置线型表记录的名称
                lt.Add(ltr);         //将新的线型表记录的信息添加到的线型表中
                db.TransactionManager.AddNewlyCreatedDBObject(ltr, true);
                lt.DowngradeOpen();  //为了安全,将线型表的状态切换为读
            }
            return(lt[typeName]);    //返回新添加的线型表记录的ObjectId
        }
Esempio n. 24
0
        /// <summary>
        /// 获取线型ID
        /// </summary>
        /// <param name="linetypeName">线型名</param>
        /// <returns>结果</returns>
        public static ObjectId GetLinetypeId(string linetypeName)
        {
            Database db = HostApplicationServices.WorkingDatabase;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LinetypeTable oltTab = (LinetypeTable)trans.GetObject(db.LinetypeTableId, OpenMode.ForRead);
                if (oltTab.Has(linetypeName))
                {
                    return(oltTab[linetypeName]);
                }
                else
                {
                    return(db.ContinuousLinetype);
                }
            }
        }
Esempio n. 25
0
        public static ObjectId GetLinestyleID(string LineStyleName)
        {
            ObjectId result = ObjectId.Null;

            Document    doc = Application.DocumentManager.MdiActiveDocument;
            Database    db  = doc.Database;
            Transaction tr  = db.TransactionManager.StartTransaction();

            using (tr)
            {
                LinetypeTable ltt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead);
                result = ltt[LineStyleName];
                tr.Commit();
            }

            return(result);
        }
Esempio n. 26
0
 public void AddNewLineType(string linetype, string linfilepath)
 {
     try
     {
         //ajoute la ligne si elle n'existe pas déjà
         using (Transaction tr = db.TransactionManager.StartTransaction())
         {
             LinetypeTable lt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite);
             if (!lt.Has(linetype))
             {
                 db.LoadLineTypeFile(linetype, linfilepath);
             }
             tr.Commit();
         }
         //return true;
     }
     catch (Exception excp) {  }
 }
Esempio n. 27
0
        getLineTypeTable()
        {
            LinetypeTable LTT = null;
            Database      DB  = BaseObjs._db;

            try
            {
                using (Transaction tr = BaseObjs.startTransactionDb())
                {
                    LTT = (LinetypeTable)tr.GetObject(DB.LinetypeTableId, OpenMode.ForRead);
                    tr.Commit();
                }
            }
            catch (System.Exception ex)
            {
                BaseObjs.writeDebug(ex.Message + " LineType.cs: line: 30");
            }
            return(LTT);
        }
Esempio n. 28
0
        public void CreateLayer()
        {
            Database db = HostApplicationServices.WorkingDatabase;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
                ObjectId   layerId;
                if (lt.Has("abc") == false)
                {
                    LayerTableRecord ltr = new LayerTableRecord();

                    ltr.Name = "abc";
                    Color layerColor = Color.FromColorIndex(ColorMethod.ByColor, 120);
                    ltr.Color = layerColor;
                    LinetypeTable       tt = (LinetypeTable)trans.GetObject(db.LinetypeTableId, OpenMode.ForRead);
                    LinetypeTableRecord ttr;
                    try
                    {
                        db.LoadLineTypeFile("CENTER", "acadiso.lin");
                    }
                    catch
                    {
                        // ´Ë´¦ÎÞÐè²Ù×÷.
                    }
                    ttr = (LinetypeTableRecord)trans.GetObject(tt["CENTER"], OpenMode.ForRead);
                    ltr.LinetypeObjectId = ttr.ObjectId;
                    ltr.LineWeight       = LineWeight.LineWeight030;
                    db.LineWeightDisplay = true;
                    db.Ltscale           = 2;
                    // ͼ²ãËø¶¨
                    //ltr.IsLocked = True
                    // ͼ²ã¶³½á
                    //ltr.IsFrozen = True
                    // ͼ²ã¹Ø±Õ
                    //ltr.IsOff = True
                    layerId = lt.Add(ltr);
                    trans.AddNewlyCreatedDBObject(ltr, true);
                    db.Clayer = layerId;
                }
                trans.Commit();
            }
        }
Esempio n. 29
0
        public ArrayList GetLineTypes()
        {
            ArrayList lineTypes = new ArrayList();

            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;

            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LinetypeTable liTab = trans.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
                foreach (var li in liTab)
                {
                    LinetypeTableRecord litr = trans.GetObject(li, OpenMode.ForRead) as LinetypeTableRecord;
                    lineTypes.Add(litr.Name);
                }
            }

            return(lineTypes);
        }
Esempio n. 30
0
 public static ObjectId GetLineTypeId(string strLineType, Database db)
 {
     if (string.IsNullOrEmpty(strLineType))
     {
         return(ObjectId.Null);
     }
     using (Transaction trans = db.TransactionManager.StartTransaction())
     {
         LinetypeTable ltTab = trans.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
         if (ltTab != null)
         {
             if (ltTab.Has(strLineType))
             {
                 return(ltTab[strLineType]);
             }
         }
     }
     return(ObjectId.Null);
 }
        private static LinetypeTableRecord GetLineType(Transaction tr, ObjectId idLineStd, LinetypeTable acLinTbl)
        {
            LinetypeTableRecord currentLineType = null;
             string nameLineType = "";
             foreach (var item in MainForm.dicLineTypes)
             {
            if (idLineStd.OldId != item.Key) continue;
            nameLineType = item.Value;
            break;
             }

             foreach (var item in acLinTbl)
             {
            LinetypeTableRecord lineTbr = (LinetypeTableRecord)tr.GetObject(item, OpenMode.ForRead);

            if (lineTbr.Name.ToUpper() == nameLineType.ToUpper())
            {
               currentLineType = lineTbr;
               return currentLineType;

            }
             }
             return currentLineType;
        }