/// <summary> /// Gets element filter meeting design option requirements. /// </summary> /// <returns>The element filter.</returns> private static ElementFilter GetDesignOptionFilter() { // We will respect the active design option if we are exporting a specific view. ElementFilter noDesignOptionFilter = new ElementDesignOptionFilter(ElementId.InvalidElementId); ElementFilter primaryOptionsFilter = new PrimaryDesignOptionMemberFilter(); ElementFilter designOptionFilter = new LogicalOrFilter(noDesignOptionFilter, primaryOptionsFilter); View filterView = ExporterCacheManager.ExportOptionsCache.FilterViewForExport; if (filterView != null) { ElementId designOptionId = DesignOption.GetActiveDesignOptionId(ExporterCacheManager.Document); if (designOptionId != ElementId.InvalidElementId) { ElementFilter activeDesignOptionFilter = new ElementDesignOptionFilter(designOptionId); return new LogicalOrFilter(designOptionFilter, activeDesignOptionFilter); } } return designOptionFilter; }
/// <summary> /// TRANSACTIONS INSIDE. /// Create mirror ONLY FOR vertical host face. /// </summary> public static FamilyCreator Mirror (FamilyInstance fi, Plane _plane, double _hostSearchRange) { var doc = fi.Document; var dop = doc.GetElement(DesignOption.GetActiveDesignOptionId(doc)) as DesignOption; var tf = Transform.CreateReflection(_plane); var refPos = fi.GetPos(); var tarPos = tf.OfPoint(refPos); var hand = tf.OfVector(fi.HandOrientation); var facing = tf.OfVector(fi.FacingOrientation); var refPlane = fi.GetPlane(); var faceNormal = tf.OfVector(refPlane.Normal); //find host face var bb = fi.GetBoundingBoxForSolidGeometries(); if (bb == null) { bb = fi.GetBoundingBoxInModelCS(null); } bb = bb.GetTransformed(tf); var bbFilter = Methods.GetBBIntersectFilter(bb, _hostSearchRange); var hostCat = HostUtils.GetHostCategory(fi); var hostDir = HostUtils.GetHostDir(fi); var search = new HostSearchSession(doc, hostCat, bbFilter, hostDir, faceNormal, dop); Element host; var hostFace = search.FindHostFace(tarPos, out host); if (hostFace == null) { throw new HostNotFoundException(fi.Id.ToString()); } var param = fi.GetAllEditableParams(); var ctr = new FaceBasedFamilyCreator (fi.Symbol, host, hostFace, tarPos, hand, facing, param, null); return(ctr); }
public static void CreateViews(Document curDoc, string viewType, string viewFamilyType, string viewTemplate, string scopeBox, string designOpt, List <Level> m_levels) { //creates plan or RCP views for each floor level in the supplied model //set view type ViewFamily viewTypeSetting = default(ViewFamily); if (viewType == "CeilingPlan") { viewTypeSetting = ViewFamily.CeilingPlan; } else if (viewType == "AreaPlan") { viewTypeSetting = ViewFamily.AreaPlan; } else if (viewType == "StructuralPlan") { viewTypeSetting = ViewFamily.StructuralPlan; } else { viewTypeSetting = ViewFamily.FloorPlan; } //get list of view types List <ViewFamilyType> m_vt = new List <ViewFamilyType>(); m_vt = mFunctions.getViewTypes(curDoc); //success and error list List <string> m_s = new List <string>(); List <string> m_e = new List <string>(); //new transaction using (Transaction t = new Transaction(curDoc, "Create views")) { //start transaction if (t.Start() == TransactionStatus.Started) { //create a plan or RCP for specified levels foreach (Level lev in m_levels) { //views for plan only foreach (ViewFamilyType vt in m_vt) { if (vt.Name == viewFamilyType) { try { //create the plan view ViewPlan m_fp = null; m_fp = ViewPlan.Create(curDoc, vt.Id, lev.Id); //rename the view m_fp.Name = lev.Name.ToUpper() + " " + vt.Name.ToUpper(); m_s.Add(lev.Name.ToUpper() + " " + vt.Name.ToUpper()); //modify the view as needed //----------------------------------------------------- //add view template to view if (viewTemplate != "None") { m_fp.ViewTemplateId = mFunctions.getViewTemplateID(viewTemplate, curDoc); } //add scope box to view if (scopeBox != "None") { Parameter curParam = null; curParam = m_fp.get_Parameter(BuiltInParameter.VIEWER_VOLUME_OF_INTEREST_CROP); if (curParam.Definition.Name.ToString() == "Scope Box") { //check if scope box exist if (mFunctions.doesScopeBoxExist(scopeBox, curDoc)) { try { //set scope box value curParam.Set(mFunctions.getScopeBoxID(scopeBox, curDoc)); } catch (Exception ex) { Debug.Print(ex.Message); } } else { Debug.Print("SCOPE BOX DOESN'T EXIST"); } } } //add design option to view if (designOpt != "None") { //assign selected design option to view DesignOption curDesignOption = mFunctions.getDesignOptionByName(curDoc, designOpt); Parameter desOptParam = m_fp.get_Parameter(BuiltInParameter.VIEWER_OPTION_VISIBILITY); try { desOptParam.Set(curDesignOption.Id); } catch (Exception ex) { TaskDialog.Show("error", "could not set design option paramerter"); } } } catch (Exception ex) { m_e.Add(ex.Message + ": " + lev.Name.ToUpper() + " " + vt.Name.ToUpper()); } } } } //report views created if (m_s.Count > 0) { using (TaskDialog m_td = new TaskDialog("Success")) { m_td.MainInstruction = "Created views:"; foreach (string x_loopVariable in m_s) { m_td.MainContent += x_loopVariable + Constants.vbCr; } m_td.Show(); } } //report errors if any if (m_e.Count > 0) { using (TaskDialog m_td = new TaskDialog("Errors")) { m_td.MainInstruction = "Issues with views:"; foreach (string x_loopVariable in m_e) { m_td.MainContent += x_loopVariable + Constants.vbCr; } m_td.Show(); } } //commit t.Commit(); } } }
private void Stream( ArrayList data, DesignOption designOpt ) { data.Add( new Snoop.Data.ClassSeparator( typeof( DesignOption ) ) ); // Nothing at this level yet! }
public frmSelectOption(SubCategory subcategory, DesignOption currentOption = null) { InitializeComponent(); _subcategory = subcategory; SelectedOption = currentOption; }
/// <summary> /// Copy face-based family instances to multiple levels. /// </summary> /// <param name="_refs">face-based family instances to be copied.</param> /// <param name="_tarLevels">target levels</param> /// <param name="_baseLevel">base level for calculating height change.</param> /// <param name="_snapShot">snap shot of potential host faces. Need to scan before calling this method.</param> /// <returns>face-based family creators of correct type.</returns> public static List <FamilyCreator> CopyToLevels (FamilyInstance refFI, IEnumerable <Level> _tarLevels, Level _baseLevel, double _searchRange) { var doc = refFI.Document; var ops = new List <FamilyCreator>(); var refPos = refFI.GetPos(); var dop = doc.GetElement(DesignOption.GetActiveDesignOptionId(doc)) as DesignOption; //get params var param = refFI.GetAllEditableParams(); //get orientation var hand = refFI.HandOrientation; var facing = refFI.FacingOrientation; var faceNormal = refFI.GetPlane().Normal; //search cat var bbRef = refFI.GetBoundingBoxForSolidGeometries(); if (bbRef == null) { bbRef = refFI.GetBoundingBoxInModelCS(null); } var searchCat = HostUtils.GetHostCategory(refFI); var hostDir = HostUtils.GetHostDir(refFI); foreach (var tarLevel in _tarLevels) { //skip base level if (tarLevel.Id == _baseLevel.Id) { continue; } var deltaZ = tarLevel.ProjectElevation - _baseLevel.ProjectElevation; var tf = Transform.CreateTranslation(new XYZ(0, 0, deltaZ)); var tarPos = tf.OfPoint(refPos); //search host face var bbTar = bbRef.GetTransformed(tf); var bbFilter = Methods.GetBBIntersectFilter(bbTar, _searchRange); var search = new HostSearchSession(doc, searchCat, bbFilter, hostDir, faceNormal, dop); Element host; var hostFace = search.FindHostFace(tarPos, out host); if (hostFace == null) { throw new HostNotFoundException(refFI.Id.ToString()); } var ctr = new FaceBasedFamilyCreator (refFI.Symbol, host, hostFace, tarPos, hand, facing, param, null); ops.Add(ctr); } return(ops); }
private List <Element> getHosts() { LogicalOrFilter dof = null; var mainModelFilter = new ElementDesignOptionFilter(ElementId.InvalidElementId); //if search main model, search main options as well if (this.designOption == null) { var primaryDopFilter = new PrimaryDesignOptionMemberFilter(); dof = new LogicalOrFilter(mainModelFilter, primaryDopFilter); } else { var activeDoFilter = new ElementDesignOptionFilter(DesignOption.GetActiveDesignOptionId(this.Doc)); dof = new LogicalOrFilter(activeDoFilter, mainModelFilter); } if (this.HostCategory == HostCategory.Wall) { var wallCollector = new FilteredElementCollector(this.Doc) .WhereElementIsNotElementType() .OfClass(typeof(Wall)) .WherePasses(this.Filter) .WherePasses(dof) .Cast <Wall>() .Where(x => x.WallType.Kind == WallKind.Basic); if (this.hostDir != null) { wallCollector = wallCollector .Where(x => x.LocationCurve() is Line && x.LocationLine().Direction.IsParallel(this.hostDir)); } return(wallCollector .Cast <Element>() .ToList()); } else if (this.HostCategory == HostCategory.Floor) { var floorCollector = new FilteredElementCollector(this.Doc) .WhereElementIsNotElementType() .OfClass(typeof(Floor)) .WherePasses(this.Filter) .WherePasses(dof); return(floorCollector .Cast <Element>().ToList()); } else { var bic = this.HostCategory == HostCategory.EnvelopFamily ? BuiltInCategory.OST_GenericModel : BuiltInCategory.OST_StructuralFoundation; IEnumerable <Element> collector = new FilteredElementCollector(this.Doc) .WhereElementIsNotElementType() .OfClass(typeof(FamilyInstance)) .OfCategory(bic) .WherePasses(this.Filter) .WherePasses(dof); if (this.hostDir != null) { collector = collector .Cast <FamilyInstance>() .Where(x => x.HandOrientation.IsParallel(this.hostDir)) .Cast <Element>(); } if (this.HostCategory == HostCategory.EnvelopFamily) { return(collector .Where(x => goaCustomFamilyFilter.IsEnviFamilyInstanceElem(x)) .ToList()); } else if (this.HostCategory == HostCategory.SuperSkin) { return(collector .Where(x => goaCustomFamilyFilter.IsSuperSkinInstance(x)) .ToList()); } else if (this.HostCategory == HostCategory.SuperCornice) { return(collector .Where(x => goaCustomFamilyFilter.IsSuperCorniceElem(x)) .ToList()); } else if (this.HostCategory == HostCategory.ArrayLineBased) { return(collector .Where(x => goaCustomFamilyFilter.IsArrayLineBasedElem(x)) .ToList()); } else { return(null); } } }
public static void GetDesignOptionInfo(Element _elem, out DesignOption _dop, out string _designOptionUid, out string _designOptionName) { _dop = _elem.DesignOption; _designOptionName = _dop == null ? "主模型" : _dop.Name; _designOptionUid = _dop == null ? null : _dop.UniqueId; }
/// <summary> /// Copy line-based family instances to multiple levels. /// </summary> /// <param name="_refs">line-based family instances to be copied.</param> /// <param name="_tarLevels">target levels</param> /// <param name="_baseLevel">base level for calculating height change.</param> /// <param name="_snapShot">snap shot of potential host faces. Need to scan before calling this method.</param> /// <returns>Line-based family creators of correct type.</returns> public static List <FamilyCreator> CopyToLevels (FamilyInstance _refFI, IEnumerable <Level> _tarLevels, Level _baseLevel, double _searchRange) { var doc = _refFI.Document; var dop = doc.GetElement(DesignOption.GetActiveDesignOptionId(doc)) as DesignOption; var ops = new List <FamilyCreator>(); var refLocLine = _refFI.LocationLine(); //get params var param = _refFI.GetAllEditableParams(); //get orientation var facing = _refFI.FacingOrientation; var faceNormal = _refFI.GetPlane().Normal; //scan for host face var hostCat = HostUtils.GetHostCategory(_refFI); var hostDir = HostUtils.GetHostDir(_refFI); var bbRef = _refFI.GetBoundingBoxForSolidGeometries(); if (bbRef == null) { bbRef = _refFI.GetBoundingBoxInModelCS(null); } bool cutsHost = HostUtils.CutsHost(_refFI); foreach (var tarLevel in _tarLevels) { //skip base level if (tarLevel.Id == _baseLevel.Id) { continue; } var deltaZ = tarLevel.ProjectElevation - _baseLevel.ProjectElevation; var tf = Transform.CreateTranslation(new XYZ(0, 0, deltaZ)); var tarLocLine = refLocLine.CreateTransformed(tf) as Line; //check host dir FamilyCreator ctr = null; var info = new LineBasedFamilyInfo(_refFI); //host on level if (hostCat == HostCategory.Level) { ctr = new LineBasedFamilyCreator_onLevel (_refFI.Symbol, tarLocLine, _refFI.FacingOrientation, tarLevel, _refFI.StructuralType, param, null); } //host on face else { //search host face var bbTar = bbRef.GetTransformed(tf); var filter = Methods.GetBBIntersectFilter(bbTar, _searchRange); var search = new HostSearchSession(doc, hostCat, filter, hostDir, faceNormal, dop); Element host; var hostFace = search.FindHostFace(tarLocLine, out host); if (hostFace == null) { throw new HostNotFoundException(_refFI.Id.ToString()); } var refOffsetLocLine = LineBasedFamilyUtils.GetOffsetLocLine(_refFI); var tarOffsetLocLine = refOffsetLocLine.CreateTransformed(tf) as Line; var lineBasedCtr = new LineBasedFamilyCreator_onPlanarFace (_refFI.Symbol, tarOffsetLocLine, facing, host, hostFace, param, null); lineBasedCtr.CutsHost = cutsHost; ctr = lineBasedCtr; } ops.Add(ctr); } return(ops); }
public DesignOptionWrapper(DesignOptionSet _set, DesignOption _deOp) { this.DesignOptionSet = _set; this.DesignOption = _deOp; }