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);
}
}
}
}