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; } } } } } }
/// <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(); } }
/// <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; }
//-------------------------------------------------------------------------- // // ���ܣ������Զ������ // // ���ߣ� // // ���ڣ�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); } }
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); }
/// <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; }
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; }
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); } }
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; }
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); } }
///<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; }
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); } }
/// <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; }
///// <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; }
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); } }
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; }
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(); } }
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); }
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()); }
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(); } }
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(); } }
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; }
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; } }
public void Main() { ObjectIdCollection objcoll = new ObjectIdCollection(); // objcoll= AddLineandcirclr(); //CreateGroup(objcoll, "ASDK_TEST_GROUP"); }