コード例 #1
0
ファイル: XyLeader.cs プロジェクト: Alain72/AgwXyLeader
        private ObjectId createMleaderStyleAndSetCurrent()
        {
            var styleName    = "COORDS";
            var mLeaderStyle = ObjectId.Null;

            using (Active.Document.LockDocument())
                using (Transaction tr = Active.Database.TransactionManager.StartTransaction())
                {
                    var mlStyles = tr.GetObject(Active.Database.MLeaderStyleDictionaryId, OpenMode.ForRead) as DBDictionary;

                    if (!mlStyles.Contains(styleName))
                    {
                        var newStyle = new MLeaderStyle
                        {
                            Annotative     = AnnotativeStates.True,
                            LeaderLineType = LeaderType.StraightLeader,
                            LandingGap     = 2,
                            EnableDogleg   = true,
                            DoglegLength   = 2,
                            ArrowSize      = 2,
                            BreakSize      = 2,
                            ContentType    = ContentType.MTextContent
                        };

                        mLeaderStyle = newStyle.PostMLeaderStyleToDb(Active.Database, styleName);
                        tr.AddNewlyCreatedDBObject(newStyle, true);
                    }
                    else
                    {
                        mLeaderStyle = mlStyles.GetAt(styleName);
                    }
                    Active.Database.MLeaderstyle = mLeaderStyle;
                    tr.Commit();
                }
            return(mLeaderStyle);
        }
コード例 #2
0
        public void Union(Dictionary <string, ObjectId[]> dicDeleteTextStyles, TextStyleTableRecord resultStyleName)
        {
            using (Transaction tr = targetDB.TransactionManager.StartTransaction())
            {
                foreach (var style in dicDeleteTextStyles)
                {
                    AttributeDefinition[] attdefs = style.Value.Where(n => tr.GetObject(n,
                                                                                        OpenMode.ForRead) is AttributeDefinition).Select(n =>
                                                                                                                                         (AttributeDefinition)tr.GetObject(n, OpenMode.ForWrite)).ToArray();

                    foreach (AttributeDefinition attdef in attdefs)
                    {
                        attdef.TextStyleId = resultStyleName.ObjectId;
                        // attdef.UpdateMTextAttributeDefinition();
                    }

                    foreach (var _x in style.Value)
                    {
                        DBObject item = tr.GetObject(_x, OpenMode.ForWrite);
                        //Если это размерный стиль
                        if (item is DimStyleTableRecord)
                        {
                            DimStyleTableRecord dstr = (DimStyleTableRecord)item;
                            dstr.Dimtxsty = resultStyleName.ObjectId;
                        }
                        //Если это стиль мультивыноски
                        else if (item is MLeaderStyle)
                        {
                            MLeaderStyle mls = (MLeaderStyle)item;
                            mls.TextStyleId = resultStyleName.ObjectId;
                        }
                        //Если это табличный стиль
                        else if (item is TableStyle)
                        {
                            TableStyle ts = (TableStyle)item;

                            //В цикле проверяем текстовый стиль каждой ячейки таблицы
                            foreach (string cellStyle in ts.CellStyles)
                            {
                                if (ts.TextStyle(cellStyle).Database == null)
                                {
                                    continue;
                                }
                                if (dicDeleteTextStyles.Keys.Contains(GetStyle(ts.TextStyle(cellStyle))
                                                                      .Name.Trim().ToUpper()))
                                {
                                    ts.SetTextStyle(resultStyleName.ObjectId, cellStyle);
                                }
                            }
                        }
                        //Если это однострочный текст, не являющийся при этом атрибутом
                        //определения блока
                        else if ((item is DBText) && !(item is AttributeDefinition))
                        {
                            DBText txt = (DBText)item;

                            txt.TextStyleId = resultStyleName.ObjectId;
                            txt.Oblique     = 0;

                            //if (txt is AttributeReference)
                            //   ((AttributeReference)txt).UpdateMTextAttribute();
                        }
                        //Если это многострочный текст
                        else if (item is MText)
                        {
                            MText txt = (MText)item;
                            txt.TextStyleId = resultStyleName.ObjectId;
                        }
                        //Если это таблица
                        else if (item is Table)
                        {
                            Table    table      = (Table)item;
                            string[] styleNames = dicDeleteTextStyles.Keys.ToArray();
                            //Сначала проверяю, какие стили текста назначены столбцам
                            for (int i = 0; i < table.NumColumns; i++)
                            {
                                if (styleNames.Contains(table.GetCellStyle(-1, i).ToUpper().Trim()))
                                {
                                    try
                                    {
                                        table.SetCellStyle(-1, i, resultStyleName.Name);
                                    }
                                    catch { }
                                }
                            }
                            //Теперь проверяю, какие стили текста назначены строкам
                            for (int i = 0; i < table.NumRows; i++)
                            {
                                if (styleNames.Contains(table.GetCellStyle(i, -1).ToUpper().Trim()))
                                {
                                    try
                                    {
                                        table.SetCellStyle(i, -1, resultStyleName.Name);
                                    }
                                    catch { }
                                }
                            }
                            //Анализируем каждую ячейку таблицы
                            //Цикл по столбцам
                            for (int i = 0; i < table.NumColumns; i++)
                            {
                                //Цикл по строкам
                                for (int k = 0; k < table.NumRows; k++)
                                {
                                    //Анализируем конкретную ячейку таблицы
                                    if (styleNames.Contains(table.GetCellStyle(k, i).ToUpper().Trim()))
                                    {
                                        try
                                        {
                                            table.SetCellStyle(k, i, resultStyleName.Name);
                                        }
                                        catch { }
                                    }
                                }
                            }
                        }
                    }

                    if (CanBeRemoved(style.Key))
                    {
                        TextStyleTableRecord tsr = (TextStyleTableRecord)tr.GetObject(GetStyleByName(style.Key), OpenMode.ForWrite, true);
                        tsr.Erase();
                    }
                }
                tr.Commit();
            }
        }
コード例 #3
0
ファイル: DxfData.cs プロジェクト: deping/DXF
        internal int PrepareBeforeWrite()
        {
            // Remove must-not elements
            m_Linetypes.Remove("ByBlock");
            m_Linetypes.Remove("ByLayer");
            m_Linetypes.Remove("Continuous");

            // Add must-have elements
            if (!m_Layers.ContainsKey("0"))
            {
                m_Layers["0"] = new LayerData();
            }

            if (!m_TextStyles.ContainsKey("Standard"))
            {
                m_TextStyles["Standard"] = new TextStyleData();
            }

            if (!m_DimStyles.ContainsKey("ISO-25"))
            {
                m_DimStyles["ISO-25"] = new DimStyleData(0);
            }

            if (!m_MLeaderStyles.ContainsKey("Standard"))
            {
                m_MLeaderStyles["Standard"] = new MLeaderStyle();
            }

            if (!m_MLeaderStyles.ContainsKey("Annotative"))
            {
                m_MLeaderStyles["Annotative"] = new MLeaderStyle();
                m_MLeaderStyles["Annotative"].m_IsAnnotative = true;
            }

            if (!m_TableStyles.ContainsKey("Standard"))
            {
                m_TableStyles["Standard"] = new TableStyle();
            }

            // Generate blocks for dimensions
            string blockName = null;
            GenerateBlockNameFn GenerateBlockName = (int blockNo) =>
            {
                blockName = String.Format("*D{0}", blockNo);
            };

            foreach (var ent in m_Objects)
            {
                AcadDim pDim = ent as AcadDim;
                if (pDim != null && String.IsNullOrEmpty(pDim.m_BlockName))
                {
                    GenerateBlockName(++m_TmpBlockNo);
                    pDim.GenerateBlock(this, blockName);
                }
            }

            foreach (var pair in m_RealBlockDefs)
            {
                foreach (var ent in pair.Value.m_Objects)
                {
                    AcadDim pDim = ent as AcadDim;
                    if (pDim != null && String.IsNullOrEmpty(pDim.m_BlockName))
                    {
                        GenerateBlockName(++m_TmpBlockNo);
                        pDim.GenerateBlock(this, blockName);
                    }
                }
            }

            foreach (var ld in m_Layouts)
            {
                foreach (var ent in ld.Value.m_Objects)
                {
                    AcadDim pDim = ent as AcadDim;
                    if (pDim != null && String.IsNullOrEmpty(pDim.m_BlockName))
                    {
                        GenerateBlockName(++m_TmpBlockNo);
                        pDim.GenerateBlock(this, blockName);
                    }
                }
            }

            // Assign handle to entities. Start from 10000, it should be enough to hold other handles.
            int handle = 10000;

            // It is harmless to assign handle to entities even if it is not exported to DXF.
            foreach (var pb in DxfWriter.s_PredefinedBlocks)
            {
                foreach (var ent in pb)
                {
                    ent.AssignHandle(ref handle);
                }
            }

            foreach (var ent in m_Objects)
            {
                ent.AssignHandle(ref handle);
            }

            foreach (var pair in m_RealBlockDefs)
            {
                foreach (var ent in pair.Value.m_Objects)
                {
                    ent.AssignHandle(ref handle);
                }
            }

            // Add must-have layout
            if (m_Layouts.Count == 0)
            {
                var pLayout = new LayoutData();
                m_Layouts["Layout1"] = pLayout;
            }

            int i = -1;

            foreach (var ld in m_Layouts)
            {
                // Assign block name to layouts
                if (i == -1)
                {
                    ld.Value.m_BlockName = "*Paper_Space";
                }
                else
                {
                    ld.Value.m_BlockName = String.Format("*Paper_Space{0}", i);
                }
                ld.Value.m_LayoutOrder = i + 2;
                ++i;
                foreach (var ent in ld.Value.m_Objects)
                {
                    ent.AssignHandle(ref handle);
                }
            }

            return(handle);
        }
コード例 #4
0
        private void Fill(ObjectId id, Dictionary <string, List <ObjectId> > dict)
        {
            using (Transaction t = targetDB.TransactionManager.StartTransaction())
            {
                DBObject item = t.GetObject(id, OpenMode.ForRead);
                //Если это размерный стиль
                if (item is DimStyleTableRecord)
                {
                    DimStyleTableRecord x = (DimStyleTableRecord)item;
                    //try
                    //{

                    string styleName = ((TextStyleTableRecord)t.GetObject(x.Dimtxsty, OpenMode.ForRead)).Name.Trim().ToUpper();
                    if (dict.Keys.Contains(styleName))
                    {
                        dict[styleName].Add(item.ObjectId);
                    }
                    //}
                    //catch { }
                    return;
                }
                //Если это стиль мультивыноски
                else if (item is MLeaderStyle)
                {
                    MLeaderStyle x         = (MLeaderStyle)item;
                    string       styleName = ((TextStyleTableRecord)t.GetObject(x.TextStyleId, OpenMode.ForRead)).Name.Trim().ToUpper();
                    if (dict.Keys.Contains(styleName))
                    {
                        dict[styleName].Add(item.ObjectId);
                    }
                    return;
                }
                //Если это стиль таблиц
                else if (item is TableStyle)
                {
                    TableStyle ts = (TableStyle)item;
                    //По умолчанию каждый табличный стиль определяет в своём составе три стиля ячеек:
                    //_TITLE, _HEADER и _DATA. В дополнение к этим стилям, пользователь может определить
                    //свои. Каждый из стилей ячеек определяет в своём составе (помимо всего прочего) то,
                    //какой ТЕКСТОВЫЙ СТИЛЬ должен использоваться в ячейках, использующих этот СТИЛЬ
                    //ЯЧЕЕК.

                    //Проверяем каждый имеющийся стиль ячеек на предмет того, какой текстовый стиль
                    //обозначен в их настройках к использованию для ячеек таблицы
                    foreach (string cellStyle in ts.CellStyles)
                    {
                        string styleName = GetStyle(ts.TextStyle(cellStyle)).Name.Trim().ToUpper();
                        if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId))
                        {
                            dict[styleName].Add(item.ObjectId);
                            return;
                        }
                    }
                }
                //Если это однострочный текст
                else if (item is DBText)
                {
                    DBText txt       = (DBText)item;
                    string styleName = ((TextStyleTableRecord)t.GetObject(txt.TextStyleId, OpenMode.ForRead)).Name.Trim().ToUpper();
                    if (dict.Keys.Contains(styleName))
                    {
                        dict[styleName].Add(item.ObjectId);
                    }
                    return;
                }
                //Если это многострочный текст
                else if (item is MText)
                {
                    MText  txt       = (MText)item;
                    string styleName = ((TextStyleTableRecord)t.GetObject(txt.TextStyleId, OpenMode.ForRead)).Name.Trim().ToUpper();
                    if (dict.Keys.Contains(styleName))
                    {
                        dict[styleName].Add(item.ObjectId);
                    }
                    return;
                }
                else if (item is Table)
                {
                    Table table = (Table)item;
                    //Сначала проверяю, какие стили текста назначены столбцам. ПОЧЕМУ-ТО ВСЕГДА
                    //ПОЛУЧАЮ "", НЕ СМОТРЯ НА ТО, ЧТО СТОЛБЦУ МОЖЕТ БЫТЬ НАЗНАЧЕН КОНКТЕТНЫЙ СТИЛЬ ТЕКСТА
                    for (int i = 0; i < table.NumColumns; i++)
                    {
                        string styleName = table.GetCellStyle(-1, i).ToUpper().Trim().ToUpper();
                        if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId))
                        {
                            dict[styleName].Add(item.ObjectId);
                            return;
                        }
                    }

                    //Теперь проверяю, какие стили текста назначены строкам. ПОЧЕМУ-ТО ВСЕГДА
                    //ПОЛУЧАЮ "", НЕ СМОТРЯ НА ТО, ЧТО СТРОКЕ МОЖЕТ БЫТЬ НАЗНАЧЕН КОНКТЕТНЫЙ СТИЛЬ ТЕКСТА
                    for (int i = 0; i < table.NumRows; i++)
                    {
                        string styleName = table.GetCellStyle(i, -1).ToUpper().Trim().ToUpper();
                        if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId))
                        {
                            dict[styleName].Add(item.ObjectId);
                            return;
                        }
                    }
                    //Анализируем каждую ячейку таблицы
                    //Цикл по столбцам
                    for (int i = 0; i < table.NumColumns; i++)
                    {
                        //Цикл по строкам
                        for (int k = 0; k < table.NumRows; k++)
                        {
                            //Анализируем конкретную ячейку таблицы
                            string styleName = table.GetCellStyle(k, i).ToUpper().Trim().ToUpper();
                            if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId))
                            {
                                dict[styleName].Add(item.ObjectId);
                                return;
                            }
                        }
                    }
                }
                else
                {
                    throw new NotImplementedException();
                }
            }
        }