public ChangeAttributeValuesToUpper(SelectionSet ss)
 {
     if (ss != null)
     {
         selectionSetIds = BlockUtility.GetAllIDsFromSS(ss);
     }
 }
 private static void copyFlat(string fileFlat, ObjectId idBt)
 {
     using (var dbFlat = new Database(false, true))
     {
         dbFlat.ReadDwgFile(fileFlat, FileOpenMode.OpenForReadAndAllShare, false, "");
         dbFlat.CloseInput(true);
         using (var bt = dbFlat.BlockTableId.Open( OpenMode.ForRead) as BlockTable)
         {
             foreach (var idBtr in bt)
             {
                 using (var btr = idBtr.Open( OpenMode.ForRead) as BlockTableRecord)
                 {
                     if (Revit.Apartment.IsBlockNameApartment(btr.Name))
                     {
                         using (var map = new IdMapping())
                         {
                             ObjectIdCollection ids = new ObjectIdCollection(new[] { idBtr });
                             dbFlat.WblockCloneObjects(ids, idBt, map, DuplicateRecordCloning.Ignore, false);
                         }
                         return;
                     }
                 }
             }
         }
     }
 }
Пример #3
0
        /// <summary>
        /// <para>Add a group to the current autocad document</para>
        /// <para>Return: Group</para>
        /// </summary>
        /// <param name="name">Group name</param>
        /// <param name="DbObjs">Object Collection to associate with group</param>
        /// <param name="autorename"><para>if a group has already the specified name</para>
        /// <para>This let the function assign an unique generated name</para></param>
        /// <returns></returns>
        public ObjectId addGroup(string name, DBObjectCollection DbObjs, bool autorename)
        {
            Group grp = new Group(name, true);
            ObjectIdCollection ids = new ObjectIdCollection();

            start_Transaction();
            DBDictionary gd = openGroupDictionary(OpenMode.ForWrite);
            if (gd.Contains(name))
            {
                if (autorename)
                {
                    name = name + "_" + Guid.NewGuid().ToString();
                }
                else
                {
                    return ObjectId.Null;
                }
            }
            gd.SetAt(name, grp);
            AC_Tr.AddNewlyCreatedDBObject(grp, true);

            openBlockTables(OpenMode.ForRead, OpenMode.ForWrite);
            foreach (Entity ent in DbObjs)
            {
                ObjectId id = Commit(ent);
                ids.Add(id);
            }
            grp.InsertAt(0, ids);
            gd.Dispose();
            Dispose();

            return grp.ObjectId;
        }
        // Печать всех листов в текущем документе
        private void multiSheetPlot(Database db)
        {
            using (var t = db.TransactionManager.StartTransaction())
             {
            var bt = (BlockTable)t.GetObject(db.BlockTableId, OpenMode.ForRead);
            var pi = new PlotInfo();
            var piv = new PlotInfoValidator();
            piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;

            if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
            {
               using (var pe = PlotFactory.CreatePublishEngine())
               {
                  var layouts = new List<Layout>();
                  DBDictionary layoutDict = (DBDictionary)db.LayoutDictionaryId.GetObject(OpenMode.ForRead);
                  foreach (DBDictionaryEntry entry in layoutDict)
                  {
                     if (entry.Key != "Model")
                     {
                        layouts.Add((Layout)t.GetObject(entry.Value, OpenMode.ForRead));
                     }
                  }
                  layouts.Sort((l1, l2) => l1.LayoutName.CompareTo(l2.LayoutName));
                  var layoutsToPlot = new ObjectIdCollection(layouts.Select(l => l.BlockTableRecordId).ToArray());

                  int numSheet = 1;
                  foreach (ObjectId btrId in layoutsToPlot)
                  {
                     var btr = (BlockTableRecord)t.GetObject(btrId, OpenMode.ForRead);
                     var lo = (Layout)t.GetObject(btr.LayoutId, OpenMode.ForRead);
                     var psv = PlotSettingsValidator.Current;
                     pi.Layout = btr.LayoutId;
                     LayoutManager.Current.CurrentLayout = lo.LayoutName;
                     piv.Validate(pi);

                     if (numSheet == 1)
                     {
                        pe.BeginPlot(null, null);
                        string fileName = Path.Combine(Path.GetDirectoryName(db.Filename), Path.GetFileNameWithoutExtension(db.Filename) + ".pdf");
                        pe.BeginDocument(pi, db.Filename, null, 1, true, fileName);
                     }
                     var ppi = new PlotPageInfo();
                     pe.BeginPage(ppi, pi, (numSheet == layoutsToPlot.Count), null);
                     pe.BeginGenerateGraphics(null);
                     pe.EndGenerateGraphics(null);
                     // Finish the sheet
                     pe.EndPage(null);
                     numSheet++;
                  }
                  // Finish the document
                  pe.EndDocument(null);
               }
            }
            else
            {
               throw new System.Exception("Другое задание на печать уже выполняется.");
            }
            t.Commit();
             }
        }
Пример #5
0
 /// <summary>
 /// Клонирование листа.
 /// Должна быть открыта транзакция!!!
 /// </summary>
 /// <param name="db">База в которой это производится. Должна быть WorkingDatabase</param>
 /// <param name="existLayoutName">Имя существующего листа, с которого будет клонироваться новый лист.
 /// Должен существовать в чертеже.</param>
 /// <param name="newLayoutName">Имя для нового листа.</param>
 /// <returns>ObjectId нового листа</returns>
 public static ObjectId CloneLayout(Database db, string existLayoutName, string newLayoutName)
 {
     ObjectId newLayoutId;
     ObjectId existLayoutId;
     using (WorkingDatabaseSwitcher sw = new WorkingDatabaseSwitcher(db))
     {
         LayoutManager lm = LayoutManager.Current;
         newLayoutId = lm.CreateLayout(newLayoutName);
         existLayoutId = lm.GetLayoutId(existLayoutName);
     }
     ObjectIdCollection objIdCol = new ObjectIdCollection();
     ObjectId idBtrNewLayout = ObjectId.Null;
     using (Layout newLayout = newLayoutId.GetObject(OpenMode.ForWrite) as Layout)
     {
         Layout curLayout = existLayoutId.GetObject(OpenMode.ForRead) as Layout;
         newLayout.CopyFrom(curLayout);
         idBtrNewLayout = newLayout.BlockTableRecordId;
         using (var btrCurLayout = curLayout.BlockTableRecordId.Open(OpenMode.ForRead) as BlockTableRecord)
         {
             foreach (ObjectId objId in btrCurLayout)
             {
                 objIdCol.Add(objId);
             }
         }
     }
     IdMapping idMap = new IdMapping();
     db.DeepCloneObjects(objIdCol, idBtrNewLayout, idMap, false);
     return newLayoutId;
 }
Пример #6
0
 //--------------------------------------------------------------------------
 //
 // ���ܣ������Զ������
 //
 //  ���ߣ�
 //
 //  ���ڣ�200708
 //
 //   ��ʷ��
 //--------------------------------------------------------------------------
 public virtual void FilterObjects(ObjectIdCollection outputIds,ObjectIdCollection inputIds)
 {
     // ����������objectID
     Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();
     try
     {
         ObjectId objId;
         foreach (ObjectId tempLoopVar_objId in inputIds)
         {
             objId = tempLoopVar_objId;
             Entity ent;
             //�򿪶���
             ent = trans.GetObject(objId, OpenMode.ForRead )as Entity ;
             // �����ж�
             if (ent is Polyline)
             {
                 Polyline pl = ent as Polyline;
                 // ��������ߵij��ȣ�Ȼ���ж��䳤���Ƿ���ָ����������С����֮��
                 double Len = GetPolylineLength(pl);
                 // ������������򽫶���id���棬������
                 if (Len >= m_MinLen && Len <= m_MaxLen)
                 {
                     outputIds.Add(objId);
                 }
             }
         }
         trans.Commit();
     }
     catch (Autodesk.AutoCAD.Runtime.Exception e)
     {
         Utility.AcadEditor.WriteMessage(e.Message);
     }
 }
Пример #7
0
        public void BasicFilter()
        {
            BasicFilter bfilter = new BasicFilter();
            // �趨���������
            StringCollection layerCollection = new StringCollection();
             //layerCollection.Add("*");  // �������еIJ�
            layerCollection.Add("1");    //  ���˲� 1
            bfilter.SetLayers(layerCollection);

            //  �趨���������
            StringCollection blkCollection = new StringCollection();
            //����������еĿ飬���ÿ������ϰ��� "*"
            // ������Կ���ˣ����ÿ������ϰ��� ""
            blkCollection.Add("");
            bfilter.SetBlocks(blkCollection);
            //�趨Ҫ�ع�������
            StringCollection blkClassification = new StringCollection();
            //blkClassification.Add("pipe"); // ����pipeҪ��
            blkClassification.Add("") ;// ����Ҫ�ع���
            bfilter.SetFeatureClasses(blkClassification);

            ObjectIdCollection selectedIDCollection = new ObjectIdCollection();
            selectedIDCollection = GetAllEntity();

            ObjectIdCollection outIDCollection = new ObjectIdCollection() ;
            bfilter.FilterObjects(ref outIDCollection, selectedIDCollection);

            // ������˵õ��Ķ���
            HighlightEntity(outIDCollection);
        }
Пример #8
0
 /// <summary>
 /// Копирование объекта в одной базе
 /// </summary>
 /// <param name="idEnt">Копируемый объект</param>
 /// <param name="idBtrOwner">Куда копировать (контейнер - BlockTableRecord)</param>                
 public static ObjectId CopyEnt(this ObjectId idEnt, ObjectId idBtrOwner)
 {
     Database db = idEnt.Database;
     IdMapping map = new IdMapping();
     ObjectIdCollection ids = new ObjectIdCollection(new[] { idEnt });
     db.DeepCloneObjects(ids, idBtrOwner, map, false);
     return map[idEnt].Value;
 }
Пример #9
0
 public static ObjectIdCollection Draw(String block, params Entity[] ents)
 {
     ObjectIdCollection ids = new ObjectIdCollection();
     //Abrimos el documento activo
     Document doc = Application.DocumentManager.MdiActiveDocument;
     Editor ed = doc.Editor;
     //Abrimos la BD
     Database dwg = doc.Database;
     //Se utiliza el using para cerrar la
     //transacción
     //El Transaction Manager administra las transacciones y se
     //encuentra dentro de la BD
     using (Transaction tr = dwg.TransactionManager.StartTransaction())
     {
         try
         {
             //1: Abrir tabla de bloques en modo lectura
             BlockTable blkTab = (BlockTable)
                 dwg.BlockTableId.GetObject(OpenMode.ForRead);
             //2: Checar si existe mi bloque
             BlockTableRecord myRecord;
             if (!blkTab.Has(block))
             {
                 //3: Upgrade Open cambia un objeto de lectura
                 //a escritura
                 blkTab.UpgradeOpen();
                 BlockTableRecord newRecord = new BlockTableRecord();
                 newRecord.Name = block;
                 //4: Agregar a la tabla y notificar
                 blkTab.Add(newRecord);
                 tr.AddNewlyCreatedDBObject(newRecord, true);
                 myRecord = newRecord;
             }
             else
             {
                 //3: Solo lo abro
                 myRecord = (BlockTableRecord)
                     blkTab[block].GetObject(OpenMode.ForWrite);
             }
             //Dibujar en myRecord
             foreach (Entity ent in ents)
             {
                 myRecord.AppendEntity(ent);
                 tr.AddNewlyCreatedDBObject(ent, true);
                 ids.Add(ent.Id);
             }
             tr.Commit();
         }
         catch (Exception exc)
         {
             //Si algo sale mal aborta
             ed.WriteMessage(exc.Message);
             tr.Abort();
         }
     }
     return ids;
 }
Пример #10
0
 public static void CopyDict(Database dbDest)
 {
     // Копирование словаря АКР в базу
     var idDict = getDict();
     if (idDict.IsNull)
     {
         throw new Exception("Словарь АКР в текущем чертеже не найден.");
     }
     var ids = new ObjectIdCollection();
     ids.Add(idDict);
     var map = new IdMapping();
     dbDest.WblockCloneObjects(ids, dbDest.NamedObjectsDictionaryId, map, DuplicateRecordCloning.Replace, false);
 }
        public ChangeAttributeValuesToUpper()
        {
            // gets only block inserts
            SelectionFilter sf = GetSelectionFilter();

            // now we want a selection set out of this
            ss = BlockUtility.GetSS(sf);

            if (ss != null)
            {
                selectionSetIds = BlockUtility.GetAllIDsFromSS(ss);
            }
        }
Пример #12
0
 public static ObjectId CopyEnt(ObjectId idEnt, ObjectId idBtrOwner)
 {
     Database destDb = idBtrOwner.Database;
     ObjectId resId = ObjectId.Null;
     using (IdMapping map = new IdMapping())
     {
         using (var ids = new ObjectIdCollection(new ObjectId[] { idEnt }))
         {
             destDb.WblockCloneObjects(ids, destDb.BlockTableId, map,  DuplicateRecordCloning.Ignore, false);
             resId = map[idEnt].Value;
         }
     }
     return resId;
 }
Пример #13
0
 public void ChangeBlockFrame(Database db, bool insertDescription)
 {
     // Замена блока рамки если он есть в чертеже фасада
      if (IsOk)
      {
     using (IdMapping iMap = new IdMapping())
     {
        var ids = new ObjectIdCollection();
        ids.Add(_idBtrFrame);
        db.WblockCloneObjects(ids, db.BlockTableId, iMap, DuplicateRecordCloning.Replace, false);
     }
     // Запись атрибутов (Наименование, и другие если есть)
     changeBlkRefFrame(db, Settings.Default.BlockFrameName, insertDescription);
      }
 }
Пример #14
0
        ///<summary>
        ///Selects the objects
        ///<summary>
        ///<param name = "objIds">[out] An object collection which holds the selected objects</param>
        ///<returns>Returns the status of selection</returns>
        public static PromptStatus SelectIds(ObjectIdCollection objIds)
        {
            PromptSelectionResult promptSelectionResult = Utility.AcadEditor.GetSelection();
            PromptStatus result = promptSelectionResult.Status;
            SelectionSet selectionSet = promptSelectionResult.Value;
            if (selectionSet == null)
            {
                return result;
            }

            foreach (SelectedObject selObj in selectionSet)
            {
                objIds.Add(selObj.ObjectId);
            }
            return result;
        }
Пример #15
0
        public void ChangeCoverAndTitle(Database db)
        {
            // Замена блоков обложки и титульного лисчта
             if (!IsOkCover && !IsOkTitle)
             {
            return;
             }

             var ids = new ObjectIdCollection();
             if (IsOkCover)
             {
            ids.Add(IdCoverBtr);
             }
             if (IsOkTitle)
             {
            ids.Add(IdTitleBtr);
             }
             using (IdMapping iMap = new IdMapping())
             {
            db.WblockCloneObjects(ids, db.BlockTableId, iMap, DuplicateRecordCloning.Replace, false);
             }
        }
Пример #16
0
        /// <summary>
        /// Создание ассоциативной штриховки по полилинии
        /// Полилиния должна быть в базе чертежа
        /// </summary>        
        public static Hatch CreateAssociativeHatch(Curve loop, BlockTableRecord cs, Transaction t,
            string pattern = "SOLID", string layer = null, LineWeight lw = LineWeight.LineWeight015)
        {
            var h = new Hatch();
            h.SetDatabaseDefaults();
            if (layer != null)
            {
                Layers.LayerExt.CheckLayerState(layer);
                h.Layer = layer;
            }
            h.LineWeight = lw;
            h.Linetype = SymbolUtilityServices.LinetypeContinuousName;
            h.SetHatchPattern(HatchPatternType.PreDefined, pattern);
            cs.AppendEntity(h);
            t.AddNewlyCreatedDBObject(h, true);
            h.Associative = true;
            h.HatchStyle = HatchStyle.Normal;

            // добавление контура полилинии в гштриховку
            var ids = new ObjectIdCollection();
            ids.Add(loop.Id);
            try
            {
                h.AppendLoop(HatchLoopTypes.Default, ids);
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex, $"CreateAssociativeHatch");
                h.Erase();
                return null;
            }
            h.EvaluateHatch(true);

            var orders = cs.DrawOrderTableId.GetObject(OpenMode.ForWrite) as DrawOrderTable;
            orders.MoveToBottom(new ObjectIdCollection(new[] { h.Id }));

            return h;
        }
Пример #17
0
 ///// <summary>
 ///// Копирование определенич блока из внешнего чертежа
 ///// </summary>
 ///// <param name="blName">Имя блока</param>
 ///// <param name="fileDrawing">Полный путь к чертежу из которого копируется блок</param>
 ///// <param name="destDb">База чертежа в который копируетсяя блок</param>
 ///// <exception cref="Exception">Если нет блока в файле fileDrawing.</exception>
 //public static void CopyBlockFromExternalDrawing(string blName, string fileDrawing, Database destDb)
 //{
 //   using (var extDb = new Database(false, true))
 //   {
 //      extDb.ReadDwgFile(fileDrawing, System.IO.FileShare.ReadWrite, true, "");
 //      ObjectIdCollection ids = new ObjectIdCollection();
 //      using (var t = extDb.TransactionManager.StartTransaction())
 //      {
 //         var bt = (BlockTable)t.GetObject(extDb.BlockTableId, OpenMode.ForRead);
 //         if (bt.Has(blName))
 //         {
 //            ids.Add(bt[blName]);
 //         }
 //         else
 //         {
 //            throw new Exception(string.Format("Не найдено определение блока {0} в файле {1}", blName, fileDrawing));
 //         }
 //         t.Commit();
 //      }
 //      // Если нашли – добавим блок
 //      if (ids.Count != 0)
 //      {
 //         // Получаем текущую базу чертежа
 //         IdMapping iMap = new IdMapping();
 //         destDb.WblockCloneObjects(ids, destDb.BlockTableId, iMap, DuplicateRecordCloning.Ignore, false);
 //      }
 //   }
 //}
 /// <summary>
 /// Копирование определения блока и добавление его в таблицу блоков.
 /// </summary>
 /// <param name="idBtrSource">Копируемый блок</param>
 /// <param name="name">Имя для нового блока</param>
 /// <returns>ID скопированного блока, или существующего в чертеже с таким именем.</returns>
 public static ObjectId CopyBtr(ObjectId idBtrSource, string name)
 {
     ObjectId idBtrCopy = ObjectId.Null;
      Database db = idBtrSource.Database;
      ObjectIdCollection ids = new ObjectIdCollection ();
      using (var btrSource = idBtrSource.Open(OpenMode.ForRead) as BlockTableRecord)
      {
     using (var bt = db.BlockTableId.Open( OpenMode.ForRead) as BlockTable)
     {
        //проверка имени блока
        if (bt.Has(name))
        {
           idBtrCopy = bt[name];
        }
        else
        {
           using (var btrCopy = btrSource.Clone() as BlockTableRecord)
           {
              btrCopy.Name = name;
              bt.UpgradeOpen();
              idBtrCopy = bt.Add(btrCopy);
              // Объекты в блоке для копирования
              foreach (ObjectId idEnt in btrSource)
              {
                 ids.Add(idEnt);
              }
           }
        }
     }
      }
      if (ids.Count>0)
      {
     // Копирование объектов блока
     IdMapping map = new IdMapping();
     db.DeepCloneObjects(ids, idBtrCopy, map, false);
      }
      return idBtrCopy;
 }
Пример #18
0
        public void CustFilter()
        {
            try
            {
                // �����Զ�����˶��󣬲��趨��������
                MyPolylineFilter cfilter = new MyPolylineFilter();
                cfilter.MinLen = 500.0;
                cfilter.MaxLen = 2000.0;
                // ��ȡҪ���˵Ķ���
                ObjectIdCollection selectedIDCollection = new ObjectIdCollection();
                selectedIDCollection = GetAllEntity();
                // ִ�й���
                ObjectIdCollection outIDCollection = new ObjectIdCollection();
                cfilter.FilterObjects(outIDCollection, selectedIDCollection);

                // ������˵õ��Ķ���
                HighlightEntity(outIDCollection);
            }
            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
                Utility.AcadEditor.WriteMessage(e.Message);
            }
        }
Пример #19
0
 public static ObjectIdCollection Draw(params Entity[] ents)
 {
     ObjectIdCollection ids = new ObjectIdCollection();
     //Abrimos el documento activo
     Document doc = Application.DocumentManager.MdiActiveDocument;
     Editor ed = doc.Editor;
     //Abrimos la BD
     Database dwg = doc.Database;
     //Se utiliza el using para cerrar la
     //transacción
     //El Transaction Manager administra las transacciones y se
     //encuentra dentro de la BD
     using (Transaction tr = dwg.TransactionManager.StartTransaction())
     {
         try
         {
             BlockTableRecord currentSpace = (BlockTableRecord)
                 dwg.CurrentSpaceId.GetObject(OpenMode.ForWrite);
             foreach (Entity ent in ents)
             {
                 //Se borra un elemento
                 //Id.GetObject(OpenMode.ForWrite).Erase()
                 currentSpace.AppendEntity(ent);
                 tr.AddNewlyCreatedDBObject(ent, true);
                 ids.Add(ent.Id);
             }
             tr.Commit();
         }
         catch (Exception exc)
         {
             //Si algo sale mal aborta
             ed.WriteMessage(exc.Message);
             tr.Abort();
         }
     }
     return ids;
 }
Пример #20
0
 public Volado(int numMonedas, Point3d insPt)
 {
     monedasIds = new ObjectIdCollection();
     Circle c;
     Double x = 0, y = 0;
     Point3d center;
     for (int i = 0; i < numMonedas; i++)
     {
         if (i % 4 == 0 && i!=0)     //En múltiplos de 4 salta de línea
         {
             y++;
             x = 0;
         }
         //Seleccionar el centro
         if (i == 0)
             center = insPt;
         else
             center = new Point3d(insPt.X + x * 4, insPt.Y + y * 4, 0);
         x++;
         //Dibujar el circulo
         c = new Circle(center, Vector3d.ZAxis, 2);
         monedasIds.Add(Lab3.DBMan.Draw(c)[0]);
     }
 }
        private void CopyEtalonStyle(ObjectIdCollection col)
        {
            IdMapping acIdMap = new IdMapping();
            using (Transaction t = targetDB.TransactionManager.StartTransaction())
            {
                DimStyleTable tst = (DimStyleTable)t.GetObject(targetDB.DimStyleTableId, OpenMode.ForRead);
                // ObjectIdCollection col = new ObjectIdCollection();
                // col.Add(pikStyle.ObjectId);

                targetDB.WblockCloneObjects(col, tst.Id, acIdMap, DuplicateRecordCloning.Replace, false);
                t.Commit();
            }
        }
Пример #22
0
        private void сreateHatch(Extents3d extText, BlockTableRecord btr)
        {
            if (extText.Diagonal() < 100)
            {
                return;
            }
            // Отступ контура штриховки от границ текста
            Extents3d ext = new Extents3d(new Point3d(extText.MinPoint.X - 10, extText.MinPoint.Y - 10, 0),
                                          new Point3d(extText.MaxPoint.X + 10, extText.MaxPoint.Y + 10, 0));
            var h = new Hatch();
            h.SetDatabaseDefaults(btr.Database);
            if (!panelBtr.CaptionLayerId.IsNull)
                h.LayerId = panelBtr.CaptionLayerId;
            h.LineWeight = LineWeight.LineWeight015;
            h.Linetype = SymbolUtilityServices.LinetypeContinuousName;
            h.Color = Color.FromRgb(250, 250, 250);
            h.Transparency = new Transparency(80);
            h.SetHatchPattern(HatchPatternType.PreDefined, "ANGLE");
            h.PatternScale = 25.0;
            btr.AppendEntity(h);
            var t = btr.Database.TransactionManager.TopTransaction;
            t.AddNewlyCreatedDBObject(h, true);
            h.Associative = true;
            h.HatchStyle = HatchStyle.Normal;

            // Полилиния по контуру текста
            Polyline pl = new Polyline();
            pl.SetDatabaseDefaults(btr.Database);
            pl.LineWeight = LineWeight.LineWeight015;
            pl.Linetype = SymbolUtilityServices.LinetypeContinuousName;
            pl.ColorIndex = 256; // ПоСлою
            if (!panelBtr.CaptionLayerId.IsNull)
                pl.LayerId = panelBtr.CaptionLayerId;
            pl.AddVertexAt(0, ext.MinPoint.Convert2d(), 0, 0, 0);
            pl.AddVertexAt(0, new Point2d(ext.MaxPoint.X, ext.MinPoint.Y), 0, 0, 0);
            pl.AddVertexAt(0, ext.MaxPoint.Convert2d(), 0, 0, 0);
            pl.AddVertexAt(0, new Point2d(ext.MinPoint.X, ext.MaxPoint.Y), 0, 0, 0);
            pl.Closed = true;

            ObjectId idPl = btr.AppendEntity(pl);
            t.AddNewlyCreatedDBObject(pl, true);

            // добавление контура полилинии в гштриховку
            var ids = new ObjectIdCollection();
            ids.Add(idPl);
            h.AppendLoop(HatchLoopTypes.Default, ids);
            h.EvaluateHatch(true);

            // Замена текстов - чтобы они стали поверх штриховки.
            panelBtr.IdCaptionMarkSb = replaceText(panelBtr.IdCaptionMarkSb, btr);
            panelBtr.IdCaptionPaint = replaceText(panelBtr.IdCaptionPaint, btr);
        }
Пример #23
0
        public static void MergeSelectionSets()
        {

            Editor acDocEd = AcadApp.Application.DocumentManager.MdiActiveDocument.Editor;
            PromptSelectionResult acSSPrompt;

            acSSPrompt = acDocEd.GetSelection();

            SelectionSet acSSet1;

            ObjectIdCollection acObjIdColl = new ObjectIdCollection();

            if (acSSPrompt.Status == PromptStatus.OK)
            {
                acSSet1 = acSSPrompt.Value; // 获取所选对象
                acObjIdColl = new ObjectIdCollection(acSSet1.GetObjectIds());// 向ObjectIdCollection中追加所选对象
            }

            //可以合并多个选择集,方法是创建一个ObjectIdCollection集合对象然后从多个选择集中将对象id都添加到集合中。除了向ObjectIdCollection对象添加对象id,还可以从中删除对象id。所有对象id都添加到ObjectIdCollection集合对象后,可以遍历该集合并根据需要操作每个对象。

            acSSPrompt = acDocEd.GetSelection();
            SelectionSet acSSet2;

            if (acSSPrompt.Status == PromptStatus.OK)
            {
                acSSet2 = acSSPrompt.Value;

                if (acObjIdColl.Count == 0)  // 检查ObjectIdCollection集合大小,如果为0就对其初始化
                {

                    acObjIdColl = new ObjectIdCollection(acSSet2.GetObjectIds());
                }

                else
                {
                    foreach (ObjectId acObjId in acSSet2.GetObjectIds())// Step through the second selection set遍历第二个选择集
                    {
                        acObjIdColl.Add(acObjId); // 将第二个选择集中的每个对象id添加到集合内

                    }
                }

            }

            foreach (ObjectId acObjId in acObjIdColl)
            {

                AcadApp.Application.ShowAlertDialog("example : " + acObjId.ToString() + "," + acObjId.Handle.Value);
            }

            AcadApp.Application.ShowAlertDialog("Number of objects selected: " + acObjIdColl.Count.ToString());

        }
Пример #24
0
 public void CreateGroup(ObjectIdCollection objIds, string groupName)
 {
     Group gp = new Group(groupName, true);         //创建名为groupName的组
     Database db = AcadApp.Application.DocumentManager.MdiActiveDocument.Database;
     //获取事务处理管理器,用来对数据库进行操作
     using (Transaction ta = db.TransactionManager.StartTransaction())
     {
         DBDictionary dict = (DBDictionary)ta.GetObject(db.GroupDictionaryId, OpenMode.ForWrite, false);  //获取组所在的"Group"字典		
         dict.SetAt(groupName, gp);  //在"Group"字典中加入组对象		
         foreach (ObjectId thisId in objIds)
         {
             gp.Append(thisId);   //在组中加入ObjectId为thisId的实体
         }
         ta.AddNewlyCreatedDBObject(gp, true);
         ta.Commit();
     }
 }
Пример #25
0
        public static void ChangeColorIndex(ObjectIdCollection c, int i)
        {
            AcadApp.Document doc = AcadApp.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)tran.GetObject(db.BlockTableId, OpenMode.ForRead);// 得到块表
                BlockTableRecord btr = (BlockTableRecord)tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                foreach (ObjectId obj in c)
                {
                    Entity acEnt = tran.GetObject(obj, OpenMode.ForWrite) as Entity;

                    acEnt.ColorIndex = i;
                }
                tran.Commit();
            }
        }
Пример #26
0
        public ObjectIdCollection AddLineandcirclr()
        {
            ObjectIdCollection objcoll = new ObjectIdCollection();
            //过程都是先得到数据库,然后依次打开块表、块表记录,接着添加实体,最后关闭块表、块表记录。

            //    Database db = HostApplicationServices.WorkingDatabase;//获得当前工作空间的数据库
            AcadApp.Document doc = AcadApp.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            //  开始事务处理,也就是往CAD中加入东西
            Circle circle;
            ObjectId objcid, objlid;
            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)tran.GetObject(db.BlockTableId, OpenMode.ForRead);// 得到块表
                // //  获得AutoCAD块表,AutoCAD将加入到图形中的对象的信息都放在这个表中
                BlockTableRecord btr = (BlockTableRecord)tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);//得到模型空间的块表纪录
                //***                 // 使用当前的空间Id来获取块表记录——注意我们是打开它用来写入
                // ***   BlockTableRecord btr = (BlockTableRecord)tran.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);


                Line l = new Line(new Point3d(0, 0, 0), new Point3d(200, 200, 0));

                // 定义一个Circle对象来表示你要生成的圆,传入的第二个参数为圆的法向,就是把圆生成在什么面上,因为AutoCAD程序一般都是平面问题,因此你一般都把这个法向量定义成//z轴方向。

                circle = new Circle(new Point3d(200, 200, 0), new Vector3d(0.0, 0.0, 1.0), 50); // Vector3d.ZAxis


                objlid = btr.AppendEntity(l);//将直线加入到模型空间中    //   向块表记录加入圆的相关信息
                tran.AddNewlyCreatedDBObject(l, true);

                objcoll.Add(objlid);


                objcid = btr.AppendEntity(circle);
                objcoll.Add(objcid);
                tran.AddNewlyCreatedDBObject(circle, true);
                tran.Commit();  //一旦完成以上操作,我们就提交事务处理,这样以上所做的改变就被保存了……

                //然后销毁事务处理,因为我们已经完成了相关的操作(事务处理不是数据库驻留对象,可以销毁)

            }

            System.Diagnostics.Trace.WriteLine(objcid.ToString());

            //面的代码是根据用户在命令行中的选择来改变圆的颜色。
            Editor ed = doc.Editor;
            //Editor ed = Entities.Editor;
            // PromptKeywordOptions定义一个关键字列表选项
            PromptKeywordOptions opt = new PromptKeywordOptions("选择颜色[绿色(G)/蓝色(B)]<红色(R)>");
            //加入关键字列表
            opt.Keywords.Add("R");
            opt.Keywords.Add("G");
            opt.Keywords.Add("B");
            //获取用户输入的关键字
            PromptResult result = ed.GetKeywords(opt);
            //判断是否输入了定义的关键字
            if (result.Status == PromptStatus.OK)
            {
                //根据用户选择的关键字,来改变圆的颜色
                switch (result.StringResult)
                {
                    case "R":
                        // PutColorIndex是ZHFARX库中改变对象颜色的函数

                        ChangeColorIndex(objcoll, 1);
                        break;
                    case "G":
                        ChangeColorIndex(objcoll, 3);
                        break;
                    case "B":
                        ChangeColorIndex(objcoll, 5);
                        break;
                }
            }
            return objcoll;
        }
Пример #27
0
        public void ImportBlocks()
        {
            
            AcadApp.DocumentCollection dm = AcadApp.Application.DocumentManager;
            Editor ed = dm.MdiActiveDocument.Editor;
            Database destDb = dm.MdiActiveDocument.Database;
            Database sourceDb = new Database(false, true);
            PromptResult sourceFileName;
            try
            {
                //从命令行要求用户输入以得到要导入的块所在的源DWG文件的名字
                sourceFileName = ed.GetString("\nEnter the name of the source drawing: ");
                //把源DWG读入辅助数据库
                sourceDb.ReadDwgFile(sourceFileName.StringResult, System.IO.FileShare.Write, true, "");
                //用集合变量来存储块ID的列表
                ObjectIdCollection blockIds = new ObjectIdCollection();
                Autodesk.AutoCAD.DatabaseServices.TransactionManager tm =
                sourceDb.TransactionManager;
                using (Transaction myT = tm.StartTransaction())
                {
                    //打开块表
                    BlockTable bt = (BlockTable)tm.GetObject(sourceDb.BlockTableId,
                    OpenMode.ForRead, false);
                    //在块表中检查每个块
                    foreach (ObjectId btrId in bt)
                    {
                        BlockTableRecord btr = (BlockTableRecord)tm.GetObject(btrId,
                        OpenMode.ForRead, false);
                        //只添加有名块和非layout块(layout块是非MS和非PS的块) 
                        if (!btr.IsAnonymous && !btr.IsLayout)
                            blockIds.Add(btrId);
                        btr.Dispose();	//释放块表记录引用变量所占用的资源
                    }
                    bt.Dispose();//释放块表引用变量所占用的资源
                    //没有作改变,不需要提交事务
                    myT.Dispose();
                }
                
                IdMapping mapping = new IdMapping();
                mapping = sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, DuplicateRecordCloning.Replace, false);

                ed.WriteMessage("\nCopied " + blockIds.Count.ToString() + " block definitions from " + sourceFileName.StringResult + " to the current drawing.");
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage("\nError during copy: " + ex.Message);
            }
            sourceDb.Dispose();
        }
        ObjectIdCollection GetStandartDimStyles(List<DimStyleTableRecord> standartDimStyless, bool isFirstCopy)
        {
            ObjectIdCollection col = new ObjectIdCollection();
            foreach (DimStyleTableRecord style in standartDimStyless)
            {
                col.Add(style.ObjectId);
            }

            return col;
        }
        //create layer for signature
        private ObjectId createLayer(string lyname)
        {
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument.Editor;
            Database db = HostApplicationServices.WorkingDatabase;            

            //search the specific layer  
            TypedValue[] filList = new TypedValue[1] {
                        new TypedValue((int)DxfCode.LayerName, lyname)
                };
            SelectionFilter filter = new SelectionFilter(filList);

            PromptSelectionResult selRes = ed.SelectAll(filter);
            if (selRes.Status != PromptStatus.OK && 
                selRes.Status != PromptStatus.Error) //error means no such layer. can continue the following code
            {
                ed.WriteMessage("\nerror in getting all entities on a layer named " + lyname + " >>error:" + selRes.Status);
                return ObjectId.Null;
            }
                        
            LayerTableRecord signatureLayer = null;
            try
            {

                using (Transaction tr =
                    db.TransactionManager.StartTransaction())
                {
                    if (selRes.Status == PromptStatus.OK)
                    {
                        ed.WriteMessage("\nTo delete entities on the signature layer");

                        //delete all signatures (solids) on the old layer
                        ObjectId[] ids = selRes.Value.GetObjectIds();
                        foreach (ObjectId eachentid in ids)
                        {
                            Entity oEnt = tr.GetObject(eachentid, OpenMode.ForWrite) as Entity;
                            oEnt.Erase();
                        }
                    }

                    ed.WriteMessage("\nTo delete signature layer");
                    LayerTable layerTable = tr.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable;
                    if (layerTable.Has(lyname))
                    {
                        //delete the old layer
                        ObjectId LTR_id = layerTable[lyname];
                        ObjectIdCollection idCol = new ObjectIdCollection();
                        idCol.Add(LTR_id);
                        db.Purge(idCol);

                        LayerTableRecord oLTR = tr.GetObject(LTR_id, OpenMode.ForWrite) as LayerTableRecord;
                        oLTR.Erase();
                    }

                    ed.WriteMessage("\nTo create  signature layer");
                    //create new layer
                    signatureLayer = new LayerTableRecord();
                    signatureLayer.Name = lyname;
                    layerTable.Add(signatureLayer);
                    tr.AddNewlyCreatedDBObject(signatureLayer, true);

                    tr.Commit();
                }

                if (signatureLayer != null)
                    return signatureLayer.ObjectId;
                else
                    return ObjectId.Null;
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                ed.WriteMessage("\nerror in create layer " + ex.ToString());
                return ObjectId.Null;
            }
        }
Пример #30
0
        public void Main()
        {
            ObjectIdCollection objcoll = new ObjectIdCollection();

            //   objcoll= AddLineandcirclr();
            //CreateGroup(objcoll, "ASDK_TEST_GROUP");  
        }