/// <summary>
        /// Calculates the start hook angle for a rebar.
        /// </summary>
        /// <param name="exporterIFC">The ExporterIFC object.</param>
        /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param>
        /// <param name="element">The element to calculate the value.</param>
        /// <param name="elementType">The element type.</param>
        /// <returns>
        /// True if the operation succeed, false otherwise.
        /// </returns>
        public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType)
        {
            RebarBendData bendData = null;

            if (element is Rebar)
            {
                bendData = (element as Rebar).GetBendData();
            }
            else if (element is RebarInSystem)
            {
                bendData = (element as RebarInSystem).GetBendData();
            }

            if (bendData != null)
            {
                if (bendData.HookLength0 > MathUtil.Eps())
                {
                    ElementId hookAtStartTypeId;
                    if (ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.REBAR_ELEM_HOOK_START_TYPE, out hookAtStartTypeId) != null)
                    {
                        RebarHookType rebarHookType = element.Document.GetElement(hookAtStartTypeId) as RebarHookType;
                        if (rebarHookType != null)
                        {
                            //HookAngle is measured in radians, so scale directly.
                            m_Angle = rebarHookType.HookAngle * 180 / Math.PI;
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
        /// <summary>
        /// Calculates the start hook angle for a rebar.
        /// </summary>
        /// <param name="exporterIFC">The ExporterIFC object.</param>
        /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param>
        /// <param name="element">The element to calculate the value.</param>
        /// <param name="elementType">The element type.</param>
        /// <returns>
        /// True if the operation succeed, false otherwise.
        /// </returns>
        public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType)
        {
            RebarBendData bendData = null;

            if (element is Rebar)
            {
                bendData = (element as Rebar).GetBendData();
            }
            else if (element is RebarInSystem)
            {
                bendData = (element as RebarInSystem).GetBendData();
            }

            if (bendData != null)
            {
                if (bendData.HookLength0 > MathUtil.Eps())
                {
                    // HookAngle0 is already in degress, so convert to radians and then scale.
                    double hookAngleInRadians = bendData.HookAngle0 * (Math.PI / 180.0);
                    m_Angle = UnitUtil.ScaleAngle(hookAngleInRadians);
                    return(true);
                }
            }
            return(false);
        }
        /// <summary>
        /// Get the bar diameter from the rebar object.
        /// </summary>
        /// <param name="element">The rebar object.</param>
        /// <returns>The returned bar diameter from the rebar, or a default value.</returns>
        static double GetBarDiameter(object element)
        {
            double bendDiameter = 0.0;

            if (element is RebarContainerItem)
            {
                RebarBendData bendData = (element as RebarContainerItem).GetBendData();
                if (bendData != null)
                {
                    bendDiameter = UnitUtil.ScaleLength(bendData.BarDiameter);
                }
            }
            else if (element is Element)
            {
                Element      rebarElement = element as Element;
                Document     doc          = rebarElement.Document;
                ElementId    typeId       = rebarElement.GetTypeId();
                RebarBarType elementType  = doc.GetElement(rebarElement.GetTypeId()) as RebarBarType;
                if (elementType != null)
                {
                    bendDiameter = UnitUtil.ScaleLength(elementType.BarDiameter);
                }
            }

            if (bendDiameter < MathUtil.Eps())
            {
                return(UnitUtil.ScaleLength(1.0 / 12.0));
            }

            return(bendDiameter);
        }
예제 #4
0
        /// <summary>
        /// Calculates the start hook angle for a rebar.
        /// </summary>
        /// <param name="exporterIFC">The ExporterIFC object.</param>
        /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param>
        /// <param name="element">The element to calculate the value.</param>
        /// <param name="elementType">The element type.</param>
        /// <returns>
        /// True if the operation succeed, false otherwise.
        /// </returns>
        public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType)
        {
            if (element is Rebar)
            {
                Rebar rebar = element as Rebar;
                if (rebar.CanBeMatchedWithMultipleShapes())
                {
                    return(false); // In case of the Bent free form the hook angle should be obtain from subelement
                }
            }

            RebarBendData bendData = null;

            if (element is Rebar)
            {
                bendData = (element as Rebar).GetBendData();
            }
            else if (element is RebarInSystem)
            {
                bendData = (element as RebarInSystem).GetBendData();
            }

            if (bendData != null)
            {
                if (bendData.HookLength0 > MathUtil.Eps())
                {
                    // HookAngle0 is already in degress, so convert to radians and then scale.
                    double hookAngleInRadians = bendData.HookAngle0 * (Math.PI / 180.0);
                    m_Angle = UnitUtil.ScaleAngle(hookAngleInRadians);
                    return(true);
                }
            }
            return(false);
        }
예제 #5
0
        //TFEND

        private void Stream(ArrayList data, RebarBendData rbcm)
        {
            data.Add(new Snoop.Data.ClassSeparator(typeof(RebarBendData)));

            data.Add(new Snoop.Data.Double("BarDiameter", rbcm.BarDiameter));
            data.Add(new Snoop.Data.Double("BendRadius", rbcm.BendRadius));
            data.Add(new Snoop.Data.Int("HookAngle0", rbcm.HookAngle0));
            data.Add(new Snoop.Data.Int("HookAngle1", rbcm.HookAngle1));
            data.Add(new Snoop.Data.Double("HookBendRadius", rbcm.HookBendRadius));
            data.Add(new Snoop.Data.Double("HookLength0", rbcm.HookLength0));
            data.Add(new Snoop.Data.Double("HookLength1", rbcm.HookLength1));
            data.Add(new Snoop.Data.String("HookOrient0", rbcm.HookOrient0.ToString()));
            data.Add(new Snoop.Data.String("HookOrient1", rbcm.HookOrient1.ToString()));
        }
예제 #6
0
        /// <summary>
        /// Calculates the bending radius for a rebar.
        /// </summary>
        /// <param name="exporterIFC">The ExporterIFC object.</param>
        /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param>
        /// <param name="element">The element to calculate the value.</param>
        /// <param name="elementType">The element type.</param>
        /// <returns>
        /// True if the operation succeed, false otherwise.
        /// </returns>
        public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType)
        {
            RebarBendData bendData = null;

            if (element is Rebar)
            {
                bendData = (element as Rebar).GetBendData();
            }
            else if (element is RebarInSystem)
            {
                bendData = (element as RebarInSystem).GetBendData();
            }

            if (bendData != null)
            {
                m_Radius = UnitUtil.ScaleLength(bendData.BendRadius);
                if (m_Radius > MathUtil.Eps())
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #7
0
        /// <summary>
        /// Get the bar diameters (model and nominal) from the rebar object.
        /// </summary>
        /// <param name="element">The rebar object.</param>
        /// <out param name="nominalDiameter">The nominal diameter.</param>
        /// <out param name="modelDiameter">The model diameter</param>
        static void GetBarDiameters(object element, out double nominalDiameter, out double modelDiameter)
        {
            nominalDiameter = 0.0;
            modelDiameter   = 0.0;

            if (element is RebarContainerItem)
            {
                RebarBendData bendData = (element as RebarContainerItem).GetBendData();
                if (bendData != null)
                {
                    nominalDiameter = UnitUtil.ScaleLength(bendData.BarNominalDiameter);
                    modelDiameter   = UnitUtil.ScaleLength(bendData.BarModelDiameter);
                }
            }
            else if (element is Element)
            {
                Element      rebarElement = element as Element;
                Document     doc          = rebarElement.Document;
                ElementId    typeId       = rebarElement.GetTypeId();
                RebarBarType elementType  = doc.GetElement(rebarElement.GetTypeId()) as RebarBarType;
                if (elementType != null)
                {
                    nominalDiameter = UnitUtil.ScaleLength(elementType.BarNominalDiameter);
                    modelDiameter   = UnitUtil.ScaleLength(elementType.BarModelDiameter);
                }
            }

            if (nominalDiameter < MathUtil.Eps())
            {
                nominalDiameter = UnitUtil.ScaleLength(1.0 / 12.0);
            }

            if (modelDiameter < MathUtil.Eps())
            {
                modelDiameter = UnitUtil.ScaleLength(1.0 / 12.0);
            }
        }
예제 #8
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document  doc = commandData.Application.ActiveUIDocument.Document;
            Selection sel = commandData.Application.ActiveUIDocument.Selection;

            if (sel.GetElementIds().Count == 0)
            {
                message = "Выберите арматурные стержни";
                return(Result.Failed);
            }

            Rebar bar = doc.GetElement(sel.GetElementIds().First()) as Rebar;

            if (bar == null)
            {
                message = "Выберите арматурные стержни";
                return(Result.Failed);
            }
#if R2017
            XYZ normal = bar.Normal;
#else
            RebarShapeDrivenAccessor acc = bar.GetShapeDrivenAccessor();
            XYZ normal = acc.Normal;
#endif
            RebarBarType barType = doc.GetElement(bar.GetTypeId()) as RebarBarType;

            int        rebarStyleNumber = bar.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_STYLE).AsInteger();
            RebarStyle rebarStyle       = (RebarStyle)rebarStyleNumber;

            RebarHookType hookTypeStart   = null;
            ElementId     hookStartTypeId = bar.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_START_TYPE).AsElementId();
            if (hookStartTypeId != null)
            {
                hookTypeStart = doc.GetElement(hookStartTypeId) as RebarHookType;
            }

            RebarHookType hookTypeEnd   = null;
            ElementId     hookEndTypeId = bar.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_END_TYPE).AsElementId();
            if (hookEndTypeId != null)
            {
                hookTypeEnd = doc.GetElement(hookEndTypeId) as RebarHookType;
            }


            RebarBendData        rbd         = bar.GetBendData();
            RebarHookOrientation hookOrient0 = rbd.HookOrient0;
            RebarHookOrientation hookOrient1 = rbd.HookOrient1;

            Element host = doc.GetElement(bar.GetHostId());

            List <Curve> curves    = bar.GetCenterlineCurves(false, true, true, MultiplanarOption.IncludeOnlyPlanarCurves, 0).ToList();
            int          barsCount = bar.NumberOfBarPositions;

            List <ElementId> newRebarIds = new List <ElementId>();
            using (Transaction tr = new Transaction(doc))
            {
                tr.Start("Explode rebar set");
                for (int i = 0; i < barsCount; i++)
                {
#if R2017
                    Transform barOffset = bar.GetBarPositionTransform(i);
#else
                    Transform barOffset = acc.GetBarPositionTransform(i);
#endif
                    XYZ offset = barOffset.Origin;

                    Rebar newRebar = Rebar.CreateFromCurves(doc, rebarStyle, barType, hookTypeStart, hookTypeEnd, host, normal, curves,
                                                            hookOrient0, hookOrient1, true, false);
                    doc.Regenerate();
                    ElementTransformUtils.MoveElement(doc, newRebar.Id, offset);
                    newRebarIds.Add(newRebar.Id);
                }

                doc.Delete(bar.Id);

                tr.Commit();
            }

            sel.SetElementIds(newRebarIds);

            return(Result.Succeeded);
        }
예제 #9
0
        //TFEND
        private void Stream(ArrayList data, RebarBendData rbcm)
        {
            data.Add(new Snoop.Data.ClassSeparator(typeof(RebarBendData)));

             data.Add(new Snoop.Data.Double("BarDiameter", rbcm.BarDiameter));
             data.Add(new Snoop.Data.Double("BendRadius", rbcm.BendRadius));
             data.Add(new Snoop.Data.Int("HookAngle0", rbcm.HookAngle0));
             data.Add(new Snoop.Data.Int("HookAngle1", rbcm.HookAngle1));
             data.Add(new Snoop.Data.Double("HookBendRadius", rbcm.HookBendRadius));
             data.Add(new Snoop.Data.Double("HookLength0", rbcm.HookLength0));
             data.Add(new Snoop.Data.Double("HookLength1", rbcm.HookLength1));
             data.Add(new Snoop.Data.String("HookOrient0", rbcm.HookOrient0.ToString()));
             data.Add(new Snoop.Data.String("HookOrient1", rbcm.HookOrient1.ToString()));
        }
예제 #10
0
        CollectEvent(object sender, CollectorEventArgs e)
        {
            // cast the sender object to the SnoopCollector we are expecting
            Collector snoopCollector = sender as Collector;

            if (snoopCollector == null)
            {
                Debug.Assert(false); // why did someone else send us the message?
                return;
            }

            // see if it is a type we are responsible for
            Color color = e.ObjToSnoop as Color;

            if (color != null)
            {
                Stream(snoopCollector.Data(), color);
                return;
            }

            LayoutRule layoutRule = e.ObjToSnoop as LayoutRule;

            if (layoutRule != null)
            {
                Stream(snoopCollector.Data(), layoutRule);
                return;
            }

            FormatOptions formatOptions = e.ObjToSnoop as FormatOptions;

            if (formatOptions != null)
            {
                Stream(snoopCollector.Data(), formatOptions);
                return;
            }

            CurtainGrid curtainGrid = e.ObjToSnoop as CurtainGrid;

            if (curtainGrid != null)
            {
                Stream(snoopCollector.Data(), curtainGrid);
                return;
            }

            CurtainCell curtainCell = e.ObjToSnoop as CurtainCell;

            if (curtainCell != null)
            {
                Stream(snoopCollector.Data(), curtainCell);
                return;
            }

            RebarHostData rebarHostData = e.ObjToSnoop as RebarHostData;

            if (rebarHostData != null)
            {
                Stream(snoopCollector.Data(), rebarHostData);
                return;
            }

            Leader leader = e.ObjToSnoop as Leader;

            if (leader != null)
            {
                Stream(snoopCollector.Data(), leader);
                return;
            }

            AreaVolumeSettings areaSettings = e.ObjToSnoop as AreaVolumeSettings;

            if (areaSettings != null)
            {
                Stream(snoopCollector.Data(), areaSettings);
                return;
            }

            ViewSheetSetting viewSheetSetting = e.ObjToSnoop as ViewSheetSetting;

            if (viewSheetSetting != null)
            {
                Stream(snoopCollector.Data(), viewSheetSetting);
                return;
            }

            Autodesk.Revit.UI.Events.DialogBoxData dlgBoxData = e.ObjToSnoop as Autodesk.Revit.UI.Events.DialogBoxData;
            if (dlgBoxData != null)
            {
                Stream(snoopCollector.Data(), dlgBoxData);
                return;
            }

            Construction construct = e.ObjToSnoop as Construction;

            if (construct != null)
            {
                Stream(snoopCollector.Data(), construct);
                return;
            }

            FamilyElementVisibility famElemVisib = e.ObjToSnoop as FamilyElementVisibility;

            if (famElemVisib != null)
            {
                Stream(snoopCollector.Data(), famElemVisib);
                return;
            }

            FamilyManager famManager = e.ObjToSnoop as FamilyManager;

            if (famManager != null)
            {
                Stream(snoopCollector.Data(), famManager);
                return;
            }

            FamilyParameter famParam = e.ObjToSnoop as FamilyParameter;

            if (famParam != null)
            {
                Stream(snoopCollector.Data(), famParam);
                return;
            }

            FamilyType famType = e.ObjToSnoop as FamilyType;

            if (famType != null)
            {
                Stream(snoopCollector.Data(), famType);
                return;
            }

            MEPSpaceConstruction mepSpaceConstuct = e.ObjToSnoop as MEPSpaceConstruction;

            if (mepSpaceConstuct != null)
            {
                Stream(snoopCollector.Data(), mepSpaceConstuct);
                return;
            }

            BuildingSiteExportOptions bldSiteExpOptions = e.ObjToSnoop as BuildingSiteExportOptions;

            if (bldSiteExpOptions != null)
            {
                Stream(snoopCollector.Data(), bldSiteExpOptions);
                return;
            }

            DGNExportOptions dgnExpOptions = e.ObjToSnoop as DGNExportOptions;

            if (dgnExpOptions != null)
            {
                Stream(snoopCollector.Data(), dgnExpOptions);
                return;
            }

            DWFExportOptions dwfExpOptions = e.ObjToSnoop as DWFExportOptions;

            if (dwfExpOptions != null)
            {
                Stream(snoopCollector.Data(), dwfExpOptions);
                return;
            }

            DWGExportOptions dwgExpOptions = e.ObjToSnoop as DWGExportOptions;

            if (dwgExpOptions != null)
            {
                Stream(snoopCollector.Data(), dwgExpOptions);
                return;
            }

            DWGImportOptions dwgImpOptions = e.ObjToSnoop as DWGImportOptions;

            if (dwgImpOptions != null)
            {
                Stream(snoopCollector.Data(), dwgImpOptions);
                return;
            }

            FBXExportOptions fbxExpOptions = e.ObjToSnoop as FBXExportOptions;

            if (fbxExpOptions != null)
            {
                Stream(snoopCollector.Data(), fbxExpOptions);
                return;
            }

            TrussMemberInfo trussInfo = e.ObjToSnoop as TrussMemberInfo;

            if (trussInfo != null)
            {
                Stream(snoopCollector.Data(), trussInfo);
                return;
            }

            VertexIndexPair vertIndPair = e.ObjToSnoop as VertexIndexPair;

            if (vertIndPair != null)
            {
                Stream(snoopCollector.Data(), vertIndPair);
                return;
            }

            PointElementReference ptElemRef = e.ObjToSnoop as PointElementReference;

            if (ptElemRef != null)
            {
                Stream(snoopCollector.Data(), ptElemRef);
                return;
            }

            Autodesk.Revit.DB.BoundarySegment boundSeg = e.ObjToSnoop as Autodesk.Revit.DB.BoundarySegment;
            if (boundSeg != null)
            {
                Stream(snoopCollector.Data(), boundSeg);
                return;
            }

            PointLocationOnCurve ptLocOnCurve = e.ObjToSnoop as PointLocationOnCurve;

            if (ptLocOnCurve != null)
            {
                Stream(snoopCollector.Data(), ptLocOnCurve);
                return;
            }

            Entity entity = e.ObjToSnoop as Entity;

            if (entity != null)
            {
                Stream(snoopCollector.Data(), entity);
                return;
            }

            Field field = e.ObjToSnoop as Field;

            if (field != null)
            {
                Stream(snoopCollector.Data(), field);
                return;
            }

            ExtensibleStorageField storeagefield = e.ObjToSnoop as ExtensibleStorageField;

            if (storeagefield != null)
            {
                Stream(snoopCollector.Data(), storeagefield);
                return;
            }

            IList <Autodesk.Revit.DB.BoundarySegment> boundSegs = e.ObjToSnoop as
                                                                  IList <Autodesk.Revit.DB.BoundarySegment>;

            if (boundSegs != null)
            {
                Stream(snoopCollector.Data(), boundSegs);
                return;
            }

            if (e.ObjToSnoop is KeyValuePair <String, String> )
            {
                KeyValuePair <String, String> stringspair = (KeyValuePair <String, String>)e.ObjToSnoop;
                Stream(snoopCollector.Data(), stringspair);
                return;
            }

            Schema schema = e.ObjToSnoop as Schema;

            if (schema != null)
            {
                Stream(snoopCollector.Data(), schema);
                return;
            }

            ElementId elemId = e.ObjToSnoop as ElementId;

            if (elemId != null)
            {
                Stream(snoopCollector.Data(), elemId);
                return;
            }

            PlanViewRange plvr = e.ObjToSnoop as PlanViewRange;

            if (plvr != null)
            {
                Stream(snoopCollector.Data(), plvr);
                return;
            }
            //TF
            RebarConstraintsManager rbcm = e.ObjToSnoop as RebarConstraintsManager;

            if (rbcm != null)
            {
                Stream(snoopCollector.Data(), rbcm);
                return;
            }

            RebarConstrainedHandle rbch = e.ObjToSnoop as RebarConstrainedHandle;

            if (rbch != null)
            {
                Stream(snoopCollector.Data(), rbch);
                return;
            }

            RebarConstraint rbc = e.ObjToSnoop as RebarConstraint;

            if (rbc != null)
            {
                Stream(snoopCollector.Data(), rbc);
                return;
            }

            RebarContainerItem rbcontItem = e.ObjToSnoop as RebarContainerItem;

            if (rbcontItem != null)
            {
                Stream(snoopCollector.Data(), rbcontItem);
                return;
            }

            //TFEND

            RebarBendData bendData = e.ObjToSnoop as RebarBendData;

            if (bendData != null)
            {
                Stream(snoopCollector.Data(), bendData);
                return;
            }

            if (Utils.IsSupportedType(e.ObjToSnoop) && e.ObjToSnoop != null)
            {
                Utils.StreamWithReflection(snoopCollector.Data(), e.ObjToSnoop.GetType(), e.ObjToSnoop);
            }
        }