using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using Autodesk.Revit.DB; using XYZ = Autodesk.Revit.DB.XYZ; using ELEMENT = Autodesk.Revit.DB.Element; using PARAMETERSET = Autodesk.Revit.DB.ParameterSet; using PARAMETER = Autodesk.Revit.DB.Parameter; using UIAPPLICATION = Autodesk.Revit.UI.UIApplication; using VIEWTYPE = Autodesk.Revit.DB.ViewType; using UV = Autodesk.Revit.DB.UV; using Autodesk.Revit.Enums; using Autodesk.Revit.Symbols; using Daves_macros; namespace Revit.SDK.Samples.InsertLegend.CS { /// /// cannot get Location to work between revit db and revit geometry at line 148 /// Inserts legends into Drawing Sheets /// Prep: run InsertLegendTestLoc to locate Legend on Plot sheet /// /// April 13, 2009 /// See //--- REVISE HERE --- for changes /// /// args in main routine in 'ThisDoc' defines View to revise stuff in /// public class InsertLegend { //private Document m_doc = null; ThisDocument m_doc; /// /// /// private InsertLegend() { } /// /// /// /// public InsertLegend(ThisDocument hostDoc) { m_doc = hostDoc; } /// /// run this sample now /// public void Run() { UIAPPLICATION app = m_doc.Application; Document doc = app.ActiveUIDocument.Document; string file_name = "c:\\Myfile.txt"; //open file StreamWriter sr = File.CreateText(file_name); sr.WriteLine("Legend"); sr.WriteLine("----------------------"); List viewSheets = new List(); //sheet list List viewLegend = new List(); //view list for legends try { View view = null; //Create a list that shows view types FilteredElementCollector coll = new FilteredElementCollector(doc); coll.OfClass(typeof(View)); foreach (ELEMENT e in coll) { if (e is ViewSheet) { viewSheets.Add(e as ViewSheet); } } foreach (ELEMENT ee in viewSheets) //sheet views { view = ee as View; //view is name of view type, ie, "DrawingSheet" // now we need the correct sheets: fps, etc. string myviewtype = view.ViewType.ToString(); //modified code if ((null != view) && (myviewtype == "DrawingSheet")) { //Put View Parameters in set PARAMETERSET viewpar = view.Parameters; foreach (PARAMETER thispar in viewpar) { string shtnumb = thispar.AsString(); //sheets to add Legend to //--- REVISE HERE --- //floor plans if ((shtnumb == "A2.05") | (shtnumb == "A2.12B") | (shtnumb == "A2.13A") | (shtnumb == "A2.13B") | (shtnumb == "A2.13C") | (shtnumb == "A2.13D") | (shtnumb == "A2.14A") | (shtnumb == "A2.14B")) //OTHER sheets will go here { sr.WriteLine("in sheet number"); //PASSES //Create a list that finds Legend views FilteredElementCollector legset = new FilteredElementCollector(doc); legset.OfClass(typeof(View)); //Note: legends are View types foreach (ELEMENT v in legset) { if (v is View) { viewLegend.Add(v as View); } } View myLegview = null; foreach (ELEMENT thisleg in viewLegend) //legend list { myLegview = thisleg as View; //--- REVISE HERE --- if ((null != myLegview) && (myLegview.Name == "FLOOR PLAN LEGEND")) { sr.WriteLine("in routine..."); //PASSING //sr.Close(); //bring in legend here //declare -thissheet- ViewSheet thissheet = view as ViewSheet; sr.WriteLine("view = " + view.ViewType.ToString()); //ok sr.WriteLine("thissheet = " + thissheet.ToString()); //autodesk.revit.db etc sr.WriteLine("mylegend = " + myLegview.Name.ToString()); //floor plan legend OK sr.Close(); ///new code for next thissheet.AddView(myLegview, new UV(5, 5)); //needs revit DB for location } } } } //end foreach for sheet number } } //sr.Close(); } catch (Exception ee) { //MessageBox.Show(ee.Message); } } } }