12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Autodesk.Revit.ApplicationServices;
- using Autodesk.Revit.DB;
- using Autodesk.Revit.DB.Structure;
- using SAGA.RevitAPI;
- using View = Autodesk.Revit.DB.View;
- namespace SAGA.RevitUtils.Extends
- {
- public static class ViewExtend
- {
- public static ViewRangeConfigs GetViewRangeConfig(this ViewPlan viewPlan)
- {
- ViewRangeConfigs config = new ViewRangeConfigs(viewPlan.Document);
- PlanViewRange viewRange = viewPlan.GetViewRange();
- config.LevelIdBottomClipPlane = viewRange.GetLevelId(PlanViewPlane.BottomClipPlane);
- config.LevelIdCutPlane = viewRange.GetLevelId(PlanViewPlane.CutPlane);
- config.LevelIdTopClipPlane = viewRange.GetLevelId(PlanViewPlane.TopClipPlane);
- config.LevelIdUnderlayBottom = viewRange.GetLevelId(PlanViewPlane.UnderlayBottom);
- config.LevelIdViewDepthPlane = viewRange.GetLevelId(PlanViewPlane.ViewDepthPlane);
- config.OffsetBottomClipPlane = viewRange.GetOffset(PlanViewPlane.BottomClipPlane);
- config.OffsetCutPlane = viewRange.GetOffset(PlanViewPlane.CutPlane);
- config.OffsetTopClipPlane = viewRange.GetOffset(PlanViewPlane.TopClipPlane);
- config.OffsetUnderlayBottom = viewRange.GetOffset(PlanViewPlane.UnderlayBottom);
- config.OffsetViewDepthPlane = viewRange.GetOffset(PlanViewPlane.ViewDepthPlane);
- return config;
- }
- public static bool SetViewRangeConfig(this ViewPlan viewPlan, ViewRangeConfigs config,
- bool autoTransaction = false)
- {
- Transaction trans = null;
- if (autoTransaction)
- trans = new Transaction(viewPlan.Document, Guid.NewGuid().ToString());
- try
- {
- if (trans != null) trans.Start();
- PlanViewRange viewRange = viewPlan.GetViewRange();
- viewRange.SetLevelId(PlanViewPlane.BottomClipPlane, config.LevelIdBottomClipPlane);
- viewRange.SetLevelId(PlanViewPlane.CutPlane, config.LevelIdCutPlane);
- viewRange.SetLevelId(PlanViewPlane.TopClipPlane, config.LevelIdTopClipPlane);
- viewRange.SetLevelId(PlanViewPlane.UnderlayBottom, config.LevelIdUnderlayBottom);
- viewRange.SetLevelId(PlanViewPlane.ViewDepthPlane, config.LevelIdViewDepthPlane);
- viewRange.SetOffset(PlanViewPlane.BottomClipPlane, config.OffsetBottomClipPlane);
- viewRange.SetOffset(PlanViewPlane.CutPlane, config.OffsetCutPlane);
- viewRange.SetOffset(PlanViewPlane.TopClipPlane, config.OffsetTopClipPlane);
- viewRange.SetOffset(PlanViewPlane.UnderlayBottom, config.OffsetUnderlayBottom);
- viewRange.SetOffset(PlanViewPlane.ViewDepthPlane, config.OffsetViewDepthPlane);
- viewPlan.SetViewRange(viewRange);
- if (trans != null) trans.Commit();
- }
- catch
- {
- if (trans != null) trans.RollBack();
- return false;
- }
- return true;
- }
- /// <summary>
- /// 平面视图
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- public static bool IsPlan(this View view)
- {
- if (view.ViewType == ViewType.EngineeringPlan)
- {
- return true;
- }
- if (view.ViewType == ViewType.FloorPlan)
- {
- return true;
- }
- if (view.ViewType == ViewType.CeilingPlan)
- {
- return true;
- }
- if (view.ViewType == ViewType.AreaPlan)
- {
- return true;
- }
- return false;
- }
- /// <summary>
- /// 常规视图
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- public static bool IsNormalView(this View view)
- {
- if (view.IsTemplate)
- return false;
- if (view.ViewType == ViewType.Internal)
- return false;
- return true;
- }
- /// <summary>
- /// 视图的规程,区分建筑、结构
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- public static ViewDisciplineT GetDiscipline(this View view)
- {
- if (!view.ExsitsParameter(BuiltInParameter.VIEW_DISCIPLINE))
- return ViewDisciplineT.Unkonw;
- return (ViewDisciplineT) view.GetParameterInteger(BuiltInParameter.VIEW_DISCIPLINE);
- }
- /// <summary>
- /// 视图的规程,区分建筑、结构
- /// </summary>
- /// <param name="view"></param>
- /// <param name="discipline"></param>
- public static void SetDiscipline(this View view, ViewDisciplineT discipline)
- {
- view.SetParameter(BuiltInParameter.VIEW_DISCIPLINE, (int) discipline);
- }
- /// <summary>
- /// 建筑规程
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- public static bool IsArchitectural(this View view)
- {
- return view.GetDiscipline() == ViewDisciplineT.Architectural;
- }
- /// <summary>
- /// 结构规程
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- public static bool IsStructural(this View view)
- {
- return view.GetDiscipline() == ViewDisciplineT.Structural;
- }
- /// <summary>
- /// 绘制祥图线
- /// </summary>
- /// <param name="view"></param>
- /// <param name="elements"></param>
- public static void DrawDetailCurve(this View view, Element[] elements)
- {
- foreach (Element element in elements)
- {
- DrawDetailCurve(view, element);
- }
- }
- /// <summary>
- /// 绘制祥图线
- /// </summary>
- /// <param name="view"></param>
- /// <param name="element"></param>
- public static void DrawDetailCurve(this View view, Element element)
- {
- ExternalDataWrapper wrapper = ExternalDataWrapper.Current;
- if (element.Location is LocationCurve)
- {
- Curve curve = element.Location.GetCurve();
- if (curve != null)
- {
- DrawDetailCurve(view, curve);
- }
- }
- }
- /// <summary>
- /// 绘制祥图线
- /// </summary>
- /// <param name="view"></param>
- /// <param name="curves"></param>
- public static void DrawDetailCurve(this View view, Curve[] curves)
- {
- foreach (Curve curve in curves)
- {
- DrawDetailCurve(view, curve);
- }
- }
- /// <summary>
- /// 绘制祥图线
- /// </summary>
- /// <param name="view"></param>
- /// <param name="curve"></param>
- public static void DrawDetailCurve(this View view, Curve curve)
- {
- ExternalDataWrapper wrapper = ExternalDataWrapper.Current;
- DetailCurve detailLine = wrapper.DocCreater.NewDetailCurve(view, curve);
- detailLine.SetLineStyle(SysLineStyles.CurvesThinLines);
- }
- /// <summary>
- /// 绘制祥图线
- /// </summary>
- /// <param name="view"></param>
- /// <param name="polyLine"></param>
- public static void DrawDetailCurve(this View view, PolyLine polyLine)
- {
- ExternalDataWrapper wrapper = ExternalDataWrapper.Current;
- IList<XYZ> coords = polyLine.GetCoordinates();
- if (coords.Count < 2)
- return;
- for (int i = 0; i < coords.Count; i++)
- {
- XYZ p1 = coords[i];
- XYZ p2 = coords[i + 1 < coords.Count ? i + 1 : 0];
- if (coords.Count == 2 && i == 1)
- p2 = null;
- if (p2 != null)
- {
- Curve curve = Line.CreateBound(p1, p2);
- DetailCurve detailLine = wrapper.DocCreater.NewDetailCurve(view, curve);
- detailLine.SetLineStyle(SysLineStyles.CurvesThinLines);
- }
- }
- }
- public static void HideInverted(this View view, Element element)
- {
- ExternalDataWrapper wrapper = ExternalDataWrapper.Current;
- List<ViewPlan> list = wrapper.Doc.FilterElements<ViewPlan>();
- ElementSet set = new ElementSet();
- set.Insert(element);
- foreach (ViewPlan item in list)
- {
- if (!item.ViewName.Equals(view.ViewName))
- {
- item.HideElements(set.ToElementIds());
- }
- }
- }
- ///// <summary>
- ///// 跳转到平面视图
- ///// </summary>
- ///// <returns></returns>
- //public static bool GoToPlanView(this Document doc)
- //{
- // return doc.GoToPlanView(ViewSelect.ShowViewEnum.Viewplan);
- //}
- ///// <summary>
- ///// 跳转到平面视图
- ///// </summary>
- ///// <returns></returns>
- //public static bool GoToPlanView(this Document doc, ViewSelect.ShowViewEnum plan)
- //{
- // if ((plan == ViewSelect.ShowViewEnum.Viewplan && !doc.ActiveView.IsPlan()) ||
- // (plan == ViewSelect.ShowViewEnum.Viewsection && doc.ActiveView.ViewType != ViewType.Section &&
- // doc.ActiveView.ViewType != ViewType.Elevation) ||
- // (plan == ViewSelect.ShowViewEnum.Allview && doc.ActiveView.ViewType == ViewType.ThreeD)
- // )
- // {
- // ViewSelect vs = new ViewSelect(doc, plan);
- // if (vs.ShowDialog() == DialogResult.OK)
- // {
- // try
- // {
- // ExternalDataWrapper.Current.UIDoc.ActiveView = vs.SelectView;
- // }
- // catch
- // {
- // }
- // }
- // else
- // {
- // return false;
- // }
- // }
- // if (doc.ActiveView.SketchPlane == null)
- // {
- // //否则很多交互操作会出错
- // Transaction trans = new Transaction(doc, Guid.NewGuid().ToString());
- // trans.Start();
- // try
- // {
- // doc.ActiveView.SetWorkPlane();
- // trans.Commit();
- // }
- // catch
- // {
- // trans.RollBack();
- // }
- // }
- // return true;
- //}
- /// <summary>
- /// 平面跳转
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="level"></param>
- public static void SetView(this Document doc, Level level)
- {
- List<View> listView = doc.FilterElements<View>();
- View view1 = null;
- foreach (View view2 in listView)
- {
- if (view2.GenLevel != null && view2.GenLevel.IsEqual(level))
- {
- view1 = view2;
- break;
- }
- }
- ExternalDataWrapper.Current.UiDoc.ActiveView = view1;
- }
- /// <summary>
- /// 所有常规视图
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static View[] GetViews(this Document doc)
- {
- IList<View> views = doc.FilterElements<View>();
- List<View> listNormerViews = new List<View>();
- foreach (View view in views)
- {
- if (view.IsNormalView())
- {
- listNormerViews.Add(view);
- }
- }
- return listNormerViews.OrderBy(v => v.Name).ToArray();
- }
- /// <summary>
- /// 返回视图平面
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="level"></param>
- /// <returns></returns>
- public static ViewPlan GetViewPlan(this Document doc, Level level, ViewTypeT viewType)
- {
- ViewPlan viewRtn = null;
- List<ViewPlan> listView = doc.GetViewPlans(level);
- if (listView != null && listView.Count > 0)
- {
- ViewFamily vf = ViewFamily.Invalid;
- switch (viewType)
- {
- case ViewTypeT.FloorPlan:
- vf = ViewFamily.FloorPlan;
- break;
- case ViewTypeT.CeilingPlan:
- vf = ViewFamily.CeilingPlan;
- break;
- case ViewTypeT.StructuralPlan:
- vf = ViewFamily.StructuralPlan;
- break;
- }
- int intIndex = listView.FindIndex(p => (p.GetElementType() as ViewFamilyType).ViewFamily == vf);
- if (intIndex > -1)
- {
- viewRtn = listView[intIndex];
- }
- }
- return viewRtn;
- }
- /// <summary>
- /// 返回视图平面
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="strViewName"></param>
- /// <param name="viewType"></param>
- /// <returns></returns>
- public static ViewPlan GetViewPlan(this Document doc, string strViewName, ViewTypeT viewType)
- {
- ViewPlan viewRtn = null;
- List<ViewPlan> listView = doc.GetViewPlans(strViewName);
- if (listView != null && listView.Count > 0)
- {
- ViewFamily vf = ViewFamily.Invalid;
- switch (viewType)
- {
- case ViewTypeT.FloorPlan:
- vf = ViewFamily.FloorPlan;
- break;
- case ViewTypeT.CeilingPlan:
- vf = ViewFamily.CeilingPlan;
- break;
- case ViewTypeT.StructuralPlan:
- vf = ViewFamily.StructuralPlan;
- break;
- }
- int intIndex = listView.FindIndex(p => (p.GetElementType() as ViewFamilyType).ViewFamily == vf);
- if (intIndex > -1)
- {
- viewRtn = listView[intIndex];
- }
- }
- return viewRtn;
- }
- /// <summary>
- /// 返回结构视图平面ly
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static List<ViewPlan> GetStructuralPlan(this Document doc)
- {
- List<ViewPlan> listView = doc.FilterElements<ViewPlan>();
- if (listView != null && listView.Count > 0)
- {
- return
- listView.Where(v =>
- {
- var type = v.GetElementType() as ViewFamilyType;
- if (type != null && type.Name == "结构平面")
- {
- return type.ViewFamily == ViewFamily.StructuralPlan;
- }
- return false;
- }).ToList();
- }
- return new List<ViewPlan>();
- }
- /// <summary>
- /// 返回视图平面,注意一对多情况(楼层平面、天花板平面)
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="level"></param>
- /// <returns></returns>
- public static List<ViewPlan> GetViewPlans(this Document doc, Level level)
- {
- if (level == null)
- return null;
- List<ViewPlan> listView = doc.FilterElements<ViewPlan>();
- return listView.FindAll(p => (p.GenLevel != null && p.GenLevel.IsEqual(level)));
- }
- /// <summary>
- /// 返回视图平面,注意一对多情况(楼层平面、天花板平面)
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="strViewName"></param>
- /// <returns></returns>
- public static List<ViewPlan> GetViewPlans(this Document doc, string strViewName)
- {
- List<ViewPlan> listView = doc.FilterElements<ViewPlan>();
- return listView.FindAll(p => (p.ViewName == strViewName));
- }
- /// <summary>
- /// 视图的类型,在ViewType下不分结构、楼层平面,故单独区分一下
- /// </summary>
- /// <param name="view"></param>
- /// <returns></returns>
- public static ViewTypeT GetViewTypeT(this View view)
- {
- ViewTypeT viewType = ViewTypeT.Undefined;
- ViewFamily vf = (view.GetElementType() as ViewFamilyType).ViewFamily;
- switch (vf)
- {
- case ViewFamily.FloorPlan:
- viewType = ViewTypeT.FloorPlan;
- break;
- case ViewFamily.CeilingPlan:
- viewType = ViewTypeT.CeilingPlan;
- break;
- case ViewFamily.StructuralPlan:
- viewType = ViewTypeT.StructuralPlan;
- break;
- }
- return viewType;
- }
- /// <summary>
- /// 跳转到View3D
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static bool Set3DView(this Document doc)
- {
- string strName = "SAGA";
- return doc.Set3DView(strName);
- }
- /// <summary>
- /// 跳转到View3D
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="strName"></param>
- /// <returns></returns>
- public static bool Set3DView(this Document doc, string strName)
- {
- View view3D = doc.Get3DView(strName);
- if (view3D == null)
- {
- return false;
- }
- ExternalDataWrapper.Current.UiDoc.ActiveView = view3D;
- return true;
- }
- /// <summary>
- /// 生成SAGA View3D
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static View3D Get3DView(this Document doc)
- {
- string strName = "SAGA";
- return doc.Get3DView(strName);
- }
- /// <summary>
- /// 查找或创建View3D
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="strName"></param>
- /// <returns></returns>
- public static View3D Get3DView(this Document doc, string strName)
- {
- View3D view3D = doc.Find3DView(strName);
- if (view3D == null)
- {
- Transaction tran = new Transaction(doc, Guid.NewGuid().ToString());
- tran.Start();
- try
- {
- //view3D = doc.CreateView3dVer(new XYZ(0.6, -0.6, 0.5));
- view3D = doc.CreateView3D(new XYZ(0.577350269189626, -0.577350269189626, 0.577350269189626));
- view3D.Name = strName;
- tran.Commit();
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- tran.RollBack();
- }
- }
- return view3D;
- }
- /// <summary>
- /// 名字查找View
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="name"></param>
- /// <returns></returns>
- public static View GetView(this Document doc)
- {
- List<View> listView = doc.FilterElements<View>();
- if (listView.Count > 0)
- {
- return listView[0];
- }
- return null;
- }
- /// <summary>
- /// 名字查找View
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="name"></param>
- /// <returns></returns>
- public static View GetView(this Document doc, string name)
- {
- List<View> listView = doc.FilterElements<View>();
- foreach (View v in listView)
- {
- if (v.Name.Equals(name))
- {
- return v;
- }
- }
- return null;
- }
- /// <summary>
- /// 查找View3D
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="strName"></param>
- /// <returns></returns>
- public static View3D Find3DView(this Document doc, string strName)
- {
- List<View3D> listView = doc.FilterElements<View3D>();
- foreach (View3D v in listView)
- {
- if (strName == v.Name)
- {
- return v;
- }
- }
- return null;
- }
- /// <summary>
- /// 平面视图
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static List<ViewPlan> GetViewPlan(this Document doc)
- {
- List<ViewPlan> listRtn = new List<ViewPlan>();
- List<ViewPlan> listView = doc.FilterElements<ViewPlan>();
- foreach (ViewPlan view in listView)
- {
- if (view.IsNormalView())
- {
- listRtn.Add(view);
- }
- }
- //listRtn.Sort(new ViewPlanCompare());
- return listRtn;
- }
- /// <summary>
- /// 剖面视图
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static List<ViewSection> GetViewSection(this Document doc)
- {
- List<ViewSection> listRtn = new List<ViewSection>();
- List<ViewSection> listView = doc.FilterElements<ViewSection>();
- foreach (ViewSection view in listView)
- {
- if (view.IsNormalView())
- {
- listRtn.Add(view);
- }
- }
- return listRtn.OrderBy(v => v.Name).ToList<ViewSection>();
- }
- /// <summary>
- /// 平面和剖面视图
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static List<View> GetViewPlanSection(this Document doc)
- {
- List<View> listRtn = new List<View>();
- listRtn.AddRange(doc.GetViewPlan().ToList<View>());
- listRtn.AddRange(doc.GetViewSection().ToList<View>());
- return listRtn;
- }
- /// <summary>
- /// 有些视图没有SketchPlane会出错,请在事物中调用
- /// </summary>
- /// <param name="view"></param>
- public static void SetWorkPlane(this View view)
- {
- if (view.SketchPlane == null)
- {
- bool blnRtn = false;
- Document doc = view.Document;
- Plane p = RevitApiBaseDll.NewPlane(view.ViewDirection, view.Origin);
- SketchPlane skp = SketchPlane.Create(doc, p);
- try
- {
- view.SketchPlane = skp;
- blnRtn = true;
- }
- catch
- {
- }
- if (!blnRtn)
- {
- ElementId skId = doc.ActiveView.GetParameterElementId(BuiltInParameter.VIEW_FIXED_SKETCH_PLANE);
- if (skId == ElementId.InvalidElementId)
- {
- doc.ActiveView.SetParameter(BuiltInParameter.VIEW_FIXED_SKETCH_PLANE, skp.Id);
- }
- }
- }
- }
- /// <summary>
- /// 把ViewType转为中文 XXG2013-08-30
- /// </summary>
- public static string ToStringChinese(this ViewType viewType)
- {
- string result = "";
- switch (viewType)
- {
- case ViewType.Undefined:
- result = "未定义";
- break;
- case ViewType.FloorPlan:
- result = "楼层平面";
- break;
- case ViewType.CeilingPlan:
- result = "天花板平面";
- break;
- case ViewType.Elevation:
- result = "立面";
- break;
- case ViewType.ThreeD:
- result = "3D视图";
- break;
- case ViewType.Schedule:
- result = "";
- break;
- case ViewType.DrawingSheet:
- result = "图表";
- break;
- case ViewType.Legend:
- result = "";
- break;
- case ViewType.EngineeringPlan:
- result = "";
- break;
- case ViewType.AreaPlan:
- result = "面积平面";
- break;
- case ViewType.Section:
- result = "剖面图";
- break;
- case ViewType.Detail:
- result = "详图";
- break;
- case ViewType.CostReport:
- result = "";
- break;
- case ViewType.LoadsReport:
- result = "";
- break;
- case ViewType.PresureLossReport:
- result = "";
- break;
- case ViewType.ColumnSchedule:
- result = "";
- break;
- case ViewType.PanelSchedule:
- result = "";
- break;
- case ViewType.Walkthrough:
- result = "";
- break;
- case ViewType.Rendering:
- result = "";
- break;
- case ViewType.Internal:
- result = "";
- break;
- }
- return result;
- }
- /// <summary>
- /// 设置3D视图视角(将视角设置为轴侧方式)
- /// </summary>
- /// <param name="view"></param>
- public static void SetViewOrientation(this View3D view)
- {
- XYZ max = new XYZ(100, -100, 100);
- XYZ min = new XYZ(-100, 100, -100);
- XYZ vector = min.Subtract(max).Normalize();
- XYZ upDirection = XYZ.BasisZ;
- XYZ rightDirection = upDirection.CrossProduct(vector).Normalize();
- upDirection = vector.CrossProduct(rightDirection).Normalize();
- view.SetOrientation(new ViewOrientation3D(max, upDirection, vector));
- }
- /// <summary>
- /// 类型可见性
- /// </summary>
- /// <param name="view"></param>
- /// <param name="cat"></param>
- /// <param name="blnVisible"></param>
- public static void SetVisible(this View view, Category cat, bool blnVisible)
- {
- //在视图中单独隐藏的图元,否则报错
- try
- {
- cat.set_Visible(view, blnVisible);
- }
- catch(Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- /// <summary>
- /// 根据一个范围框创建局部3D视图
- /// 默认轴侧显示
- /// 默认不显示分析线
- /// </summary>
- /// <param name="box">局部视图范围框</param>
- /// <param name="name">局部视图名称</param>
- /// <param name="isExistCreate">如果名称存在是否创建</param>
- /// <param name="doc">返回创建好的视图 isExistCreate=false:名称存在返回null</param>
- public static View3D GetPartThreeDView(this Document doc, BoundingBoxXYZ box, string name,
- bool isExistCreate = true)
- {
- bool isExist = doc.CheckName(ref name);
- //存在重复名称 并且 名称存在时不允许创建
- if (isExist && !isExistCreate)
- return null;
- //创建一个新的3D视图
- View3D view = doc.CreateView3D(new XYZ(0.6, 0.6, 0.5));
- if (view != null)
- {
- view.SetParameter(BuiltInParameter.VIEW_NAME, name);
- //设置3D视图的剖面框为可用
- if (view.GetParameter(BuiltInParameter.VIEWER_MODEL_CLIP_BOX_ACTIVE) != null)
- {
- view.SetParameter(BuiltInParameter.VIEWER_MODEL_CLIP_BOX_ACTIVE, 1);
- }
- //设置视觉样式:真实
- view.DisplayStyle = DisplayStyle.RealisticWithEdges;
- //设置详细程度:精细
- view.DetailLevel = ViewDetailLevel.Fine;
- //不显示模型线
- List<AnalyticalModel> list = doc.FilterElements<AnalyticalModel>();
- if (list != null && list.Count > 0)
- {
- list.RemoveAll(p => p.IsHidden(view) && !p.CanBeHidden(view));
- ElementSet set = new ElementSet();
- list.ForEach(p => set.Insert(p));
- if (set.Size > 0)
- view.HideElements(set.ToElementIds());
- }
- view.SetViewOrientation();
- //设置剪裁框
- view.SetSectionBox(box);
- }
- return view;
- }
- public static IList<ElementId> ToElementIds(this ElementSet set)
- {
- List<ElementId> ids = new List<ElementId>();
- foreach (Element elem in set)
- {
- if (elem == null)
- continue;
- ids.Add(elem.Id);
- }
- return ids.ToArray();
- }
- /// <summary>
- /// 检查名称
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="name"></param>
- /// <returns>是否存在</returns>
- private static bool CheckName(this Document doc, ref string name)
- {
- bool result = false;
- #region 判断名字是否重复
- List<View3D> allView3D = doc.FilterElements<View3D>();
- if (allView3D != null)
- {
- int i = 0;
- StringBuilder tempName = new StringBuilder(name);
- while (true)
- {
- List<View3D> temp = allView3D.FindAll(p => p.Name.IndexOf(tempName.ToString()) != -1);
- if (temp != null && temp.Count > 0)
- {
- i++;
- tempName = new StringBuilder(name + i);
- }
- else
- {
- break;
- }
- }
- name = tempName.ToString();
- result = i > 0;
- }
- #endregion
- return result;
- }
- /// <summary>
- /// 三维视图 增加规程的设置
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="xyz"></param>
- /// <returns></returns>
- public static View3D CreateView3D(this Document doc, XYZ xyz)
- {
- View3D view3D = null;
- List<ViewFamilyType> listVft = doc.FilterElements<ViewFamilyType>();
- ElementId view3DId = ElementId.InvalidElementId;
- foreach (ViewFamilyType vft in listVft)
- {
- if (vft.ViewFamily == ViewFamily.ThreeDimensional)
- {
- view3DId = vft.Id;
- break;
- }
- }
- view3D = View3D.CreateIsometric(doc, view3DId);
- ViewOrientation3D viewOrientation3D = new ViewOrientation3D(new XYZ(1, 1, -1), new XYZ(0, 0, 1),
- new XYZ(0, 1, 0));
- view3D.SetOrientation(viewOrientation3D);
- view3D.SaveOrientation();
- //下面很重要,否则造成一些构件无法显示
- view3D.SetDiscipline(ViewDisciplineT.Coordination);
- return view3D;
- }
- /// <summary>
- /// 视图平面创建
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="pViewName"></param>
- /// <param name="pLevel"></param>
- /// <param name="discipline"></param>
- /// <param name="strViewFamilyName"></param>
- /// <returns></returns>
- public static ViewPlan CreateViewPlanVer(this Document doc, string pViewName, Level pLevel,
- ViewDisciplineT discipline, string strViewFamilyName = null)
- {
- ViewPlan vp = null;
- switch (discipline)
- {
- case ViewDisciplineT.Architectural:
- vp = CreateViewPlanVer(doc, pViewName, pLevel, discipline, ViewTypeT.FloorPlan, strViewFamilyName);
- break;
- case ViewDisciplineT.Structural:
- vp = CreateViewPlanVer(doc, pViewName, pLevel, discipline, ViewTypeT.StructuralPlan,
- strViewFamilyName);
- break;
- }
- return vp;
- }
- /// <summary>
- /// 视图平面创建
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="pViewName"></param>
- /// <param name="pLevel"></param>
- /// <param name="discipline"></param>
- /// <param name="viewType"></param>
- /// <param name="strViewFamilyName"></param>
- /// <returns></returns>
- public static ViewPlan CreateViewPlanVer(this Document doc, string pViewName, Level pLevel,
- ViewDisciplineT discipline, ViewTypeT viewType, string strViewFamilyName = null)
- {
- ViewPlan vRtn = null;
- ViewFamily vf = ViewFamily.Invalid;
- switch (viewType)
- {
- case ViewTypeT.FloorPlan:
- vf = ViewFamily.FloorPlan;
- break;
- case ViewTypeT.CeilingPlan:
- vf = ViewFamily.CeilingPlan;
- break;
- case ViewTypeT.StructuralPlan:
- vf = ViewFamily.StructuralPlan;
- break;
- }
- ProductType product = doc.Application.Product;
- if (product == ProductType.Architecture && discipline == ViewDisciplineT.Structural)
- {
- //在建筑revit中,使用结构楼层创建出错,与样板无关
- vf = ViewFamily.FloorPlan;
- }
- //2014-7-8 th 添加
- ElementId viewFamilyId = GetViewFamilyType(doc, strViewFamilyName, vf);
- vRtn = ViewPlan.Create(doc, viewFamilyId, pLevel.Id);
- //由于建筑Revit规则不同,这里增加判断是否存在视图 2014-7-15 th
- if (!vRtn.Name.Equals(pViewName) && !IsExistsViewPlan(doc, vRtn.ViewType, pViewName))
- vRtn.Name = pViewName;
- vRtn.SetDiscipline(discipline);
- return vRtn;
- }
- /// <summary>
- /// 由于建筑Revit中特殊情况,这里增加是否存在平面判断
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="vt"></param>
- /// <param name="pViewName"></param>
- /// <returns></returns>
- private static bool IsExistsViewPlan(Document doc, ViewType vt, string pViewName)
- {
- List<ViewPlan> temp = doc.GetViewPlans(pViewName);
- temp.RemoveAll(p => p.ViewType != vt);
- if (temp.Count > 0)
- return true;
- return false;
- }
- /// <summary>
- /// 根据视图类别和需要的视图类别名称,查询视图类型id
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="strViewFamilyName"></param>
- /// <param name="vf"></param>
- /// <returns></returns>
- public static ElementId GetViewFamilyType(this Document doc, string strViewFamilyName, ViewFamily vf)
- {
- ElementId viewFamilyId = ElementId.InvalidElementId;
- List<ViewFamilyType> listVft = doc.FilterElements<ViewFamilyType>();
- ViewFamilyType tempVft = listVft.Find(p => p.ViewFamily == vf);
- if (!string.IsNullOrEmpty(strViewFamilyName))
- {
- ViewFamilyType temp = listVft.Find(p => p.ViewFamily == vf && p.Name.Equals(strViewFamilyName));
- if (temp == null)
- tempVft = tempVft.Duplicate(strViewFamilyName) as ViewFamilyType;
- else
- tempVft = temp;
- }
- if (tempVft != null)
- viewFamilyId = tempVft.Id;
- return viewFamilyId;
- }
- /// <summary>
- /// 创建详图视图 2014-2-25 Add
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="point1"></param>
- /// <param name="point2"></param>
- /// <returns></returns>
- public static View NewViewCallout(this Document doc, XYZ point1, XYZ point2, ElementId parentId,
- string strViewFamilyName = null)
- {
- View vs = null;
- try
- {
- //2014-7-8 th 添加
- ElementId viewId = GetViewFamilyType(doc, strViewFamilyName, ViewFamily.Detail);
- if (parentId == null)
- parentId = doc.ActiveView.Id;
- vs = ViewSection.CreateCallout(doc, parentId, viewId, point1, point2);
- }
- catch (Exception e)
- {
- // MessageShow.Show(e);
- }
- return vs;
- }
- /// <summary>
- /// 绘制视图
- /// </summary>
- /// <param name="doc"></param>
- /// <returns></returns>
- public static ViewDrafting NewViewDrafting(this Document doc)
- {
- ElementId vftId = doc.GetViewFamilyType( "", ViewFamily.Drafting);
- return ViewDrafting.Create(doc, vftId);
- }
- /// <summary>
- /// 创建剖面
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="box"></param>
- /// <returns></returns>
- public static ViewSection NewViewSection(this Document doc, BoundingBoxXYZ box, string strViewFamilyName = null)
- {
- ViewSection vs = null;
- try
- {
- // 添加
- ElementId viewId = GetViewFamilyType(doc, strViewFamilyName, ViewFamily.Section);
- //参照剖面
- vs = ViewSection.CreateSection(doc, viewId, box);
- }
- catch (Exception e)
- {
- //MessageShow.Show(e);
- }
- return vs;
- }
- /// <summary>
- /// 创建图纸
- /// </summary>
- /// <param name="doc"></param>
- /// <param name="titleBlock">图框族</param>
- /// <returns></returns>
- public static ViewSheet NewViewSheet(this Document doc, FamilySymbol titleBlock)
- {
- ViewSheet result = null;
- try
- {
- if (titleBlock != null)
- {
- result = ViewSheet.Create(doc, titleBlock.Id);
- }
- }
- catch (Exception ex)
- {
- //MessageShow.Show(ex);
- }
- return result;
- }
- /// <summary>
- /// 调整墙的显示
- /// </summary>
- /// <param name="view"></param>
- public static void SetWallStyle(this View view)
- {
- ElementId stBeamId = new ElementId(BuiltInCategory.OST_Walls);
- OverrideGraphicSettings oGs = new OverrideGraphicSettings(view.GetCategoryOverrides(stBeamId));
- Color color = new Color(255, 255, 0);
- oGs.SetProjectionLineColor(color);
- oGs.SetCutLineColor(color);
- oGs.SetCutFillPatternVisible(false);
- oGs.SetProjectionFillPatternVisible(false);
- view.SetCategoryOverrides(stBeamId, oGs);
- }
- }
- /// <summary>
- /// 规程
- /// </summary>
- [Flags]
- public enum ViewDisciplineT : int
- {
- Unkonw = 0,
- [CnText("建筑")] Architectural = 1,
- [CnText("结构")] Structural = 2,
- [CnText("暖通")] Mechanical = 4,
- [CnText("电气")] Electrical = 8,
- [CnText("水")] Plumbing = 16,
- [CnText("协调")] Coordination = 4095,
- }
- /// <summary>
- /// 视图类型,在ViewType下不分结构、楼层平面,不全请自己补充
- /// </summary>
- public enum ViewTypeT
- {
- Undefined,
- [CnText("三维视图")] ThreeDimensional,
- [CnText("楼层平面")] FloorPlan,
- [CnText("天花板平面")] CeilingPlan,
- [CnText("结构平面")] StructuralPlan,
- }
- public class ViewRangeConfigs : ICloneable
- {
- private Document _doc;
- public ViewRangeConfigs(Document doc)
- {
- this._doc = doc;
- }
- /// <summary>
- /// 主要范围-剖切面-偏移量
- /// </summary>
- public double OffsetCutPlane { get; set; }
- /// <summary>
- /// 主要范围-顶-偏移量
- /// </summary>
- public double OffsetTopClipPlane { get; set; }
- /// <summary>
- /// 主要范围-底-偏移量
- /// </summary>
- public double OffsetBottomClipPlane { get; set; }
- /// <summary>
- /// 视图深度-偏移量
- /// </summary>
- public double OffsetViewDepthPlane { get; set; }
- /// <summary>
- ///
- /// </summary>
- public double OffsetUnderlayBottom { get; set; }
- /// <summary>
- /// 主要范围-剖切面
- /// </summary>
- public ElementId LevelIdCutPlane { get; set; }
- /// <summary>
- /// 主要范围-顶
- /// </summary>
- public ElementId LevelIdTopClipPlane { get; set; }
- /// <summary>
- /// 主要范围-底
- /// </summary>
- public ElementId LevelIdBottomClipPlane { get; set; }
- /// <summary>
- /// 视图深度
- /// </summary>
- public ElementId LevelIdViewDepthPlane { get; set; }
- /// <summary>
- ///
- /// </summary>
- public ElementId LevelIdUnderlayBottom { get; set; }
- public Level LevelCutPlane
- {
- get
- {
- if (LevelIdCutPlane == null)
- return null;
- return _doc.GetElementT<Level>(LevelIdCutPlane);
- }
- }
- public Level LevelTopClipPlane
- {
- get
- {
- if (LevelIdTopClipPlane == null)
- return null;
- return _doc.GetElementT<Level>(LevelIdTopClipPlane);
- }
- }
- public Level LevelBottomClipPlane
- {
- get
- {
- if (LevelIdBottomClipPlane == null)
- return null;
- return _doc.GetElementT<Level>(LevelIdBottomClipPlane);
- }
- }
- public Level LevelViewDepthPlane
- {
- get
- {
- if (LevelIdViewDepthPlane == null)
- return null;
- return _doc.GetElementT<Level>(LevelIdViewDepthPlane);
- }
- }
- public Level LevelUnderlayBottom
- {
- get
- {
- if (LevelIdUnderlayBottom == null)
- return null;
- return _doc.GetElementT<Level>(LevelIdUnderlayBottom);
- }
- }
- public object Clone()
- {
- ViewRangeConfigs config = new ViewRangeConfigs(_doc);
- config.OffsetCutPlane = OffsetCutPlane;
- config.OffsetTopClipPlane = OffsetTopClipPlane;
- config.OffsetBottomClipPlane = OffsetBottomClipPlane;
- config.OffsetViewDepthPlane = OffsetViewDepthPlane;
- config.OffsetUnderlayBottom = OffsetUnderlayBottom;
- config.LevelIdCutPlane = LevelIdCutPlane;
- config.LevelIdTopClipPlane = LevelIdTopClipPlane;
- config.LevelIdBottomClipPlane = LevelIdBottomClipPlane;
- config.LevelIdViewDepthPlane = LevelIdViewDepthPlane;
- config.LevelIdUnderlayBottom = LevelIdUnderlayBottom;
- return config;
- }
- }
- public class CnTextAttribute : Attribute
- {
- public CnTextAttribute(string strName)
- {
- this.Name = strName;
- }
- public string Name { get; set; }
- }
- }
|