コード例 #1
0
      /// <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;
      }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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();
                }
            }
        }
コード例 #4
0
        private void Stream( ArrayList data, DesignOption designOpt )
        {
            data.Add( new Snoop.Data.ClassSeparator( typeof( DesignOption ) ) );

              // Nothing at this level yet!
        }
コード例 #5
0
 public frmSelectOption(SubCategory subcategory, DesignOption currentOption = null)
 {
     InitializeComponent();
     _subcategory   = subcategory;
     SelectedOption = currentOption;
 }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        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);
                }
            }
        }
コード例 #8
0
 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;
 }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
 public DesignOptionWrapper(DesignOptionSet _set, DesignOption _deOp)
 {
     this.DesignOptionSet = _set;
     this.DesignOption    = _deOp;
 }