// // Copyright 2003-2010 by Autodesk, Inc. // // Permission to use, copy, modify, and distribute this software in // object code form for any purpose and without fee is hereby granted, // provided that the above copyright notice appears in all copies and // that both that copyright notice and the limited warranty and // restricted rights notice below appear in all supporting // documentation. // // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE // UNINTERRUPTED OR ERROR FREE. // // Use, duplication, or disclosure by the U.S. Government is subject to // restrictions set forth in FAR 52.227-19 (Commercial Computer // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) // (Rights in Technical Data and Computer Software), as applicable. // using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using Revit = Autodesk.Revit; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.DB.ExtensibleStorage; namespace RevitLookup.Test { /// /// A base class to manage the creation of schemas and entities of those schemas. /// public abstract class EStorageBundle { /// /// Set the schema name and guid the same way for all EStorage bundles. /// public EStorageBundle(string schemaName, Guid schemaGuid) { m_SchemaName = schemaName; m_SchemaGuid = schemaGuid; } /// /// Override this method to create an EStorage Schema /// public abstract Schema GetOrCreateSchema(); /// /// Override this method to create an Entity of the Schema created in GetOrCreateSchema. /// public abstract Entity CreateEntityOfSchema(); #region Accessors public Guid SchemaGuid { get { return m_SchemaGuid; } } public string SchemaName { get { return m_SchemaName; } } #endregion #region Data private Guid m_SchemaGuid; private string m_SchemaName; #endregion } partial class TestEStorage : RevitLookupTestFuncs { /// /// Add methods to add entities to selected elements or delete them as necessary here. /// Note that each method that adds an entity and schema is implemented in a separate class in /// .\EStroageSchemaDefinitions. See EStorageBundle1.cs for an example. /// /// public TestEStorage(Autodesk.Revit.UI.UIApplication app) : base(app) { m_testFuncs.Add(new RevitLookupTestFuncInfo("Add entity of Schema_1 to the current selection.", "Add entity of Schema_1 to the current selection", typeof(Entity), new RevitLookupTestFuncInfo.TestFunc(AddSchema1andEntity), RevitLookupTestFuncInfo.TestType.Modify)); m_testFuncs.Add(new RevitLookupTestFuncInfo("Add entity of Schema_2 to the current selection.", "Add entity of Schema_2 to the current selection", typeof(Entity), new RevitLookupTestFuncInfo.TestFunc(AddSchema2andEntity), RevitLookupTestFuncInfo.TestType.Modify)); m_testFuncs.Add(new RevitLookupTestFuncInfo("Delete all EStorage from the document.", "Delete all EStorage from the document", typeof(Entity), new RevitLookupTestFuncInfo.TestFunc(DeleteAllEStorage), RevitLookupTestFuncInfo.TestType.Modify)); m_testFuncs.Add(new RevitLookupTestFuncInfo("Delete all EStorage from the selected elements.", "Delete all EStorage from the selected elements", typeof(Entity), new RevitLookupTestFuncInfo.TestFunc(DeleteAllEStorageFromSelectedElements), RevitLookupTestFuncInfo.TestType.Modify)); m_testFuncs.Add(new RevitLookupTestFuncInfo("Delete all EStorage from the selected elements with prompting.", "Delete all EStorage from the selected elements with prompting.", typeof(Entity), new RevitLookupTestFuncInfo.TestFunc(DeleteAllEStorageFromSelectedElementsWithPrompting), RevitLookupTestFuncInfo.TestType.Modify)); } /// /// Called by all methods defined partial classes in .\EStorageSchemaDefinitions. See EStorageBundle1.cs for an example. /// /// private void AddSchemaAndEntityImplementation(EStorageBundle bundle) { Transaction tAddEntity = new Transaction(m_revitApp.ActiveUIDocument.Document, "Add Entity of: " + bundle.SchemaName); tAddEntity.Start(); foreach (ElementId id in m_revitApp.ActiveUIDocument.Selection.GetElementIds()) { Element element = m_revitApp.ActiveUIDocument.Document.GetElement(id); Entity entity = bundle.CreateEntityOfSchema(); element.SetEntity(entity); } tAddEntity.Commit(); } /// /// Delete all EStorage from the document, even if the user does not have read/write permission for it. /// public void DeleteAllEStorage() { Transaction tDelete = new Transaction(m_revitApp.ActiveUIDocument.Document, "Delete all storage."); tDelete.Start(); foreach (Schema schema in Schema.ListSchemas()) { Schema.EraseSchemaAndAllEntities(schema, true); } tDelete.Commit(); } /// /// Delete all EStorage from the document, even if the user does not have read/write permission for it. /// public void DeleteAllEStorageFromSelectedElements() { DeleteStorageFromElementImplementation(prompt: false); } public void DeleteAllEStorageFromSelectedElementsWithPrompting() { DeleteStorageFromElementImplementation(prompt: true); } /// /// Delete all EStorage from the document, even if the user does not have read/write permission for it. /// private void DeleteStorageFromElementImplementation(bool prompt) { Transaction tDeleteEntity = new Transaction(m_revitApp.ActiveUIDocument.Document, "Delete EStorage from Selected Elements."); bool storageExists = false; tDeleteEntity.Start(); foreach (ElementId id in m_revitApp.ActiveUIDocument.Selection.GetElementIds()) { Element element = m_revitApp.ActiveUIDocument.Document.GetElement(id); IList guids = element.GetEntitySchemaGuids(); foreach (Guid guid in guids) { Schema schema = Schema.Lookup(guid); storageExists = true; if (prompt) { DialogResult result = MessageBox.Show("Delete this Entity?" + Environment.NewLine + "Schema: " + schema.SchemaName + Environment.NewLine + "Guid: " + schema.GUID.ToString() + Environment.NewLine + "Vendor: " + schema.VendorId + Environment.NewLine + "Application: " + schema.ApplicationGUID.ToString(), "Delete EStorage?", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { element.DeleteEntity(schema); } } else element.DeleteEntity(schema); } } if (!storageExists) MessageBox.Show("No Storage to delete.", "Delete EStorage"); tDeleteEntity.Commit(); } } }