from typing import Tuple, Set, Iterable, List


class TrussMemberType:
    ETK_Unknown = 0
    ETK_TrussTopChord = 1
    ETK_TrussBottomChord = 2
    ETK_TrussVertWeb = 3
    ETK_TrussDiagWeb = 4


class TrussCurveType:
    NonTrussCurve = 0
    TopChord = 1
    BottomChord = 2
    Web = 3


class StructuralMaterialType:
    Undefined = 0
    Steel = 1
    Concrete = 2
    Wood = 3
    Other = 4
    PrecastConcrete = 5
    Generic = 6
    Aluminum = 7


class StructuralType:
    NonStructural = 0
    Beam = 1
    Brace = 2
    Column = 3
    Footing = 4
    UnknownFraming = 5


class StructuralInstanceUsage:
    Undefined = 0
    Wall = 1
    Column = 2
    Girder = 3
    Joist = 4
    Purlin = 5
    Other = 6
    Brace = 7
    HorizontalBracing = 8
    KickerBracing = 9
    Automatic = 10
    TrussChord = 11
    TrussWeb = 12


class BoundaryConditions(Element):
    @property
    def HostElementId(self) -> ElementId: ...
    @property
    def HostElement(self) -> AnalyticalModel: ...
    @property
    def AssociatedLoadId(self) -> ElementId: ...
    @AssociatedLoadId.setter
    def AssociatedLoadId(self, elementId: ElementId) -> None: ...
    @property
    def Point(self) -> XYZ: ...
    def GetBoundaryConditionsType(self) -> BoundaryConditionsType: ...
    def GetOrientTo(self) -> BoundaryConditionsOrientTo: ...
    def SetOrientTo(self, orientTo: BoundaryConditionsOrientTo) -> None: ...
    def GetDegreesOfFreedomCoordinateSystem(self) -> Transform: ...
    def GetCurve(self) -> Curve: ...
    def GetLoops(self) -> List[CurveLoop]: ...


class TrussMemberInfo:
    def __init__(self): ...
    @property
    def hostTrussId(self) -> ElementId: ...
    @hostTrussId.setter
    def hostTrussId(self, __set_formal: ElementId) -> None: ...
    @property
    def lockedToTruss(self) -> bool: ...
    @lockedToTruss.setter
    def lockedToTruss(self, __set_formal: bool) -> None: ...
    @property
    def memberTypeKey(self) -> TrussMemberType: ...
    @memberTypeKey.setter
    def memberTypeKey(self, __set_formal: TrussMemberType) -> None: ...


class BoundaryConditionsType:
    Point = 0
    Line = 1
    Area = 2


class BoundaryConditionsOrientTo:
    Project = 0
    HostLocalCoordinateSystem = 1


class TranslationRotationValue:
    Fixed = 0
    Release = 1
    Spring = 2


class RebarCoverType(ElementType):
    @property
    def CoverDistance(self) -> float: ...
    @CoverDistance.setter
    def CoverDistance(self, coverDistance: float) -> None: ...
    def Create(doc: Document, name: str, coverDistance: float) -> RebarCoverType: ...


class RebarHookType(ElementType):
    @property
    def Style(self) -> RebarStyle: ...
    @Style.setter
    def Style(self, style: RebarStyle) -> None: ...
    @property
    def HookAngle(self) -> float: ...
    @HookAngle.setter
    def HookAngle(self, hookAngle: float) -> None: ...
    @property
    def StraightLineMultiplier(self) -> float: ...
    @StraightLineMultiplier.setter
    def StraightLineMultiplier(self, straightLineMultiplier: float) -> None: ...
    def Create(doc: Document, angle: float, multiplier: float) -> RebarHookType: ...
    def IsOffsetLengthRequired(self) -> bool: ...
    def GetDefaultHookExtension(self, barDiameter: float) -> float: ...
    def GetHookExtensionLength(self, barType: RebarBarType) -> float: ...
    def CreateDefaultRebarHookType(ADoc: Document) -> ElementId: ...


class Rebar(Element):
    @property
    def ScheduleMark(self) -> str: ...
    @ScheduleMark.setter
    def ScheduleMark(self, scheduleMark: str) -> None: ...
    @property
    def ReadOnlyParameters(self) -> bool: ...
    @ReadOnlyParameters.setter
    def ReadOnlyParameters(self, readOnlyParameters: bool) -> None: ...
    @property
    def Quantity(self) -> int: ...
    @property
    def MaxSpacing(self) -> float: ...
    @MaxSpacing.setter
    def MaxSpacing(self, maxSpacing: float) -> None: ...
    @property
    def LayoutRule(self) -> RebarLayoutRule: ...
    @property
    def IncludeFirstBar(self) -> bool: ...
    @IncludeFirstBar.setter
    def IncludeFirstBar(self, includeFirstBar: bool) -> None: ...
    @property
    def IncludeLastBar(self) -> bool: ...
    @IncludeLastBar.setter
    def IncludeLastBar(self, includeLastBar: bool) -> None: ...
    @property
    def TotalLength(self) -> float: ...
    @property
    def Volume(self) -> float: ...
    @property
    def NumberOfBarPositions(self) -> int: ...
    @NumberOfBarPositions.setter
    def NumberOfBarPositions(self, numberOfBarPositions: int) -> None: ...
    @property
    def DistributionType(self) -> DistributionType: ...
    @DistributionType.setter
    def DistributionType(self, type: DistributionType) -> None: ...
    @overload
    def CreateFreeForm(doc: Document, barType: RebarBarType, host: Element, curves: List[CurveLoop]) -> Tuple[Rebar, RebarFreeFormValidationResult]: ...
    @overload
    def CreateFreeForm(doc: Document, barType: RebarBarType, host: Element, curves: List[Curve]) -> Tuple[Rebar, RebarFreeFormValidationResult]: ...
    @overload
    def CreateFreeForm(doc: Document, serverGUID: Guid, barType: RebarBarType, host: Element) -> Rebar: ...
    @overload
    def CreateFromCurves(doc: Document, style: RebarStyle, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, host: Element, norm: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation, hookRotationAngleAtStart: float, hookRotationAngleAtEnd: float, endTreatmentTypeIdAtStart: ElementId, endTreatmentTypeIdAtEnd: ElementId, useExistingShapeIfPossible: bool, createNewShape: bool) -> Rebar: ...
    @overload
    def CreateFromCurves(doc: Document, style: RebarStyle, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, host: Element, norm: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation, useExistingShapeIfPossible: bool, createNewShape: bool) -> Rebar: ...
    def CreateFromRebarShape(doc: Document, rebarShape: RebarShape, barType: RebarBarType, host: Element, origin: XYZ, xVec: XYZ, yVec: XYZ) -> Rebar: ...
    def RebarShapeMatchesCurvesAndHooks(rebarShape: RebarShape, barType: RebarBarType, norm: XYZ, curves: List[Curve], startHook: RebarHookType, endHook: RebarHookType, startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation) -> bool: ...
    def RebarShapeMatchesCurvesHooksAndEndTreatment(rebarShape: RebarShape, barType: RebarBarType, norm: XYZ, curves: List[Curve], startHook: RebarHookType, endHook: RebarHookType, startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation, hookRotationAngleAtStart: float, hookRotationAngleAtEnd: float, endTreatmentTypeIdAtStart: ElementId, endTreatmentTypeIdAtEnd: ElementId) -> bool: ...
    @overload
    def CreateFromCurvesAndShape(doc: Document, rebarShape: RebarShape, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, host: Element, norm: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation, hookRotationAngleAtStart: float, hookRotationAngleAtEnd: float, endTreatmentTypeIdAtStart: ElementId, endTreatmentTypeIdAtEnd: ElementId) -> Rebar: ...
    @overload
    def CreateFromCurvesAndShape(doc: Document, rebarShape: RebarShape, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, host: Element, norm: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation) -> Rebar: ...
    def GetCenterlineCurves(self, adjustForSelfIntersection: bool, suppressHooks: bool, suppressBendRadius: bool, multiplanarOption: MultiplanarOption, barPositionIndex: int) -> List[Curve]: ...
    def GetRebarConstraintsManager(self) -> RebarConstraintsManager: ...
    def GetReinforcementRoundingManager(self) -> RebarRoundingManager: ...
    def GetFullGeometryForView(self, view: View) -> GeometryElement: ...
    def GetHostId(self) -> ElementId: ...
    def SetHostId(self, doc: Document, hostId: ElementId) -> None: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def IsSolidInView(self, view: View3D) -> bool: ...
    def SetSolidInView(self, view: View3D, solid: bool) -> None: ...
    def GetBendData(self) -> RebarBendData: ...
    def GetHookTypeId(self, end: int) -> ElementId: ...
    def SetHookTypeId(self, end: int, hookTypeId: ElementId) -> None: ...
    def GetEndTreatmentTypeId(self, end: int) -> ElementId: ...
    def SetEndTreatmentTypeId(self, end: int, endTreatmentTypeId: ElementId) -> None: ...
    def IsRebarInSection(self, dBView: View) -> bool: ...
    def HasPresentationOverrides(self, dBView: View) -> bool: ...
    def SetBarHiddenStatus(self, view: View, barIndex: int, hide: bool) -> None: ...
    def IsBarHidden(self, view: View, barIndex: int) -> bool: ...
    def SetPresentationMode(self, dBView: View, presentationMode: RebarPresentationMode) -> None: ...
    def GetPresentationMode(self, dBView: View) -> RebarPresentationMode: ...
    def FindMatchingPredefinedPresentationMode(self, dBView: View) -> RebarPresentationMode: ...
    def ClearPresentationMode(self, dBView: View) -> None: ...
    def GetShapeId(self) -> ElementId: ...
    def DoesBarExistAtPosition(self, barPosition: int) -> bool: ...
    def GetParameterValueAtIndex(self, paramId: ElementId, barPositionIndex: int) -> ParameterValue: ...
    def ContainsValidArcRadiiForStyleAndBarType(curves: List[Curve], style: RebarStyle, barType: RebarBarType) -> bool: ...
    def HookAngleMatchesRebarShapeDefinition(self, iEnd: int, proposedHookId: ElementId) -> bool: ...
    def CanUseHookType(self, proposedHookId: ElementId) -> bool: ...
    def ConstraintsCanBeEdited(self) -> bool: ...
    def CanApplyPresentationMode(self, dBView: View) -> bool: ...
    def CanSuppressFirstOrLastBar(self, dBView: View, end: int) -> bool: ...
    def GetHookOrientation(self, iEnd: int) -> RebarHookOrientation: ...
    def SetHookOrientation(self, iEnd: int, hookOrientation: RebarHookOrientation) -> None: ...
    def GetHookRotationAngle(self, iEnd: int) -> float: ...
    def SetHookRotationAngle(self, hookRotationAngle: float, iEnd: int) -> None: ...
    def EnableHookLengthOverride(self, enable: bool) -> None: ...
    def IsHookLengthOverrideEnabled(self) -> bool: ...
    def GetOverridableHookParameters(self) -> Tuple[ISet, ISet, ISet, ISet]: ...
    def GetAllRebarShapeIds(self) -> List[ElementId]: ...
    def CanBeMatchedWithMultipleShapes(self) -> bool: ...
    def GetCouplerId(self, end: int) -> ElementId: ...
    def IsRebarFreeForm(self) -> bool: ...
    def IsRebarShapeDriven(self) -> bool: ...
    def GetShapeDrivenAccessor(self) -> RebarShapeDrivenAccessor: ...
    def GetFreeFormAccessor(self) -> RebarFreeFormAccessor: ...


class RebarBarType(ElementType):
    @property
    def MaximumBendRadius(self) -> float: ...
    @MaximumBendRadius.setter
    def MaximumBendRadius(self, maximumBendRadius: float) -> None: ...
    @property
    def DeformationType(self) -> RebarDeformationType: ...
    @DeformationType.setter
    def DeformationType(self, deformationType: RebarDeformationType) -> None: ...
    @property
    def StandardBendDiameter(self) -> float: ...
    @StandardBendDiameter.setter
    def StandardBendDiameter(self, standardBendDiam: float) -> None: ...
    @property
    def StandardHookBendDiameter(self) -> float: ...
    @StandardHookBendDiameter.setter
    def StandardHookBendDiameter(self, standardHookBendDiam: float) -> None: ...
    @property
    def StirrupTieBendDiameter(self) -> float: ...
    @StirrupTieBendDiameter.setter
    def StirrupTieBendDiameter(self, stirrupTieBendDiam: float) -> None: ...
    @property
    def BarDiameter(self) -> float: ...
    @BarDiameter.setter
    def BarDiameter(self, barDiam: float) -> None: ...
    def SetBarTypeDiameters(self, diametersOptions: BarTypeDiameterOptions) -> None: ...
    def GetHookPermission(self, hookId: ElementId) -> bool: ...
    def SetHookPermission(self, hookId: ElementId, permission: bool) -> None: ...
    def GetAutoCalcHookLengths(self, hookId: ElementId) -> bool: ...
    def SetAutoCalcHookLengths(self, hookId: ElementId, autoCalculated: bool) -> None: ...
    def GetHookLength(self, hookId: ElementId) -> float: ...
    def SetHookLength(self, hookId: ElementId, hookLength: float) -> None: ...
    def GetHookTangentLength(self, hookId: ElementId) -> float: ...
    def SetHookTangentLength(self, hookId: ElementId, newLength: float) -> None: ...
    def GetHookOffsetLength(self, hookId: ElementId) -> float: ...
    def SetHookOffsetLength(self, hookId: ElementId, newLength: float) -> None: ...
    def Create(ADoc: Document) -> RebarBarType: ...
    def GetReinforcementRoundingManager(self) -> RebarRoundingManager: ...
    def CreateDefaultRebarBarType(ADoc: Document) -> ElementId: ...


class TrussType(FamilySymbol):


class AnalyticalModel(Element):
    @property
    def RigidLinksOption(self) -> AnalyticalRigidLinksOption: ...
    @RigidLinksOption.setter
    def RigidLinksOption(self, rigidLinksOption: AnalyticalRigidLinksOption) -> None: ...
    def IsValidDirectionForAutoDetect(self, direction: AnalyticalDirection) -> bool: ...
    def CanDisableAutoDetect(self, direction: AnalyticalDirection) -> bool: ...
    def IsSinglePoint(self) -> bool: ...
    def IsSingleCurve(self) -> bool: ...
    def CanUseHardPoints(self) -> bool: ...
    def IsValidSelector(self, selector: AnalyticalModelSelector) -> bool: ...
    def SupportsManualAdjustment(self) -> bool: ...
    def CanApproximate(self) -> bool: ...
    def IsAnalyzeAsValid(self, analyzeAs: AnalyzeAs) -> bool: ...
    def CanHaveRigidLinks(self) -> bool: ...
    def IsValidRigidLinksOption(self, rigidLinksOption: AnalyticalRigidLinksOption) -> bool: ...
    def HasDeletedLinks(self) -> bool: ...
    def ResetLinks(self) -> None: ...
    def GetLocalCoordinateSystem(self) -> Transform: ...
    def GetCurves(self, curveType: AnalyticalCurveType) -> List[Curve]: ...
    def GetPoint(self) -> XYZ: ...
    def GetCurve(self) -> Curve: ...
    def GetReference(self, selector: AnalyticalModelSelector) -> Reference: ...
    def GetRigidLink(self, selector: AnalyticalModelSelector) -> Curve: ...
    def GetAnalyticalModelSketchComponents(self) -> List[AnalyticalModelSketchComponent]: ...
    def GetAnalyticalModelSupports(self) -> List[AnalyticalModelSupport]: ...
    def IsAutoDetectEnabled(self, direction: AnalyticalDirection) -> bool: ...
    def GetAutoDetectMatchedElements(self, direction: AnalyticalDirection) -> ICollection: ...
    def IsValidManualAdjustmentSource(self, source: Reference, adjustmentDirection: AnalyticalDirection) -> bool: ...
    def IsValidManualAdjustmentTarget(self, target: Reference, source: Reference, direction: AnalyticalDirection) -> bool: ...
    def IsValidForManualAdjustment(self, reference: Reference) -> bool: ...
    def ManuallyAdjust(self, source: Reference, target: Reference) -> bool: ...
    def ResetManualAdjustment(self) -> bool: ...
    def IsManuallyAdjusted(self) -> bool: ...
    def GetManualAdjustmentMatchedElements(self) -> ICollection: ...
    def IsElementFullySupported(self) -> bool: ...
    def UsesHardPoints(self) -> bool: ...
    def SetUsesHardPoints(self, hardPoints: bool) -> None: ...
    def EnableAutoDetect(self, direction: AnalyticalDirection, enabled: bool) -> None: ...
    def IsApproximated(self) -> bool: ...
    def Approximate(self, enableApproximation: bool) -> None: ...
    def GetApproximationDeviation(self) -> float: ...
    def SetApproximationDeviation(self, deviation: float) -> None: ...
    def IsEnabled(self) -> bool: ...
    def Enable(self, enable: bool) -> None: ...
    def GetAnalyzeAs(self) -> AnalyzeAs: ...
    def SetAnalyzeAs(self, analyzeAs: AnalyzeAs) -> None: ...
    def HasRigidLinksWith(self, neighborId: ElementId) -> bool: ...
    def GetElementId(self) -> ElementId: ...
    def SetOffset(self, selector: AnalyticalElementSelector, offset: XYZ) -> None: ...
    def GetOffset(self, selector: AnalyticalElementSelector) -> XYZ: ...
    def Disconnect(self, selector: AnalyticalElementSelector) -> None: ...
    def IsModified(self) -> bool: ...
    def CloneAdjustment(self, source: AnalyticalModel, end: int) -> None: ...


class LoadBase(Element):
    @property
    def IsHosted(self) -> bool: ...
    @property
    def LoadCaseId(self) -> ElementId: ...
    @LoadCaseId.setter
    def LoadCaseId(self, loadCaseId: ElementId) -> None: ...
    @property
    def LoadCase(self) -> LoadCase: ...
    @property
    def LoadCaseName(self) -> str: ...
    @property
    def LoadNatureName(self) -> str: ...
    @property
    def LoadCategoryName(self) -> str: ...
    @property
    def HostElementId(self) -> ElementId: ...
    @property
    def HostElement(self) -> AnalyticalModel: ...
    @property
    def WorkPlaneId(self) -> ElementId: ...
    @property
    def OrientTo(self) -> LoadOrientTo: ...
    @OrientTo.setter
    def OrientTo(self, orientTo: LoadOrientTo) -> None: ...
    @property
    def IsReaction(self) -> bool: ...
    @IsReaction.setter
    def IsReaction(self, isReaction: bool) -> None: ...
    def IsOrientToPermitted(self, orientTo: LoadOrientTo) -> bool: ...


class AreaLoad(LoadBase):
    @property
    def ForceVector1(self) -> XYZ: ...
    @ForceVector1.setter
    def ForceVector1(self, force: XYZ) -> None: ...
    @property
    def ForceVector2(self) -> XYZ: ...
    @ForceVector2.setter
    def ForceVector2(self, force: XYZ) -> None: ...
    @property
    def ForceVector3(self) -> XYZ: ...
    @ForceVector3.setter
    def ForceVector3(self, force: XYZ) -> None: ...
    @property
    def NumRefPoints(self) -> int: ...
    @property
    def IsProjected(self) -> bool: ...
    @IsProjected.setter
    def IsProjected(self, isProjected: bool) -> None: ...
    @property
    def Area(self) -> float: ...
    @overload
    def Create(aDoc: Document, loops: List[CurveLoop], forceVectors: List[XYZ], refPointCurveIndexes: List[int], refPointCurveSelectors: List[int], symbol: AreaLoadType) -> AreaLoad: ...
    @overload
    def Create(aDoc: Document, loops: List[CurveLoop], forceVector: XYZ, symbol: AreaLoadType) -> AreaLoad: ...
    @overload
    def Create(aDoc: Document, host: AnalyticalModelSurface, forceVector: XYZ, symbol: AreaLoadType) -> AreaLoad: ...
    def GetRefPoint(self, index: int) -> XYZ: ...
    def GetLoops(self) -> List[CurveLoop]: ...
    def SetLoops(self, doc: Document, newLoops: List[CurveLoop]) -> bool: ...


class AreaReinforcement(Element):
    @property
    def AdditionalTopCoverOffset(self) -> float: ...
    @AdditionalTopCoverOffset.setter
    def AdditionalTopCoverOffset(self, additionalTopCoverOffset: float) -> None: ...
    @property
    def AdditionalBottomCoverOffset(self) -> float: ...
    @AdditionalBottomCoverOffset.setter
    def AdditionalBottomCoverOffset(self, additionalBottomCoverOffset: float) -> None: ...
    @property
    def AreaReinforcementType(self) -> AreaReinforcementType: ...
    @property
    def Direction(self) -> XYZ: ...
    @overload
    def Create(document: Document, hostElement: Element, majorDirection: XYZ, areaReinforcementTypeId: ElementId, rebarBarTypeId: ElementId, rebarHookTypeId: ElementId) -> AreaReinforcement: ...
    @overload
    def Create(document: Document, hostElement: Element, curveArray: List[Curve], majorDirection: XYZ, areaReinforcementTypeId: ElementId, rebarBarTypeId: ElementId, rebarHookTypeId: ElementId) -> AreaReinforcement: ...
    def GetRebarInSystemIds(self) -> List[ElementId]: ...
    def RemoveAreaReinforcementSystem(doc: Document, system: AreaReinforcement) -> List[ElementId]: ...
    def GetBoundaryCurveIds(self) -> List[ElementId]: ...
    def GetHostId(self) -> ElementId: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def IsSolidInView(self, view: View3D) -> bool: ...
    def SetSolidInView(self, view: View3D, solid: bool) -> None: ...


class LineLoad(LoadBase):
    @ForceVector2.setter
    def ForceVector2(self, force: XYZ) -> None: ...
    @property
    def MomentVector1(self) -> XYZ: ...
    @MomentVector1.setter
    def MomentVector1(self, moment: XYZ) -> None: ...
    @property
    def MomentVector2(self) -> XYZ: ...
    @MomentVector2.setter
    def MomentVector2(self, moment: XYZ) -> None: ...
    @overload
    def Create(aDoc: Document, startPoint: XYZ, endPoint: XYZ, forceVector: XYZ, momentVector: XYZ, symbol: LineLoadType, plane: SketchPlane) -> LineLoad: ...
    @overload
    def Create(aDoc: Document, host: AnalyticalModelSurface, curveIndex: int, forceVector1: XYZ, momentVector1: XYZ, symbol: LineLoadType) -> LineLoad: ...
    @overload
    def Create(aDoc: Document, host: AnalyticalModelStick, forceVector1: XYZ, momentVector1: XYZ, symbol: LineLoadType) -> LineLoad: ...
    def GetCurve(self) -> Curve: ...
    def SetPoints(self, startPoint: XYZ, endPoint: XYZ) -> bool: ...
    @property
    def IsUniform(self) -> bool: ...
    @property
    def IsProjected(self) -> bool: ...
    @IsProjected.setter
    def IsProjected(self, isProjected: bool) -> None: ...
    @property
    def StartPoint(self) -> XYZ: ...
    @property
    def EndPoint(self) -> XYZ: ...
    @property
    def ForceVector1(self) -> XYZ: ...
    @ForceVector1.setter
    def ForceVector1(self, force: XYZ) -> None: ...
    @property
    def ForceVector2(self) -> XYZ: ...


class LoadCombination(Element):
    @property
    def Type(self) -> LoadCombinationType: ...
    @Type.setter
    def Type(self, type: LoadCombinationType) -> None: ...
    @property
    def State(self) -> LoadCombinationState: ...
    @State.setter
    def State(self, type: LoadCombinationState) -> None: ...
    @property
    def IsThirdPartyGenerated(self) -> bool: ...
    @overload
    def Create(document: Document, name: str, type: LoadCombinationType, state: LoadCombinationState) -> LoadCombination: ...
    @overload
    def Create(document: Document, name: str) -> LoadCombination: ...
    def GetCaseAndCombinationIds(self) -> List[ElementId]: ...
    def GetUsageIds(self) -> List[ElementId]: ...
    def SetUsageIds(self, usageIds: List[ElementId]) -> None: ...
    def GetComponents(self) -> List[LoadComponent]: ...
    def SetComponents(self, components: List[LoadComponent]) -> None: ...


class LoadComponent:
    def __init__(self, loadCaseOrCombinationId: ElementId, factor: float): ...
    @property
    def LoadCaseOrCombinationId(self) -> ElementId: ...
    @LoadCaseOrCombinationId.setter
    def LoadCaseOrCombinationId(self, loadCaseOrCombinationId: ElementId) -> None: ...
    @property
    def Factor(self) -> float: ...
    @Factor.setter
    def Factor(self, factor: float) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class LoadCase(Element):
    @property
    def NatureId(self) -> ElementId: ...
    @NatureId.setter
    def NatureId(self, natureId: ElementId) -> None: ...
    @property
    def SubcategoryId(self) -> ElementId: ...
    @SubcategoryId.setter
    def SubcategoryId(self, subcategoryId: ElementId) -> None: ...
    @property
    def Number(self) -> int: ...
    @Number.setter
    def Number(self, number: int) -> None: ...
    @overload
    def Create(document: Document, name: str, natureId: ElementId, subcategoryId: ElementId) -> LoadCase: ...
    @overload
    def Create(document: Document, name: str, natureId: ElementId, loadCaseCategory: LoadCaseCategory) -> LoadCase: ...
    def IsLoadCaseSubcategoryId(self, loadCaseSubcategoryId: ElementId) -> bool: ...
    def IsLoadNatureId(self, natureId: ElementId) -> bool: ...
    def IsNumberUnique(document: Document, number: int) -> bool: ...


class LoadUsage(Element):
    def Create(document: Document, name: str) -> LoadUsage: ...


class LoadNature(Element):
    def Create(document: Document, name: str) -> LoadNature: ...


class LoadTypeBase(ElementType):


class PointLoadType(LoadTypeBase):


class AreaLoadType(LoadTypeBase):


class LineLoadType(LoadTypeBase):


class PathReinforcement(Element):
    @property
    def PrimaryBarOrientation(self) -> ReinforcementBarOrientation: ...
    @PrimaryBarOrientation.setter
    def PrimaryBarOrientation(self, primaryBarOrientation: ReinforcementBarOrientation) -> None: ...
    @property
    def AlternatingBarOrientation(self) -> ReinforcementBarOrientation: ...
    @AlternatingBarOrientation.setter
    def AlternatingBarOrientation(self, alternatingBarOrientation: ReinforcementBarOrientation) -> None: ...
    @property
    def PathReinforcementType(self) -> PathReinforcementType: ...
    @property
    def AdditionalOffset(self) -> float: ...
    @AdditionalOffset.setter
    def AdditionalOffset(self, offset: float) -> None: ...
    @property
    def PrimaryBarShapeId(self) -> ElementId: ...
    @PrimaryBarShapeId.setter
    def PrimaryBarShapeId(self, shapeId: ElementId) -> None: ...
    @property
    def AlternatingBarShapeId(self) -> ElementId: ...
    @AlternatingBarShapeId.setter
    def AlternatingBarShapeId(self, shapeId: ElementId) -> None: ...
    @overload
    def Create(document: Document, hostElement: Element, curveArray: List[Curve], flip: bool, pathReinforcementTypeId: ElementId, rebarBarTypeId: ElementId, startRebarHookTypeId: ElementId, endRebarHookTypeId: ElementId, rebarShapeId: ElementId) -> PathReinforcement: ...
    @overload
    def Create(document: Document, hostElement: Element, curveArray: List[Curve], flip: bool, pathReinforcementTypeId: ElementId, rebarBarTypeId: ElementId, startRebarHookTypeId: ElementId, endRebarHookTypeId: ElementId) -> PathReinforcement: ...
    def GetOrCreateDefaultRebarShape(document: Document, rebarBarTypeId: ElementId, startRebarHookTypeId: ElementId, endRebarHookTypeId: ElementId) -> ElementId: ...
    def GetRebarInSystemIds(self) -> List[ElementId]: ...
    def RemovePathReinforcementSystem(doc: Document, system: PathReinforcement) -> List[ElementId]: ...
    def GetCurveElementIds(self) -> List[ElementId]: ...
    def GetHostId(self) -> ElementId: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def IsSolidInView(self, view: View3D) -> bool: ...
    def SetSolidInView(self, view: View3D, solid: bool) -> None: ...
    def IsAlternatingLayerEnabled(self) -> bool: ...
    def IsValidRebarShapeId(aDoc: Document, elementId: ElementId) -> bool: ...
    def IsValidPrimaryBarOrientation(self, orientation: ReinforcementBarOrientation) -> bool: ...
    def IsValidAlternatingBarOrientation(self, orientation: ReinforcementBarOrientation) -> bool: ...


class PointLoad(LoadBase):
    @property
    def Point(self) -> XYZ: ...
    @Point.setter
    def Point(self, location: XYZ) -> None: ...
    @property
    def ForceVector(self) -> XYZ: ...
    @ForceVector.setter
    def ForceVector(self, force: XYZ) -> None: ...
    @property
    def MomentVector(self) -> XYZ: ...
    @MomentVector.setter
    def MomentVector(self, moment: XYZ) -> None: ...
    @overload
    def Create(aDoc: Document, point: XYZ, forceVector: XYZ, momentVector: XYZ, symbol: PointLoadType, plane: SketchPlane) -> PointLoad: ...
    @overload
    def Create(aDoc: Document, host: AnalyticalModel, forceVector: XYZ, momentVector: XYZ, symbol: PointLoadType) -> PointLoad: ...
    @overload
    def Create(aDoc: Document, host: AnalyticalModelStick, selector: AnalyticalElementSelector, forceVector: XYZ, momentVector: XYZ, symbol: PointLoadType) -> PointLoad: ...


class RebarShape(ElementType):
    @property
    def SimpleLine(self) -> bool: ...
    @property
    def SimpleArc(self) -> bool: ...
    @property
    def RebarStyle(self) -> RebarStyle: ...
    @property
    def StirrupTieAttachment(self) -> StirrupTieAttachmentType: ...
    @property
    def HigherEnd(self) -> int: ...
    @property
    def ShapeFamilyId(self) -> ElementId: ...
    @overload
    def Create(doc: Document, definition: RebarShapeDefinition, multiplanarDefinition: RebarShapeMultiplanarDefinition, style: RebarStyle, attachmentType: StirrupTieAttachmentType, startHookAngle: int, startHookOrientation: RebarHookOrientation, endHookAngle: int, endHookOrientation: RebarHookOrientation, higherEnd: int, hookRotationAngleAtStart: float, hookRotationAngleAtEnd: float, endTreatmentTypeIdAtStart: ElementId, endTreatmentTypeIdAtEnd: ElementId) -> RebarShape: ...
    @overload
    def Create(doc: Document, definition: RebarShapeDefinition, multiplanarDefinition: RebarShapeMultiplanarDefinition, style: RebarStyle, attachmentType: StirrupTieAttachmentType, startHookAngle: int, startHookOrientation: RebarHookOrientation, endHookAngle: int, endHookOrientation: RebarHookOrientation, higherEnd: int) -> RebarShape: ...
    def GetRebarShapeDefinition(self) -> RebarShapeDefinition: ...
    def GetMultiplanarDefinition(self) -> RebarShapeMultiplanarDefinition: ...
    def SetAllowed(self, barType: RebarBarType, allowed: bool) -> None: ...
    def GetAllowed(self, barType: RebarBarType) -> bool: ...
    def GetDefaultHookAngle(self, index: int) -> int: ...
    def GetDefaultHookOrientation(self, index: int) -> RebarHookOrientation: ...
    def GetCurvesForBrowser(self) -> List[Curve]: ...
    def GetHookRotationAngle(self, iEnd: int) -> float: ...
    def SetHookRotationAngle(self, hookRotationAngle: float, iEnd: int) -> None: ...
    def IsSameShapeIgnoringHooks(self, otherShape: RebarShape) -> bool: ...
    def GetEndTreatmentTypeId(self, iEnd: int) -> ElementId: ...
    def SetEndTreatmentTypeId(self, endTreatmentId: ElementId, iEnd: int) -> None: ...
    def HasEndTreatment(self) -> bool: ...


class Truss(Element):
    @property
    def Members(self) -> ICollection: ...
    @property
    def Curves(self) -> CurveArray: ...
    @property
    def TrussType(self) -> TrussType: ...
    @TrussType.setter
    def TrussType(self, value: TrussType) -> None: ...
    def AttachChord(self, attachToElement: Element, location: TrussChordLocation, forceRemoveSketch: bool) -> None: ...
    def DetachChord(self, location: TrussChordLocation) -> None: ...
    def SetProfile(self, topChords: CurveArray, bottomChords: CurveArray) -> None: ...
    def RemoveProfile(self) -> None: ...
    def GetTrussMemberInfo(self, elemId: ElementId) -> TrussMemberInfo: ...
    def TogglePinMember(self, elemId: ElementId) -> None: ...
    def DropTruss(truss: Truss) -> None: ...
    def Create(document: Document, trussTypeId: ElementId, sketchPlaneId: ElementId, curve: Curve) -> Truss: ...


class FamilyStructuralMaterialTypeFilter(ElementSlowFilter):
    @overload
    def __init__(self, structuralMaterialType: StructuralMaterialType, inverted: bool): ...
    @overload
    def __init__(self, structuralMaterialType: StructuralMaterialType): ...
    @property
    def StructuralMaterialType(self) -> StructuralMaterialType: ...


class RebarWorkInstructions:
    Bent = 0
    Straight = 1


class RebarLayoutRule:
    Single = 0
    FixedNumber = 1
    MaximumSpacing = 2
    NumberWithSpacing = 3
    MinimumClearSpacing = 4


class RebarStyle:
    Standard = 0
    StirrupTie = 1


class MultiplanarOption:
    IncludeAllMultiplanarCurves = 0
    IncludeOnlyPlanarCurves = 1


class RebarDeformationType:
    Deformed = 0
    Plain = 1


class RebarPresentationMode:
    All = 0
    FirstLast = 1
    Middle = 2
    Select = 3


class RebarHostCategory:
    Other = 0
    Part = 1
    StructuralColumn = 2
    StructuralFraming = 3
    Wall = 4
    Floor = 5
    StructuralFoundation = 6
    Stairs = 7
    SlabEdge = 8


class ReinforcementBarOrientation:
    TopOrExterior = 0
    NearSide = 1
    BottomOrInterior = 2
    FarSide = 3


class DistributionType:
    Uniform = 0
    VaryingLength = 1


class RebarFreeFormValidationResult:
    Success = 0
    Undefined = 1
    NullCurve = 2
    UnboundCurve = 3
    InvalidLoop = 4
    RebarCantBeBent = 5


class RebarGeometryType:
    ShapeBased = 0
    FreeForm = 1


class RebarHookOrientation:
    Left = 1
    Right = -1


class AnalyticalProjectionType:
    Top = 0
    Center = 1
    Bottom = 2
    SideOne = 3
    SideTwo = 4
    AutoDetect = 5
    Invalid = 6
    SketchCurve = 7
    DatumPlane = 8
    NotApplicable = 9
    Default = 10
    CenterOfCore = 11
    LocationLine = 12
    Varies = 13


class AnalyticalDirection:
    Vertical = 0
    VerticalTop = 1
    VerticalBottom = 2
    Horizontal = 3
    HorizontalStart = 4
    HorizontalEnd = 5
    Any = 6
    X = 7
    Y = 8
    Z = 9


class AnalyticalSupportPriority:
    UnknownPriority = 0
    HighestPriority = 1
    SecondHighestPriority = 2
    ThirdHighestPriority = 3
    FourthHigestPriority = 4


class AnalyticalSupportType:
    UnknownSupport = 0
    PointSupport = 1
    CurveSupport = 2
    SurfaceSupport = 3


class AnalyticalCurveType:
    RawCurves = 0
    RigidLinkHead = 1
    RigidLinkTail = 2
    ActiveCurves = 3
    ApproximatedCurves = 4
    BaseCurve = 5
    AllRigidLinks = 6


class AnalyzeAs:
    Hanger = 0
    Gravity = 1
    Lateral = 2
    SlabOneWay = 3
    Mat = 4
    SlabOnGrade = 5
    NotForAnalysis = 7
    NotApplicable = 8
    SlabTwoWay = 9
    GravityLateral = 10


class AnalyticalCurveSelector:
    StartPoint = 0
    EndPoint = 1
    WholeCurve = 2


class AnalyticalElementSelector:
    StartOrBase = 0
    EndOrTop = 1
    Whole = 2


class AnalyticalRigidLinksOption:
    Enabled = 0
    Disabled = 1
    FromColumn = 2


class AnalyticalAlignmentMethod:
    AutoDetect = 0
    Projection = 1
    ManuallyAdjusted = 2
    Varies = 3


class AnalyticalLoopType:
    All = 0
    External = 1
    Internal = 2
    Filled = 3
    Void = 4


class AnalyticalFixityState:
    Fixed = 0
    Released = 1
    Spring = 2


class LoadType:
    Point = 0
    Line = 1
    Area = 2


class LoadOrientTo:
    Project = 0
    WorkPlane = 1
    HostLocalCoordinateSystem = 2


class LoadCombinationType:
    Combination = 0
    Envelope = 1


class LoadCombinationState:
    Serviceability = 0
    Ultimate = 1


class LoadCaseCategory:
    Dead = 0
    Live = 1
    Wind = 2
    Snow = 3
    RoofLive = 4
    Accidental = 5
    Temperature = 6
    Seismic = 7


class StirrupTieAttachmentType:
    InteriorFace = 0
    ExteriorFace = 1


class TrussChordLocation:
    Bottom = 0
    Top = 1


class StructuralWallUsage:
    NonBearing = 0
    Bearing = 1
    Shear = 2
    Combined = 3


class AreaReinforcementCurve(CurveElement):
    @property
    def Curve(self) -> Curve: ...


class RebarBendData:
    @overload
    def __init__(self, barType: RebarBarType, hookType0: RebarHookType, hookType1: RebarHookType, style: RebarStyle, hookOrient0: RebarHookOrientation, hookOrient1: RebarHookOrientation): ...
    @overload
    def __init__(self): ...
    @property
    def BendRadius(self) -> float: ...
    @BendRadius.setter
    def BendRadius(self, bendRadius: float) -> None: ...
    @property
    def BarDiameter(self) -> float: ...
    @BarDiameter.setter
    def BarDiameter(self, barDiameter: float) -> None: ...
    @property
    def HookLength0(self) -> float: ...
    @HookLength0.setter
    def HookLength0(self, hookLength0: float) -> None: ...
    @property
    def HookLength1(self) -> float: ...
    @HookLength1.setter
    def HookLength1(self, hookLength1: float) -> None: ...
    @property
    def HookAngle0(self) -> int: ...
    @HookAngle0.setter
    def HookAngle0(self, hookAngle0: int) -> None: ...
    @property
    def HookAngle1(self) -> int: ...
    @HookAngle1.setter
    def HookAngle1(self, hookAngle1: int) -> None: ...
    @property
    def HookOrient0(self) -> RebarHookOrientation: ...
    @HookOrient0.setter
    def HookOrient0(self, hookOrient0: RebarHookOrientation) -> None: ...
    @property
    def HookOrient1(self) -> RebarHookOrientation: ...
    @HookOrient1.setter
    def HookOrient1(self, hookOrient1: RebarHookOrientation) -> None: ...
    @property
    def HookBendRadius(self) -> float: ...
    @HookBendRadius.setter
    def HookBendRadius(self, hookBendRadius: float) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class RebarShapeParameters:
    def IsValidExternalDefinition(param: ExternalDefinition) -> bool: ...
    def GetElementIdForExternalDefinition(doc: Document, externalDefinition: ExternalDefinition) -> ElementId: ...
    def GetOrCreateElementIdForExternalDefinition(doc: Document, externalDefinition: ExternalDefinition) -> ElementId: ...
    def GetExternalDefinitionForElementId(doc: Document, paramId: ElementId, definitionFile: DefinitionFile) -> ExternalDefinition: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetAllRebarShapeParameters(doc: Document) -> List[ElementId]: ...
    def Dispose(self) -> None: ...


class AnalyticalSupportChecking:
    def CheckMemberSupports(document: Document, progressIndicatorText: str) -> bool: ...


class AnalyticalConsistencyChecking:
    def CheckAnalyticalConsistency(document: Document) -> bool: ...


class AnalyticalLink(Element):
    @property
    def Start(self) -> XYZ: ...
    @property
    def End(self) -> XYZ: ...
    @property
    def OwnerId(self) -> ElementId: ...
    @property
    def StartHubId(self) -> ElementId: ...
    @property
    def EndHubId(self) -> ElementId: ...
    def Create(doc: Document, type: ElementId, startHubId: ElementId, endHubId: ElementId) -> AnalyticalLink: ...
    def IsValidHub(doc: Document, hubId: ElementId) -> bool: ...
    def IsAutoGenerated(self) -> bool: ...


class AnalyticalLinkType(ElementType):
    @property
    def TranslationX(self) -> AnalyticalFixityState: ...
    @TranslationX.setter
    def TranslationX(self, translationX: AnalyticalFixityState) -> None: ...
    @property
    def TranslationY(self) -> AnalyticalFixityState: ...
    @TranslationY.setter
    def TranslationY(self, translationY: AnalyticalFixityState) -> None: ...
    @property
    def TranslationZ(self) -> AnalyticalFixityState: ...
    @TranslationZ.setter
    def TranslationZ(self, translationZ: AnalyticalFixityState) -> None: ...
    @property
    def RotationX(self) -> AnalyticalFixityState: ...
    @RotationX.setter
    def RotationX(self, rotationX: AnalyticalFixityState) -> None: ...
    @property
    def RotationY(self) -> AnalyticalFixityState: ...
    @RotationY.setter
    def RotationY(self, rotationY: AnalyticalFixityState) -> None: ...
    @property
    def RotationZ(self) -> AnalyticalFixityState: ...
    @RotationZ.setter
    def RotationZ(self, rotationZ: AnalyticalFixityState) -> None: ...
    def IsValidAnalyticalFixityState(fixityState: AnalyticalFixityState) -> bool: ...


class AnalyticalModelSelector:
    @overload
    def __init__(self, curve: Curve): ...
    @overload
    def __init__(self, curve: Curve, inCurveSelector: AnalyticalCurveSelector): ...
    @overload
    def __init__(self): ...
    @overload
    def __init__(self, inCurveSelector: AnalyticalCurveSelector): ...
    @property
    def CurveSelector(self) -> AnalyticalCurveSelector: ...
    @CurveSelector.setter
    def CurveSelector(self, curveSelector: AnalyticalCurveSelector) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class AnalyticalModelSketchComponent:
    @property
    def IsValidObject(self) -> bool: ...
    def IsAutoDetectEnabled(self) -> bool: ...
    def EnableAutoDetect(self) -> None: ...
    def GetAnalyticalAlignmentMethod(self) -> AnalyticalAlignmentMethod: ...
    def GetAnalyticalProjectionType(self) -> AnalyticalProjectionType: ...
    def GetAnalyticalProjectionDatumPlane(self) -> ElementId: ...
    def IsValidAnalyticalAlignmentMethod(self, alignmentMethod: AnalyticalAlignmentMethod) -> bool: ...
    def IsValidAnalyticalProjectionType(self, projectionType: AnalyticalProjectionType) -> bool: ...
    def IsValidDatumPlaneForProjection(self, datumPlaneId: ElementId) -> bool: ...
    def SetAnalyticalAlignmentMethod(self, alignmentMethod: AnalyticalAlignmentMethod) -> None: ...
    def SetAnalyticalProjectionType(self, projectionType: AnalyticalProjectionType) -> None: ...
    def SetAnalyticalProjectionDatumPlane(self, datumPlaneId: ElementId) -> None: ...
    def GetAutoDetectMatchedElements(self) -> ICollection: ...
    def GetComponentElementId(self) -> ElementId: ...
    def Dispose(self) -> None: ...


class AnalyticalModelSupport:
    @property
    def IsValidObject(self) -> bool: ...
    def GetSupportType(self) -> AnalyticalSupportType: ...
    def GetPriority(self) -> AnalyticalSupportPriority: ...
    def GetSupportingElement(self) -> ElementId: ...
    def GetCurve(self) -> Curve: ...
    def GetPoint(self) -> XYZ: ...
    def GetFace(self) -> Face: ...
    def Dispose(self) -> None: ...


class AnalyticalModelStick(AnalyticalModel):
    @overload
    def GetLocalCoordinateSystem(self, parameter: float) -> Transform: ...
    @overload
    def GetLocalCoordinateSystem(self, point: XYZ) -> Transform: ...
    def GetProjectionY(self, selector: AnalyticalElementSelector) -> StickElementProjectionY: ...
    def GetProjectionZ(self, selector: AnalyticalElementSelector) -> StickElementProjectionZ: ...
    def GetProjectionPlaneY(self, selector: AnalyticalElementSelector) -> ElementId: ...
    def GetProjectionPlaneZ(self, selector: AnalyticalElementSelector) -> ElementId: ...
    def GetAlignmentMethod(self, selector: AnalyticalElementSelector) -> AnalyticalAlignmentMethod: ...
    def SetAlignmentMethod(self, selector: AnalyticalElementSelector, method: AnalyticalAlignmentMethod) -> None: ...
    @overload
    def SetProjection(self, selector: AnalyticalElementSelector, planeIdY: ElementId, planeIdZ: ElementId) -> None: ...
    @overload
    def SetProjection(self, selector: AnalyticalElementSelector, projectionY: StickElementProjectionY, planeIdZ: ElementId) -> None: ...
    @overload
    def SetProjection(self, selector: AnalyticalElementSelector, planeIdY: ElementId, projectionZ: StickElementProjectionZ) -> None: ...
    @overload
    def SetProjection(self, selector: AnalyticalElementSelector, projectionY: StickElementProjectionY, projectionZ: StickElementProjectionZ) -> None: ...
    def GetReleaseType(self, start: bool) -> ReleaseType: ...
    def SetReleaseType(self, start: bool, releaseType: ReleaseType) -> None: ...
    def GetReleases(self, start: bool) -> Tuple[bool, bool, bool, bool, bool, bool]: ...
    def SetReleases(self, start: bool, fx: bool, fy: bool, fz: bool, mx: bool, my: bool, mz: bool) -> None: ...
    def GetMemberForces(self) -> List[MemberForces]: ...
    @overload
    def SetMemberForces(self, memberForces: MemberForces) -> None: ...
    @overload
    def SetMemberForces(self, start: bool, force: XYZ, moment: XYZ) -> None: ...
    def RemoveMemberForces(self, start: bool) -> bool: ...
    def RemoveAllMemberForces(self) -> bool: ...


class AnalyticalModelColumn(AnalyticalModelStick):
    @property
    def BaseExtensionMethod(self) -> AnalyticalAlignmentMethod: ...
    @BaseExtensionMethod.setter
    def BaseExtensionMethod(self, method: AnalyticalAlignmentMethod) -> None: ...
    @property
    def TopExtensionMethod(self) -> AnalyticalAlignmentMethod: ...
    @TopExtensionMethod.setter
    def TopExtensionMethod(self, method: AnalyticalAlignmentMethod) -> None: ...
    @property
    def BaseExtensionPlaneId(self) -> ElementId: ...
    @BaseExtensionPlaneId.setter
    def BaseExtensionPlaneId(self, planeId: ElementId) -> None: ...
    @property
    def TopExtensionPlaneId(self) -> ElementId: ...
    @TopExtensionPlaneId.setter
    def TopExtensionPlaneId(self, planeId: ElementId) -> None: ...
    @property
    def BaseExtension(self) -> StickElementExtension: ...
    @BaseExtension.setter
    def BaseExtension(self, extensionType: StickElementExtension) -> None: ...
    @property
    def TopExtension(self) -> StickElementExtension: ...
    @TopExtension.setter
    def TopExtension(self, extensionType: StickElementExtension) -> None: ...


class MemberForces:
    def __init__(self, start: bool, force: XYZ, moment: XYZ): ...
    @property
    def Start(self) -> bool: ...
    @Start.setter
    def Start(self, start: bool) -> None: ...
    @property
    def Force(self) -> XYZ: ...
    @Force.setter
    def Force(self, force: XYZ) -> None: ...
    @property
    def Moment(self) -> XYZ: ...
    @Moment.setter
    def Moment(self, moment: XYZ) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class AnalyticalModelSurface(AnalyticalModel):
    @property
    def AlignmentMethod(self) -> AnalyticalAlignmentMethod: ...
    @AlignmentMethod.setter
    def AlignmentMethod(self, method: AnalyticalAlignmentMethod) -> None: ...
    @property
    def ProjectionZ(self) -> SurfaceElementProjectionZ: ...
    @ProjectionZ.setter
    def ProjectionZ(self, projectionZ: SurfaceElementProjectionZ) -> None: ...
    @property
    def ProjectionPlaneZ(self) -> ElementId: ...
    @ProjectionPlaneZ.setter
    def ProjectionPlaneZ(self, planeIdZ: ElementId) -> None: ...
    @property
    def HasExtension(self) -> bool: ...
    @property
    def TopExtensionMethod(self) -> AnalyticalAlignmentMethod: ...
    @TopExtensionMethod.setter
    def TopExtensionMethod(self, method: AnalyticalAlignmentMethod) -> None: ...
    @property
    def BottomExtensionMethod(self) -> AnalyticalAlignmentMethod: ...
    @BottomExtensionMethod.setter
    def BottomExtensionMethod(self, method: AnalyticalAlignmentMethod) -> None: ...
    @property
    def BottomExtension(self) -> SurfaceElementExtension: ...
    @BottomExtension.setter
    def BottomExtension(self, extensionType: SurfaceElementExtension) -> None: ...
    @property
    def TopExtension(self) -> SurfaceElementExtension: ...
    @TopExtension.setter
    def TopExtension(self, extensionType: SurfaceElementExtension) -> None: ...
    @property
    def BottomExtensionPlaneId(self) -> ElementId: ...
    @BottomExtensionPlaneId.setter
    def BottomExtensionPlaneId(self, planeId: ElementId) -> None: ...
    @property
    def TopExtensionPlaneId(self) -> ElementId: ...
    @TopExtensionPlaneId.setter
    def TopExtensionPlaneId(self, planeId: ElementId) -> None: ...
    def IsPlanar(self) -> bool: ...
    def GetPlane(self) -> Plane: ...
    def IsValidOpeningForHide(self, openingId: ElementId) -> bool: ...
    def GetHiddenOpenings(self) -> Tuple[ICollection]: ...
    def GetOpenings(self) -> Tuple[ICollection]: ...
    def GetOpeningLoops(self, openingId: ElementId) -> List[CurveLoop]: ...
    def HasOpenings(self) -> bool: ...
    def HideOpening(self, openingId: ElementId) -> bool: ...
    def IsOpeningHidden(self, openingId: ElementId) -> bool: ...
    def ShowOpening(self, openingId: ElementId) -> bool: ...
    def GetLoops(self, loopType: AnalyticalLoopType) -> List[CurveLoop]: ...
    def SetLoops(self, loopType: AnalyticalLoopType, newLoops: List[CurveLoop]) -> bool: ...
    @overload
    def GetLocalCoordinateSystem(self, point: XYZ) -> Transform: ...


class AreaReinforcementType(ElementType):
    def CreateDefaultAreaReinforcementType(aDoc: Document) -> ElementId: ...


class StickElementProjectionY:
    LocationLine = 0
    Left = 1
    Center = 2
    Right = 3
    Plane = 4
    Varies = 5


class StickElementProjectionZ:
    LocationLine = 0
    Top = 1
    Center = 2
    Bottom = 3
    Plane = 4
    Varies = 5


class StickElementExtension:
    BottomOrTop = 0
    ReferenceLevel = 1
    Plane = 2
    Varies = 3


class ReleaseType:
    Fixed = 0
    Pinned = 1
    BendingMoment = 2
    UserDefined = 3


class SurfaceElementProjectionZ:
    TopOrInterior = 0
    CenterOfElement = 1
    BottomOrExterior = 2
    CenterOfCore = 3
    Plane = 4


class SurfaceElementExtension:
    BottomOrTop = 0
    Plane = 1


class StructuralInstanceUsageFilter(ElementSlowFilter):
    @overload
    def __init__(self, structuralUsage: StructuralInstanceUsage, inverted: bool): ...
    @overload
    def __init__(self, structuralUsage: StructuralInstanceUsage): ...
    @property
    def StructuralUsage(self) -> StructuralInstanceUsage: ...


class StructuralMaterialTypeFilter(ElementSlowFilter):
    @overload
    def __init__(self, structuralMaterialType: StructuralMaterialType, inverted: bool): ...
    @overload
    def __init__(self, structuralMaterialType: StructuralMaterialType): ...
    @property
    def StructuralMaterialType(self) -> StructuralMaterialType: ...


class StructuralWallUsageFilter(ElementSlowFilter):
    @overload
    def __init__(self, structuralWallUsage: StructuralWallUsage, inverted: bool): ...
    @overload
    def __init__(self, structuralWallUsage: StructuralWallUsage): ...
    @property
    def StructuralWallUsage(self) -> StructuralWallUsage: ...


class CodeCheckingParameterServiceData:
    @property
    def Document(self) -> Document: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetCurrentElements(self) -> List[ElementId]: ...
    def Dispose(self) -> None: ...


class EndTreatmentType(ElementType):
    @property
    def EndTreatment(self) -> str: ...
    @EndTreatment.setter
    def EndTreatment(self, endTreatment: str) -> None: ...
    @overload
    def Create(doc: Document, strTreatment: str) -> EndTreatmentType: ...
    @overload
    def Create(doc: Document) -> EndTreatmentType: ...
    def CreateDefaultEndTreatmentType(ADoc: Document) -> ElementId: ...


class ExtElemChangeBeamSectionRegistry:
    @property
    def IsValidObject(self) -> bool: ...
    def RegisterInterface(provider: IExtElemChangeBeamSection) -> None: ...
    def Unregister() -> None: ...
    def Dispose(self) -> None: ...


class IExtElemChangeBeamSection:
    def ChangeSection(self, doc: Document, idElem: ElementId) -> bool: ...


class FabricArea(Element):
    @property
    def HostId(self) -> ElementId: ...
    @property
    def SketchId(self) -> ElementId: ...
    @property
    def LapSplicePosition(self) -> FabricLapSplicePosition: ...
    @LapSplicePosition.setter
    def LapSplicePosition(self, lapSplicePosition: FabricLapSplicePosition) -> None: ...
    @property
    def MajorLapSpliceLength(self) -> float: ...
    @MajorLapSpliceLength.setter
    def MajorLapSpliceLength(self, majorLapSpliceLength: float) -> None: ...
    @property
    def MinorLapSpliceLength(self) -> float: ...
    @MinorLapSpliceLength.setter
    def MinorLapSpliceLength(self, minorLapSpliceLength: float) -> None: ...
    @property
    def CoverOffset(self) -> float: ...
    @CoverOffset.setter
    def CoverOffset(self, coverOffset: float) -> None: ...
    @property
    def TagViewId(self) -> ElementId: ...
    @TagViewId.setter
    def TagViewId(self, tagViewId: ElementId) -> None: ...
    @property
    def FabricAreaType(self) -> FabricAreaType: ...
    @property
    def Direction(self) -> XYZ: ...
    @property
    def DirectionOrigin(self) -> XYZ: ...
    @property
    def MajorSheetAlignment(self) -> FabricSheetAlignment: ...
    @MajorSheetAlignment.setter
    def MajorSheetAlignment(self, alignment: FabricSheetAlignment) -> None: ...
    @property
    def MinorSheetAlignment(self) -> FabricSheetAlignment: ...
    @MinorSheetAlignment.setter
    def MinorSheetAlignment(self, alignment: FabricSheetAlignment) -> None: ...
    @property
    def FabricSheetTypeId(self) -> ElementId: ...
    @FabricSheetTypeId.setter
    def FabricSheetTypeId(self, fabricSheetTypeId: ElementId) -> None: ...
    @property
    def FabricLocation(self) -> FabricLocation: ...
    @FabricLocation.setter
    def FabricLocation(self, fabricLocation: FabricLocation) -> None: ...
    @overload
    def Create(aDoc: Document, hostElement: Element, majorDirection: XYZ, fabricAreaTypeId: ElementId, fabricSheetTypeId: ElementId) -> FabricArea: ...
    @overload
    def Create(aDoc: Document, hostElement: Element, curveLoops: List[CurveLoop], majorDirection: XYZ, majorDirectionOrigin: XYZ, fabricAreaTypeId: ElementId, fabricSheetTypeId: ElementId) -> FabricArea: ...
    def GetValidViewsForTags(self) -> List[ElementId]: ...
    def GetTotalSheetMass(self) -> float: ...
    def CopyCurveLoopsInSketch(self) -> List[CurveLoop]: ...
    def GetBoundaryCurveIds(self) -> List[ElementId]: ...
    def GetFabricSheetElementIds(self) -> List[ElementId]: ...
    def RemoveFabricReinforcementSystem(doc: Document, system: FabricArea) -> List[ElementId]: ...
    def GetReinforcementRoundingManager(self) -> FabricRoundingManager: ...
    def IsValidMajorLapSplice(self, majorLapSplice: float) -> bool: ...
    def IsValidMinorLapSplice(self, minorLapSplice: float) -> bool: ...
    def IsCoverOffsetValid(self, coverOffset: float) -> bool: ...


class FabricAreaType(ElementType):
    def CreateDefaultFabricAreaType(aDoc: Document) -> ElementId: ...


class ReinforcementRoundingManager:
    @property
    def Element(self) -> Element: ...
    @property
    def IsActiveOnElement(self) -> bool: ...
    @IsActiveOnElement.setter
    def IsActiveOnElement(self, value: bool) -> None: ...
    @property
    def LengthDisplayUnit(self) -> DisplayUnitType: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetLengthUnitTypeId(self) -> ForgeTypeId: ...
    def Dispose(self) -> None: ...


class RebarRoundingManager(ReinforcementRoundingManager):
    @property
    def ApplicableReinforcementRoundingSource(self) -> ReinforcementRoundingSource: ...
    @property
    def TotalLengthRounding(self) -> float: ...
    @TotalLengthRounding.setter
    def TotalLengthRounding(self, value: float) -> None: ...
    @property
    def TotalLengthRoundingMethod(self) -> RoundingMethod: ...
    @TotalLengthRoundingMethod.setter
    def TotalLengthRoundingMethod(self, value: RoundingMethod) -> None: ...
    @property
    def SegmentLengthRounding(self) -> float: ...
    @SegmentLengthRounding.setter
    def SegmentLengthRounding(self, value: float) -> None: ...
    @property
    def SegmentLengthRoundingMethod(self) -> RoundingMethod: ...
    @SegmentLengthRoundingMethod.setter
    def SegmentLengthRoundingMethod(self, value: RoundingMethod) -> None: ...
    @property
    def ApplicableTotalLengthRounding(self) -> float: ...
    @property
    def ApplicableSegmentLengthRounding(self) -> float: ...
    @property
    def ApplicableTotalLengthRoundingMethod(self) -> RoundingMethod: ...
    @property
    def ApplicableSegmentLengthRoundingMethod(self) -> RoundingMethod: ...


class FabricRoundingManager(ReinforcementRoundingManager):
    @property
    def ApplicableReinforcementRoundingSource(self) -> ReinforcementRoundingSource: ...
    @property
    def TotalLengthRounding(self) -> float: ...
    @TotalLengthRounding.setter
    def TotalLengthRounding(self, value: float) -> None: ...
    @property
    def TotalLengthRoundingMethod(self) -> RoundingMethod: ...
    @TotalLengthRoundingMethod.setter
    def TotalLengthRoundingMethod(self, value: RoundingMethod) -> None: ...
    @property
    def SegmentLengthRounding(self) -> float: ...
    @SegmentLengthRounding.setter
    def SegmentLengthRounding(self, value: float) -> None: ...
    @property
    def SegmentLengthRoundingMethod(self) -> RoundingMethod: ...
    @SegmentLengthRoundingMethod.setter
    def SegmentLengthRoundingMethod(self, value: RoundingMethod) -> None: ...
    @property
    def ApplicableTotalLengthRounding(self) -> float: ...
    @property
    def ApplicableTotalLengthRoundingMethod(self) -> RoundingMethod: ...
    @property
    def ApplicableSegmentLengthRounding(self) -> float: ...
    @property
    def ApplicableSegmentLengthRoundingMethod(self) -> RoundingMethod: ...


class FabricReinSpanSymbol(IndependentTag):
    def Create(document: Document, viewId: ElementId, hostId: LinkElementId, point: XYZ, symbolId: ElementId) -> FabricReinSpanSymbol: ...


class FabricSheetType(ElementType):
    @property
    def MajorDirectionWireType(self) -> ElementId: ...
    @MajorDirectionWireType.setter
    def MajorDirectionWireType(self, majorDirectionWireType: ElementId) -> None: ...
    @property
    def MinorDirectionWireType(self) -> ElementId: ...
    @MinorDirectionWireType.setter
    def MinorDirectionWireType(self, minorDirectionWireType: ElementId) -> None: ...
    @property
    def MajorLapSpliceLength(self) -> float: ...
    @MajorLapSpliceLength.setter
    def MajorLapSpliceLength(self, majorLapSpliceLength: float) -> None: ...
    @property
    def MinorLapSpliceLength(self) -> float: ...
    @MinorLapSpliceLength.setter
    def MinorLapSpliceLength(self, minorLapSpliceLength: float) -> None: ...
    @property
    def OverallLength(self) -> float: ...
    @property
    def MajorStartOverhang(self) -> float: ...
    @property
    def MajorEndOverhang(self) -> float: ...
    @property
    def MajorLayoutPattern(self) -> FabricSheetLayoutPattern: ...
    @property
    def MajorNumberOfWires(self) -> int: ...
    @property
    def MajorSpacing(self) -> float: ...
    @property
    def OverallWidth(self) -> float: ...
    @property
    def MinorStartOverhang(self) -> float: ...
    @property
    def MinorEndOverhang(self) -> float: ...
    @property
    def MinorLayoutPattern(self) -> FabricSheetLayoutPattern: ...
    @property
    def MinorNumberOfWires(self) -> int: ...
    @property
    def MinorSpacing(self) -> float: ...
    @property
    def SheetMass(self) -> float: ...
    @SheetMass.setter
    def SheetMass(self, sheetMass: float) -> None: ...
    @property
    def SheetMassUnit(self) -> float: ...
    @property
    def MajorReinforcementArea(self) -> float: ...
    @property
    def MinorReinforcementArea(self) -> float: ...
    @property
    def Material(self) -> ElementId: ...
    @Material.setter
    def Material(self, sheetMaterial: ElementId) -> None: ...
    def CreateDefaultFabricSheetType(ADoc: Document) -> ElementId: ...
    def GetReinforcementRoundingManager(self) -> FabricRoundingManager: ...
    def IsValidMajorLapSplice(self, majorLapSplice: float) -> bool: ...
    def IsValidMinorLapSplice(self, minorLapSplice: float) -> bool: ...
    def SetMajorLayoutAsActualSpacing(self, overallWidth: float, minorStartOverhang: float, spacing: float) -> None: ...
    def SetMajorLayoutAsMaximumSpacing(self, overallWidth: float, minorStartOverhang: float, minorEndOverhang: float, spacing: float) -> None: ...
    def SetMajorLayoutAsFixedNumber(self, overallWidth: float, minorStartOverhang: float, minorEndOverhang: float, numberOfWires: int) -> None: ...
    def SetMajorLayoutAsNumberWithSpacing(self, overallWidth: float, minorStartOverhang: float, numberOfWires: int, spacing: float) -> None: ...
    def SetMinorLayoutAsActualSpacing(self, overallLength: float, majorStartOverhang: float, spacing: float) -> None: ...
    def SetMinorLayoutAsMaximumSpacing(self, overallLength: float, majorStartOverhang: float, majorEndOverhang: float, spacing: float) -> None: ...
    def SetMinorLayoutAsFixedNumber(self, overallLength: float, majorStartOverhang: float, majorEndOverhang: float, numberOfWires: int) -> None: ...
    def SetMinorLayoutAsNumberWithSpacing(self, overallLength: float, majorStartOverhang: float, numberOfWires: int, spacing: float) -> None: ...
    def SetLayoutAsCustomPattern(self, minorStartOverhang: float, majorStartOverhang: float, minorFabricWireItems: List[FabricWireItem], majorFabricWireItems: List[FabricWireItem]) -> None: ...
    def IsCustom(self) -> bool: ...
    def GetWireItem(self, wireIndex: int, direction: WireDistributionDirection) -> FabricWireItem: ...


class FabricSheet(Element):
    @property
    def BentFabricBendDirection(self) -> BentFabricBendDirection: ...
    @BentFabricBendDirection.setter
    def BentFabricBendDirection(self, bentFabricBendDirection: BentFabricBendDirection) -> None: ...
    @property
    def BentFabricStraightWiresLocation(self) -> BentFabricStraightWiresLocation: ...
    @BentFabricStraightWiresLocation.setter
    def BentFabricStraightWiresLocation(self, bentFabricStraightWiresLocation: BentFabricStraightWiresLocation) -> None: ...
    @property
    def BentFabricLongitudinalCutLength(self) -> float: ...
    @BentFabricLongitudinalCutLength.setter
    def BentFabricLongitudinalCutLength(self, bentFabricLongitudinalCutLength: float) -> None: ...
    @property
    def BendFinalLoopOrientationVector(self) -> XYZ: ...
    @property
    def SketchId(self) -> ElementId: ...
    @property
    def IsBent(self) -> bool: ...
    @property
    def HostId(self) -> ElementId: ...
    @property
    def CutSheetMass(self) -> float: ...
    @property
    def FabricAreaOwnerId(self) -> ElementId: ...
    @property
    def FabricLocation(self) -> FabricLocation: ...
    @FabricLocation.setter
    def FabricLocation(self, fabricLocation: FabricLocation) -> None: ...
    @property
    def CoverOffset(self) -> float: ...
    @CoverOffset.setter
    def CoverOffset(self, coverOffset: float) -> None: ...
    @property
    def FabricHostReference(self) -> FabricHostReference: ...
    @FabricHostReference.setter
    def FabricHostReference(self, fabricHostReference: FabricHostReference) -> None: ...
    @property
    def FabricNumber(self) -> str: ...
    @property
    def CutOverallLength(self) -> float: ...
    @property
    def CutOverallWidth(self) -> float: ...
    @overload
    def Create(document: Document, concreteHostElementId: ElementId, fabricSheetTypeId: ElementId, bendProfile: CurveLoop) -> FabricSheet: ...
    @overload
    def Create(document: Document, hostElement: Element, fabricSheetTypeId: ElementId) -> FabricSheet: ...
    @overload
    def GetWireCenterlines(self) -> List[Curve]: ...
    @overload
    def GetWireCenterlines(self, wireDirection: WireDistributionDirection) -> List[Curve]: ...
    def PlaceInHost(self, hostElement: Element, transform: Transform) -> None: ...
    @overload
    def IsValidHost(host: Element) -> bool: ...
    @overload
    def IsValidHost(document: Document, concreteHostElementId: ElementId) -> bool: ...
    def GetSheetLocation(self) -> Transform: ...
    def GetReinforcementRoundingManager(self) -> FabricRoundingManager: ...
    def GetBendProfileWithFillets(self) -> CurveLoop: ...
    def GetBendProfile(self) -> CurveLoop: ...
    def SetBendProfile(self, bendProfile: CurveLoop) -> None: ...
    def GetSegmentParameterIdsAndLengths(self, rounded: bool) -> IDictionary: ...
    def SetSegmentLength(self, segmentParameterId: ElementId, value: float) -> None: ...
    def IsSolidInView(self, view: View3D) -> bool: ...
    def SetSolidInView(self, view: View3D, solid: bool) -> None: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def IsCoverOffsetValid(self, coverOffset: float) -> bool: ...
    def IsSingleFabricSheetWithinHost(self, hostElement: Element, transform: Transform) -> bool: ...


class FabricWireItem:
    @property
    def Distance(self) -> float: ...
    @Distance.setter
    def Distance(self, distance: float) -> None: ...
    @property
    def WireType(self) -> ElementId: ...
    @WireType.setter
    def WireType(self, wireType: ElementId) -> None: ...
    @property
    def WireLength(self) -> float: ...
    @WireLength.setter
    def WireLength(self, length: float) -> None: ...
    @property
    def OffsetAlongWire(self) -> float: ...
    @OffsetAlongWire.setter
    def OffsetAlongWire(self, offset: float) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Create(distance: float, wireLength: float, wireType: ElementId, wireOffset: float) -> FabricWireItem: ...
    def Dispose(self) -> None: ...


class FabricWireType(ElementType):
    @property
    def WireDiameter(self) -> float: ...
    @WireDiameter.setter
    def WireDiameter(self, wireDiameter: float) -> None: ...
    @property
    def BendDiameter(self) -> float: ...
    @BendDiameter.setter
    def BendDiameter(self, bendDiameter: float) -> None: ...
    def CreateDefaultFabricWireType(ADoc: Document) -> ElementId: ...


class FabricLocation:
    TopOrExternal = 0
    BottomOrInternal = 1


class FabricLapSplicePosition:
    Aligned = 0
    MajorHalfwayStagger = 1
    MajorPassingStagger = 2
    MinorHalfwayStagger = 3
    MinorPassingStagger = 4


class FabricSheetAlignment:
    Null = 0
    StartingEdge = 1
    EndingEdge = 2
    BothEdges = 3


class FabricSheetLayoutPattern:
    ActualSpacing = 0
    FixedNumber = 1
    MaximumSpacing = 2
    NumberWithSpacing = 3
    QuantitativeSpacing = 4


class FabricTagComponentReference:
    MajorAxis = 0
    MinorAxis = 1
    Diagonal = 2
    Intersection = 3


class FabricHostReference:
    NotCutByCover = 0
    CutByCover = 1


class BentFabricBendDirection:
    Major = 0
    Minor = 1


class BentFabricStraightWiresLocation:
    Right = 0
    Left = 1


class ReinforcementRoundingSource:
    #None = 0
    ReinforcementSettings = 1
    Type = 2
    Element = 3


class WireDistributionDirection:
    Major = 0
    Minor = 1


class YZJustificationOption:
    Uniform = 0
    Independent = 1


class YJustification:
    Left = 0
    Center = 1
    Origin = 2
    Right = 3


class ZJustification:
    Top = 0
    Center = 1
    Origin = 2
    Bottom = 3


class Hub(Element):
    def HasOrigin(self) -> bool: ...
    def GetOrigin(self) -> XYZ: ...
    def GetHubConnectorManager(self) -> ConnectorManager: ...


class ICodeCheckingParameterServer:
    def PerformCodeChecking(self, data: CodeCheckingParameterServiceData) -> bool: ...


class IMemberForcesServer:
    def MemberForcesUpdate(self, data: MemberForcesServiceData) -> bool: ...


class MemberForcesServiceData:
    @property
    def Document(self) -> Document: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetCurrentElements(self) -> List[ElementId]: ...
    def Dispose(self) -> None: ...


class IRebarUpdateServer:
    def GetCustomHandles(self, handlesInfoData: RebarHandlesData) -> bool: ...
    def GetCustomHandleName(self, handleNameData: RebarHandleNameData) -> bool: ...
    def GenerateCurves(self, curvesData: RebarCurvesData) -> bool: ...
    def TrimExtendCurves(self, trimExtendData: RebarTrimExtendData) -> bool: ...
    def GetHandlesPosition(self, handlePositionData: RebarHandlePositionData) -> bool: ...


class RebarHandlesData:
    @property
    def IsValidObject(self) -> bool: ...
    def AddCustomHandle(self, customHandleTag: int) -> None: ...
    def GetCustomHandles(self) -> List[int]: ...
    def SetStartHandle(self, startHandleTag: int) -> None: ...
    def GetStartHandle(self) -> int: ...
    def SetEndHandle(self, endHandleTag: int) -> None: ...
    def GetEndHandle(self) -> int: ...
    def Dispose(self) -> None: ...


class RebarHandleNameData:
    @property
    def IsValidObject(self) -> bool: ...
    def GetCustomHandleTag(self) -> int: ...
    def SetCustomHandleName(self, customHandleName: str) -> None: ...
    def Dispose(self) -> None: ...


class RebarUpdateCurvesData:
    @property
    def AreWorkshopInstructionsChanged(self) -> bool: ...
    @property
    def WorkshopInstructions(self) -> RebarWorkInstructions: ...
    @property
    def IsLayoutChanged(self) -> bool: ...
    @property
    def IsSpacingChanged(self) -> bool: ...
    @property
    def IsBarsNumberChanged(self) -> bool: ...
    @property
    def IsStartConstraintChanged(self) -> bool: ...
    @property
    def IsEndConstraintChanged(self) -> bool: ...
    @property
    def IsAttachmentTypeChanged(self) -> bool: ...
    @property
    def IsStyleChanged(self) -> bool: ...
    @property
    def IsBendingRadiusChanged(self) -> bool: ...
    @property
    def Spacing(self) -> float: ...
    @property
    def HostMirrored(self) -> bool: ...
    @HostMirrored.setter
    def HostMirrored(self, hostMirrored: bool) -> None: ...
    @property
    def IsReversed(self) -> bool: ...
    @IsReversed.setter
    def IsReversed(self, isReversed: bool) -> None: ...
    @property
    def ErrorMessage(self) -> str: ...
    @ErrorMessage.setter
    def ErrorMessage(self, errorMessage: str) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetNumberOfBars(self) -> int: ...
    def GetBarGeometry(self, barIndex: int) -> List[Curve]: ...
    def GetChangedCustomHandles(self) -> List[int]: ...
    def GetChangedSharedParameterGUIDs(self) -> List[Guid]: ...
    def GetCustomConstraints(self) -> List[RebarConstraint]: ...
    def GetStartConstraint(self) -> RebarConstraint: ...
    def GetEndConstraint(self) -> RebarConstraint: ...
    def GetBarDiameter(self) -> float: ...
    def GetRebarStyle(self) -> RebarStyle: ...
    def GetAttachmentType(self) -> StirrupTieAttachmentType: ...
    def GetBendingRadius(self) -> float: ...
    def GetLayoutRule(self) -> RebarLayoutRule: ...
    def GetBarsNumber(self) -> int: ...
    def GetHostId(self) -> ElementId: ...
    def SetHookPlaneNormalForBarIdx(self, end: int, barPositionIndex: int, hookNormal: XYZ) -> None: ...
    def GetHookPlaneNormalForBarIdx(self, end: int, barPositionIndex: int) -> XYZ: ...
    def SetHookOrientationAngle(self, end: int, angle: float) -> None: ...
    def GetHookOrientationAngle(self, end: int) -> float: ...
    def GetDocument(self) -> Document: ...
    def GetRebarId(self) -> ElementId: ...
    def Dispose(self) -> None: ...


class RebarCurvesData:
    @property
    def IsValidObject(self) -> bool: ...
    def GetAddedBarGeometry(self, barIndex: int) -> List[Curve]: ...
    def ClearAllAddedBarGeometry(self) -> None: ...
    @overload
    def AddBarGeometry(self, curves: CurveLoop) -> RebarFreeFormValidationResult: ...
    @overload
    def AddBarGeometry(self, curves: List[Curve]) -> RebarFreeFormValidationResult: ...
    def CanAddBarGeometry(self) -> bool: ...
    def GetNumberOfBarGeometry(self) -> int: ...
    def GetDistributionPath(self) -> List[Curve]: ...
    def SetDistributionPath(self, path: List[Curve]) -> None: ...
    def GetRebarUpdateCurvesData(self) -> RebarUpdateCurvesData: ...
    def Dispose(self) -> None: ...


class RebarTrimExtendData:
    @property
    def IsValidObject(self) -> bool: ...
    def GetAddedBarGeometry(self, barIndex: int) -> List[Curve]: ...
    def ClearAllAddedBarGeometry(self) -> None: ...
    @overload
    def AddBarGeometry(self, curves: CurveLoop) -> RebarFreeFormValidationResult: ...
    @overload
    def AddBarGeometry(self, curves: List[Curve]) -> RebarFreeFormValidationResult: ...
    def CanAddBarGeometry(self) -> bool: ...
    def GetNumberOfBarGeometry(self) -> int: ...
    def CreateStartConstraint(self, targetReferences: List[Reference], isConstraintToCover: bool, offsetValue: float) -> bool: ...
    def CreateEndConstraint(self, targetReferences: List[Reference], isConstraintToCover: bool, offsetValue: float) -> bool: ...
    def GetRebarUpdateCurvesData(self) -> RebarUpdateCurvesData: ...
    def Dispose(self) -> None: ...


class RebarHandlePositionData:
    @property
    def IsValidObject(self) -> bool: ...
    def GetNumberOfBars(self) -> int: ...
    def GetBarGeometry(self, barIndex: int) -> List[Curve]: ...
    def SetPosition(self, handleTag: int, position: XYZ) -> None: ...
    def GetDistributionPath(self) -> List[Curve]: ...
    def Dispose(self) -> None: ...


class IStructuralSectionsServer:
    def StructuralSectionsUpdate(self, data: StructuralSectionsServiceData) -> bool: ...


class StructuralSectionsServiceData:
    @property
    def Document(self) -> Document: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetCurrentElements(self) -> List[ElementId]: ...
    def Dispose(self) -> None: ...


class PathReinSpanSymbol(IndependentTag):
    def Create(document: Document, viewId: ElementId, hostId: LinkElementId, point: XYZ, symbolId: ElementId) -> PathReinSpanSymbol: ...


class PathReinforcementType(ElementType):
    def CreateDefaultPathReinforcementType(ADoc: Document) -> ElementId: ...


class RebarConstraintsManager:
    @property
    def IsRebarConstrainedPlacementEnabled() -> bool: ...
    @IsRebarConstrainedPlacementEnabled.setter
    def IsRebarConstrainedPlacementEnabled(isEnabled: bool) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetAllConstrainedHandles(self) -> List[RebarConstrainedHandle]: ...
    def GetCurrentConstraintOnHandle(self, handle: RebarConstrainedHandle) -> RebarConstraint: ...
    @overload
    def GetConstraintCandidatesForHandle(self, handle: RebarConstrainedHandle, reference: Reference) -> List[RebarConstraint]: ...
    @overload
    def GetConstraintCandidatesForHandle(self, handle: RebarConstrainedHandle, elementId: ElementId) -> List[RebarConstraint]: ...
    @overload
    def GetConstraintCandidatesForHandle(self, handle: RebarConstrainedHandle) -> List[RebarConstraint]: ...
    def SetPreferredConstraintForHandle(self, handle: RebarConstrainedHandle, constraint: RebarConstraint) -> None: ...
    def RemovePreferredConstraintFromHandle(self, handle: RebarConstrainedHandle) -> None: ...
    def GetAllHandles(self) -> List[RebarConstrainedHandle]: ...
    def GetPreferredConstraintOnHandle(self, handle: RebarConstrainedHandle) -> RebarConstraint: ...
    def HighlightHandleConstraintPairInAllViews(self, aDoc: Document, handle: RebarConstrainedHandle, constraint: RebarConstraint) -> None: ...
    def ClearHandleConstraintPairHighlighting(self, aDoc: Document) -> None: ...
    def AllowConstraintTargets(self, handle: RebarConstrainedHandle, targetsToConstrain: List[Reference]) -> bool: ...
    def ApplyRebarConstraints(self, constraintsToApply: List[RebarConstraint], oldTargets: List[Reference], newTargets: List[Reference]) -> bool: ...
    def HasValidRebar(self) -> bool: ...
    def Dispose(self) -> None: ...


class RebarFreeFormAccessor:
    @property
    def WorkshopInstructions(self) -> RebarWorkInstructions: ...
    @WorkshopInstructions.setter
    def WorkshopInstructions(self, workshopInstructions: RebarWorkInstructions) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetCustomDistributionPath(self) -> List[Curve]: ...
    def SetLayoutAsSingle(self) -> None: ...
    def SetLayoutAsNumberWithSpacing(self, numberOfBars: int, spacing: float) -> None: ...
    def SetLayoutAsFixedNumber(self, numberOfBars: int) -> None: ...
    def SetLayoutAsMaximumSpacing(self, spacing: float) -> None: ...
    def SetLayoutAsMinimumClearSpacing(self, spacing: float) -> None: ...
    def GetShapeIdAtIndex(self, barPositionIndex: int) -> ElementId: ...
    def IsBarMatchedWithShapeInReverseOrder(self, barPositionIndex: int) -> bool: ...
    def GetHookTypeIdAtIndex(self, barPositionIndex: int, end: int) -> ElementId: ...
    def GetHookOrientationAngleAtIndex(self, barPositionIndex: int, end: int) -> float: ...
    def GetHookOrientationAtIndex(self, barPositionIndex: int, end: int) -> RebarHookOrientation: ...
    def GetCouplerIdAtIndex(self, barPositionIndex: int, end: int) -> ElementId: ...
    def GetEndTreatmentTypeIdAtIndex(self, barPositionIndex: int, end: int) -> ElementId: ...
    def AddUpdatingSharedParameter(self, parameterId: ElementId) -> None: ...
    def RemoveUpdatingSharedParameter(self, parameterId: ElementId) -> None: ...
    def GetUpdatingSharedParameters(self) -> List[ElementId]: ...
    def HasValidServer(self) -> bool: ...
    def IsUnconstrained(self) -> bool: ...
    def SetHookPlaneNormalForBarIdx(self, end: int, barPositionIndex: int, hookNormal: XYZ) -> None: ...
    def GetHookPlaneNormalForBarIdx(self, end: int, barPositionIndex: int) -> XYZ: ...
    def SetHookOrientationAngle(self, end: int, angle: float) -> None: ...
    def GetHookOrientationAngle(self, end: int) -> float: ...
    def CanBeHookNormal(self, barIndex: int, end: int, normal: XYZ) -> bool: ...
    @overload
    def SetCurves(self, curves: List[CurveLoop]) -> RebarFreeFormValidationResult: ...
    @overload
    def SetCurves(self, curves: List[Curve]) -> RebarFreeFormValidationResult: ...
    def GetServerGUID(self) -> Guid: ...
    def DisconnectFromServer(self) -> None: ...
    def Dispose(self) -> None: ...


class RebarShapeDrivenAccessor:
    @property
    def Normal(self) -> XYZ: ...
    @property
    def BarsOnNormalSide(self) -> bool: ...
    @BarsOnNormalSide.setter
    def BarsOnNormalSide(self, barsOnNormalSide: bool) -> None: ...
    @property
    def Height(self) -> float: ...
    @Height.setter
    def Height(self, height: float) -> None: ...
    @property
    def ArrayLength(self) -> float: ...
    @ArrayLength.setter
    def ArrayLength(self, arrayLength: float) -> None: ...
    @property
    def BaseFinishingTurns(self) -> int: ...
    @BaseFinishingTurns.setter
    def BaseFinishingTurns(self, turns: int) -> None: ...
    @property
    def MultiplanarDepth(self) -> float: ...
    @MultiplanarDepth.setter
    def MultiplanarDepth(self, multiplanarDepth: float) -> None: ...
    @property
    def TopFinishingTurns(self) -> int: ...
    @TopFinishingTurns.setter
    def TopFinishingTurns(self, turns: int) -> None: ...
    @property
    def Pitch(self) -> float: ...
    @Pitch.setter
    def Pitch(self, pitch: float) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetDistributionPath(self) -> Line: ...
    def ComputeDrivingCurves(self) -> List[Curve]: ...
    def GetBarPositionTransform(self, barPositionIndex: int) -> Transform: ...
    def ScaleToBox(self, origin: XYZ, xVec: XYZ, yVec: XYZ) -> None: ...
    def ScaleToBoxFor3D(self, origin: XYZ, xVec: XYZ, yVec: XYZ, height: float) -> None: ...
    def SetRebarShapeId(self, shapeId: ElementId) -> None: ...
    def SetLayoutAsSingle(self) -> None: ...
    def SetLayoutAsFixedNumber(self, numberOfBarPositions: int, arrayLength: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def SetLayoutAsMaximumSpacing(self, spacing: float, arrayLength: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def SetLayoutAsNumberWithSpacing(self, numberOfBarPositions: int, spacing: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def SetLayoutAsMinimumClearSpacing(self, spacing: float, arrayLength: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def Dispose(self) -> None: ...


class RebarConstrainedHandle:
    @property
    def IsValidObject(self) -> bool: ...
    def GetHandleType(self) -> RebarHandleType: ...
    def GetEdgeNumber(self) -> int: ...
    def GetCustomHandleTag(self) -> int: ...
    def GetHandleName(self) -> str: ...
    def IsValid(self) -> bool: ...
    def IsEdgeHandle(self) -> bool: ...
    def IsCustomHandle(self) -> bool: ...
    def Dispose(self) -> None: ...


class RebarConstraint:
    @property
    def NumberOfTargets(self) -> int: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetConstraintType(self) -> RebarConstraintType: ...
    @overload
    def GetTargetElement(self) -> Element: ...
    @overload
    def GetTargetElement(self, targetIndex: int) -> Element: ...
    def AreGeometryTargetsTheSame(self, otherConstraint: RebarConstraint) -> bool: ...
    @overload
    def GetRebarConstraintTargetHostFaceType(self) -> RebarConstraintTargetHostFaceType: ...
    @overload
    def GetRebarConstraintTargetHostFaceType(self, targetIndex: int) -> RebarConstraintTargetHostFaceType: ...
    def GetTargetHostFaceAndTransform(self, targetIndex: int, faceTransform: Transform) -> Face: ...
    def GetTargetCoverType(self, targetIndex: int) -> RebarCoverType: ...
    @overload
    def GetTargetHostFaceReference(self) -> Reference: ...
    @overload
    def GetTargetHostFaceReference(self, targetIndex: int) -> Reference: ...
    def GetDistanceToTargetHostFace(self) -> float: ...
    def SetDistanceToTargetHostFace(self, offset: float) -> None: ...
    def GetDistanceToTargetCover(self) -> float: ...
    def SetDistanceToTargetCover(self, distanceToTargetCover: float) -> None: ...
    def GetTargetRebarConstraintType(self) -> TargetRebarConstraintType: ...
    def GetTargetRebarEdgeNumber(self) -> int: ...
    def GetTargetRebarBendNumber(self) -> int: ...
    def GetTargetRebarHookBarEnd(self) -> int: ...
    def GetTargetRebarAngleOnBarOrHookBend(self) -> int: ...
    def IsEqual(self, other: RebarConstraint) -> bool: ...
    def Create(handle: RebarConstrainedHandle, targetReferences: List[Reference], isConstraintToCover: bool, offsetValue: float) -> RebarConstraint: ...
    def GetCustomHandleTag(self) -> int: ...
    def ReplaceReferenceTargets(self, handle: RebarConstrainedHandle, targetReferences: List[Reference], isConstraintToCover: bool, offsetValue: float) -> None: ...
    def IsReferenceValidForConstraint(self, targetReference: Reference) -> bool: ...
    def GetDistanceToTargetRebar(self) -> float: ...
    def SetDistanceToTargetRebar(self, distanceToTargetRebar: float) -> None: ...
    def IsBindingHandleWithTarget(self) -> bool: ...
    def SetToBindHandleWithTarget(self, bindsHandleWithTarget: bool) -> None: ...
    def IsUsingClearBarSpacing(self) -> bool: ...
    def SetToUseClearBarSpacing(self, useClearBarSpacing: bool) -> None: ...
    def FlipHandleOverTarget(self) -> None: ...
    def IsValid(self) -> bool: ...
    def IsFixedDistanceToHostFace(self) -> bool: ...
    def IsToCover(self) -> bool: ...
    def IsToOtherRebar(self) -> bool: ...
    def ConstrainsRebarEnds(self) -> bool: ...
    def IsToHostFaceOrCover(self) -> bool: ...
    def TargetRebarConstraintTypeIsEdge(self) -> bool: ...
    def TargetIsBarBend(self) -> bool: ...
    def TargetIsHookBend(self) -> bool: ...
    def HasAnEdgeNumber(self) -> bool: ...
    def Dispose(self) -> None: ...


class RebarContainer(Element):
    @property
    def ScheduleMark(self) -> str: ...
    @ScheduleMark.setter
    def ScheduleMark(self, scheduleMark: str) -> None: ...
    @property
    def PresentItemsAsSubelements(self) -> bool: ...
    @PresentItemsAsSubelements.setter
    def PresentItemsAsSubelements(self, presentItemsAsSubelements: bool) -> None: ...
    @property
    def ItemsCount(self) -> int: ...
    def Create(aDoc: Document, hostElement: Element, rebarContainerTypeId: ElementId) -> RebarContainer: ...
    def ClearItems(self) -> None: ...
    def AppendItemFromRebar(self, rebar: Rebar) -> RebarContainerItem: ...
    def AppendItemFromCurves(self, style: RebarStyle, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, normal: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation, useExistingShapeIfPossible: bool, createNewShape: bool) -> RebarContainerItem: ...
    def AppendItemFromRebarShape(self, rebarShape: RebarShape, barType: RebarBarType, origin: XYZ, xVector: XYZ, yVector: XYZ) -> RebarContainerItem: ...
    def AppendItemFromCurvesAndShape(self, rebarShape: RebarShape, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, normal: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation) -> RebarContainerItem: ...
    def RemoveItem(self, pItem: RebarContainerItem) -> None: ...
    def GetItem(self, itemIndex: int) -> RebarContainerItem: ...
    def GetParametersManager(self) -> RebarContainerParameterManager: ...
    def GetReinforcementRoundingManager(self) -> RebarRoundingManager: ...
    def HasPresentationOverrides(self, dBView: View) -> bool: ...
    def CanApplyPresentationMode(self, dBView: View) -> bool: ...
    def SetItemHiddenStatus(self, view: View, itemIndex: int, hide: bool) -> None: ...
    def IsItemHidden(self, view: View, itemIndex: int) -> bool: ...
    def Contains(self, pItem: RebarContainerItem) -> bool: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def IsSolidInView(self, view: View3D) -> bool: ...
    def SetSolidInView(self, view: View3D, solid: bool) -> None: ...
    def GetHostId(self) -> ElementId: ...
    def SetHostId(self, doc: Document, hostId: ElementId) -> None: ...
    def GetRebarContainerIterator(self) -> RebarContainerIterator: ...
    def GetEnumerator(self) -> IEnumerator: ...


class RebarContainerIterator:
    @property
    def IsValidObject(self) -> bool: ...
    def MoveNext(self) -> bool: ...
    def Reset(self) -> None: ...
    @property
    def Current(self) -> RebarContainerItem: ...
    def Dispose(self) -> None: ...


class RebarContainerItem:
    @property
    def BarTypeId(self) -> ElementId: ...
    @property
    def Normal(self) -> XYZ: ...
    @property
    def BarsOnNormalSide(self) -> bool: ...
    @BarsOnNormalSide.setter
    def BarsOnNormalSide(self, barsOnNormalSide: bool) -> None: ...
    @property
    def ArrayLength(self) -> float: ...
    @ArrayLength.setter
    def ArrayLength(self, arrayLength: float) -> None: ...
    @property
    def Quantity(self) -> int: ...
    @property
    def MaxSpacing(self) -> float: ...
    @MaxSpacing.setter
    def MaxSpacing(self, maxSpacing: float) -> None: ...
    @property
    def LayoutRule(self) -> RebarLayoutRule: ...
    @property
    def IncludeFirstBar(self) -> bool: ...
    @IncludeFirstBar.setter
    def IncludeFirstBar(self, includeFirstBar: bool) -> None: ...
    @property
    def IncludeLastBar(self) -> bool: ...
    @IncludeLastBar.setter
    def IncludeLastBar(self, includeLastBar: bool) -> None: ...
    @property
    def Height(self) -> float: ...
    @Height.setter
    def Height(self, height: float) -> None: ...
    @property
    def BaseFinishingTurns(self) -> int: ...
    @BaseFinishingTurns.setter
    def BaseFinishingTurns(self, turns: int) -> None: ...
    @property
    def TopFinishingTurns(self) -> int: ...
    @TopFinishingTurns.setter
    def TopFinishingTurns(self, turns: int) -> None: ...
    @property
    def Pitch(self) -> float: ...
    @Pitch.setter
    def Pitch(self, pitch: float) -> None: ...
    @property
    def MultiplanarDepth(self) -> float: ...
    @MultiplanarDepth.setter
    def MultiplanarDepth(self, multiplanarDepth: float) -> None: ...
    @property
    def TotalLength(self) -> float: ...
    @property
    def Volume(self) -> float: ...
    @property
    def RebarShapeId(self) -> ElementId: ...
    @RebarShapeId.setter
    def RebarShapeId(self, shapeId: ElementId) -> None: ...
    @property
    def NumberOfBarPositions(self) -> int: ...
    @NumberOfBarPositions.setter
    def NumberOfBarPositions(self, numberOfBarPositions: int) -> None: ...
    @property
    def ItemIndex(self) -> int: ...
    @property
    def IsValidObject(self) -> bool: ...
    def SetFromRebar(self, rebar: Rebar) -> None: ...
    def SetFromCurves(self, style: RebarStyle, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, norm: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation, useExistingShapeIfPossible: bool, createNewShape: bool) -> None: ...
    def SetFromRebarShape(self, rebarShape: RebarShape, barType: RebarBarType, origin: XYZ, xVec: XYZ, yVec: XYZ) -> None: ...
    def SetFromCurvesAndShape(self, rebarShape: RebarShape, barType: RebarBarType, startHook: RebarHookType, endHook: RebarHookType, norm: XYZ, curves: List[Curve], startHookOrient: RebarHookOrientation, endHookOrient: RebarHookOrientation) -> None: ...
    @overload
    def GetCenterlineCurves(self, adjustForSelfIntersection: bool, suppressHooks: bool, suppressBendRadius: bool, multiplanarOption: MultiplanarOption) -> List[Curve]: ...
    @overload
    def GetCenterlineCurves(self, adjustForSelfIntersection: bool, suppressHooks: bool, suppressBendRadius: bool) -> List[Curve]: ...
    def GetDistributionPath(self) -> Line: ...
    def GetBarPositionTransform(self, barPositionIndex: int) -> Transform: ...
    def ComputeDrivingCurves(self) -> List[Curve]: ...
    def SetLayoutAsSingle(self) -> None: ...
    def SetLayoutAsFixedNumber(self, numberOfBarPositions: int, arrayLength: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def SetLayoutAsMaximumSpacing(self, spacing: float, arrayLength: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def SetLayoutAsNumberWithSpacing(self, numberOfBarPositions: int, spacing: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def SetLayoutAsMinimumClearSpacing(self, spacing: float, arrayLength: float, barsOnNormalSide: bool, includeFirstBar: bool, includeLastBar: bool) -> None: ...
    def GetBendData(self) -> RebarBendData: ...
    def GetHookTypeId(self, end: int) -> ElementId: ...
    def SetHookTypeId(self, end: int, hookTypeId: ElementId) -> None: ...
    def DoesBarExistAtPosition(self, barPosition: int) -> bool: ...
    def GetHookOrientation(self, iEnd: int) -> RebarHookOrientation: ...
    def SetHookOrientation(self, iEnd: int, hookOrientation: RebarHookOrientation) -> None: ...
    def CanUseHookType(self, proposedHookId: ElementId) -> bool: ...
    def SetBarHiddenStatus(self, view: View, barIndex: int, hide: bool) -> None: ...
    def IsBarHidden(self, view: View, barIndex: int) -> bool: ...
    def IsRebarInSection(self, dBView: View) -> bool: ...
    def HasPresentationOverrides(self, dBView: View) -> bool: ...
    def ClearPresentationMode(self, dBView: View) -> None: ...
    def SetPresentationMode(self, dBView: View, presentationMode: RebarPresentationMode) -> None: ...
    def GetPresentationMode(self, dBView: View) -> RebarPresentationMode: ...
    def FindMatchingPredefinedPresentationMode(self, dBView: View) -> RebarPresentationMode: ...
    def CanApplyPresentationMode(self, dBView: View) -> bool: ...
    def Dispose(self) -> None: ...


class RebarContainerParameterManager:
    @property
    def IsValidObject(self) -> bool: ...
    @overload
    def AddOverride(self, paramId: ElementId, value: ElementId) -> None: ...
    @overload
    def AddOverride(self, paramId: ElementId, value: str) -> None: ...
    @overload
    def AddOverride(self, paramId: ElementId, value: int) -> None: ...
    @overload
    def AddOverride(self, paramId: ElementId, value: float) -> None: ...
    def GetDoubleOverrideValue(self, paramId: ElementId) -> float: ...
    def GetIntOverrideValue(self, paramId: ElementId) -> int: ...
    def GetStringOverrideValue(self, paramId: ElementId) -> str: ...
    def GetElementIdOverrideValue(self, paramId: ElementId) -> ElementId: ...
    def RemoveOverride(self, paramId: ElementId) -> None: ...
    def ClearOverrides(self) -> None: ...
    def SetOverriddenParameterReadonly(self, paramId: ElementId) -> None: ...
    def SetOverriddenParameterModifiable(self, paramId: ElementId) -> None: ...
    def IsOverriddenParameterModifiable(self, paramId: ElementId) -> bool: ...
    def IsParameterOverridden(self, paramId: ElementId) -> bool: ...
    def IsRebarContainerParameter(self, paramId: ElementId) -> bool: ...
    def AddSharedParameterAsOverride(self, paramId: ElementId) -> None: ...
    def Dispose(self) -> None: ...


class RebarContainerType(ElementType):
    def CreateDefaultRebarContainerType(aDoc: Document) -> ElementId: ...
    def GetOrCreateRebarContainerType(aDoc: Document, name: str) -> ElementId: ...


class RebarCoupler(Element):
    @property
    def CouplerMark(self) -> str: ...
    @CouplerMark.setter
    def CouplerMark(self, couplerMark: str) -> None: ...
    def Create(doc: Document, typeId: ElementId, pFirstData: ReinforcementData, pSecondData: ReinforcementData) -> Tuple[RebarCoupler, RebarCouplerError]: ...
    def CouplerLinkTwoBars(self) -> bool: ...
    def GetCoupledReinforcementData(self) -> List[ReinforcementData]: ...
    def GetPointsForPlacement(self) -> List[XYZ]: ...
    def GetCouplerPositionTransform(self, couplerPositionIndex: int) -> Transform: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def GetCouplerQuantity(self) -> int: ...


class ReinforcementData:
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class RebarHostData:
    @property
    def IsValidObject(self) -> bool: ...
    def GetRebarHostData(host: Element) -> RebarHostData: ...
    @overload
    def IsValidHost(element: Element) -> bool: ...
    @overload
    def IsValidHost(self) -> bool: ...
    def GetExposedFaces(self) -> List[Reference]: ...
    def IsFaceExposed(self, face: Reference) -> bool: ...
    def GetCoverType(self, face: Reference) -> RebarCoverType: ...
    def SetCoverType(self, face: Reference, coverType: RebarCoverType) -> None: ...
    def GetCommonCoverType(self) -> RebarCoverType: ...
    def SetCommonCoverType(self, coverType: RebarCoverType) -> None: ...
    def GetRebarsInHost(self) -> List[Rebar]: ...
    def GetAreaReinforcementsInHost(self) -> List[AreaReinforcement]: ...
    def GetPathReinforcementsInHost(self) -> List[PathReinforcement]: ...
    def GetFabricSheetsInHost(self) -> List[FabricSheet]: ...
    def GetFabricAreasInHost(self) -> List[FabricArea]: ...
    def GetRebarContainersInHost(self) -> List[RebarContainer]: ...
    def Dispose(self) -> None: ...


class RebarInSystem(Element):
    @property
    def SystemId(self) -> ElementId: ...
    @property
    def ScheduleMark(self) -> str: ...
    @ScheduleMark.setter
    def ScheduleMark(self, scheduleMark: str) -> None: ...
    @property
    def Normal(self) -> XYZ: ...
    @property
    def BarsOnNormalSide(self) -> bool: ...
    @property
    def ArrayLength(self) -> float: ...
    @property
    def Quantity(self) -> int: ...
    @property
    def MaxSpacing(self) -> float: ...
    @property
    def LayoutRule(self) -> RebarLayoutRule: ...
    @property
    def TotalLength(self) -> float: ...
    @property
    def Volume(self) -> float: ...
    @property
    def RebarShapeId(self) -> ElementId: ...
    @property
    def NumberOfBarPositions(self) -> int: ...
    def GetCenterlineCurves(self, adjustForSelfIntersection: bool, suppressHooks: bool, suppressBendRadius: bool) -> List[Curve]: ...
    def GetDistributionPath(self) -> Line: ...
    def GetBarPositionTransform(self, barPositionIndex: int) -> Transform: ...
    def GetReinforcementRoundingManager(self) -> RebarRoundingManager: ...
    def SetBarHiddenStatus(self, view: View, barIndex: int, hide: bool) -> None: ...
    def IsBarHidden(self, view: View, barIndex: int) -> bool: ...
    def IsRebarInSection(self, dBView: View) -> bool: ...
    def HasPresentationOverrides(self, dBView: View) -> bool: ...
    def SetPresentationMode(self, dBView: View, presentationMode: RebarPresentationMode) -> None: ...
    def GetPresentationMode(self, dBView: View) -> RebarPresentationMode: ...
    def FindMatchingPredefinedPresentationMode(self, dBView: View) -> RebarPresentationMode: ...
    def ClearPresentationMode(self, dBView: View) -> None: ...
    def CanApplyPresentationMode(self, dBView: View) -> bool: ...
    def GetHostId(self) -> ElementId: ...
    def IsUnobscuredInView(self, view: View) -> bool: ...
    def SetUnobscuredInView(self, view: View, unobscured: bool) -> None: ...
    def IsSolidInView(self, view: View3D) -> bool: ...
    def SetSolidInView(self, view: View3D, solid: bool) -> None: ...
    def GetBendData(self) -> RebarBendData: ...
    def GetHookTypeId(self, end: int) -> ElementId: ...
    def DoesBarExistAtPosition(self, barPosition: int) -> bool: ...


class RebarReinforcementData(ReinforcementData):
    @property
    def RebarId(self) -> ElementId: ...
    @RebarId.setter
    def RebarId(self, rebarId: ElementId) -> None: ...
    @property
    def End(self) -> int: ...
    @End.setter
    def End(self, end: int) -> None: ...
    def Create(rebarId: ElementId, iEnd: int) -> RebarReinforcementData: ...


class RebarShapeDefinition:
    @property
    def Complete(self) -> bool: ...
    @property
    def IsPlanar(self) -> bool: ...
    @property
    def IsValidObject(self) -> bool: ...
    def AddParameter(self, paramId: ElementId, defaultValue: float) -> None: ...
    def AddFormulaParameter(self, paramId: ElementId, formula: str) -> None: ...
    def GetParameters(self) -> List[ElementId]: ...
    def HasParameter(self, paramId: ElementId) -> bool: ...
    def GetParameterDefaultValue(self, paramId: ElementId) -> float: ...
    def GetParameterFormula(self, paramId: ElementId) -> str: ...
    def SetParameterDefaultValue(self, paramId: ElementId, value: float) -> None: ...
    def SetParameterFormula(self, paramId: ElementId, formula: str) -> None: ...
    def RemoveParameter(self, paramId: ElementId) -> None: ...
    def CheckDefaultParameterValues(self, bendRadius: float, barDiameter: float) -> bool: ...
    def Dispose(self) -> None: ...


class RebarShapeMultiplanarDefinition:
    def __init__(self, outOfPlaneBendDiameter: float): ...
    @property
    def IsDuplicateShapePresent(self) -> bool: ...
    @property
    def IsStartConnectorPresent(self) -> bool: ...
    @property
    def IsEndConnectorPresent(self) -> bool: ...
    @property
    def OutOfPlaneBendDiameter(self) -> float: ...
    @OutOfPlaneBendDiameter.setter
    def OutOfPlaneBendDiameter(self, outOfPlaneBendDiameter: float) -> None: ...
    @property
    def DepthParamId(self) -> ElementId: ...
    @DepthParamId.setter
    def DepthParamId(self, depthParamId: ElementId) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def SetPresenceOfSegments(self, isDuplicateShapePresent: bool, isStartConnectorPresent: bool, isEndConnectorPresent: bool) -> None: ...
    def Dispose(self) -> None: ...


class RebarShapeConstraint:
    @property
    def IsValidObject(self) -> bool: ...
    def GetParamId(self) -> ElementId: ...
    def Dispose(self) -> None: ...


class RebarShapeConstraint180DegreeBendArcLength(RebarShapeConstraint):
    def __init__(self, paramId: ElementId): ...


class RebarShapeConstraint180DegreeBendRadius(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, refType: RebarShapeArcReferenceType): ...
    @property
    def ArcReferenceType(self) -> RebarShapeArcReferenceType: ...


class RebarShapeConstraint180DegreeDefaultBend(RebarShapeConstraint):
    def __init__(self): ...


class RebarShapeConstraintAngleFromFixedDir(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, sign: int, direction: UV): ...
    @property
    def Sign(self) -> int: ...
    @Sign.setter
    def Sign(self, sign: int) -> None: ...
    @property
    def Direction(self) -> UV: ...
    @Direction.setter
    def Direction(self, direction: UV) -> None: ...


class RebarShapeConstraintArcLength(RebarShapeConstraint):
    def __init__(self, paramId: ElementId): ...


class RebarShapeConstraintChordLength(RebarShapeConstraint):
    def __init__(self, paramId: ElementId): ...


class RebarShapeConstraintCircumference(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, refType: RebarShapeArcReferenceType): ...
    @property
    def ArcReferenceType(self) -> RebarShapeArcReferenceType: ...


class RebarShapeConstraintDiameter(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, refType: RebarShapeArcReferenceType): ...
    @property
    def ArcReferenceType(self) -> RebarShapeArcReferenceType: ...


class RebarShapeConstraintSegmentLength(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, refType0: RebarShapeSegmentEndReferenceType, refType1: RebarShapeSegmentEndReferenceType): ...
    def GetSegmentEndReferenceType(self, index: int) -> RebarShapeSegmentEndReferenceType: ...


class RebarShapeConstraintFixedSegmentDir(RebarShapeConstraint):
    def __init__(self, dir: UV): ...
    @property
    def Direction(self) -> UV: ...
    @Direction.setter
    def Direction(self, direction: UV) -> None: ...


class RebarShapeConstraintProjectedSegmentLength(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, direction: UV, tripleProductSign: int, refType0: RebarShapeSegmentEndReferenceType, refType1: RebarShapeSegmentEndReferenceType): ...
    @property
    def TripleProductSign(self) -> int: ...
    @property
    def Direction(self) -> UV: ...
    def GetSegmentEndReferenceType(self, index: int) -> RebarShapeSegmentEndReferenceType: ...


class RebarShapeConstraintRadius(RebarShapeConstraint):
    def __init__(self, paramId: ElementId, refType: RebarShapeArcReferenceType): ...
    @property
    def ArcReferenceType(self) -> RebarShapeArcReferenceType: ...


class RebarShapeConstraintSagittaLength(RebarShapeConstraint):
    def __init__(self, paramId: ElementId): ...


class RebarShapeDefinitionByArc(RebarShapeDefinition):
    @overload
    def __init__(self, doc: Document, height: float, pitch: float, baseFinishingTurns: int, topFinishingTurns: int): ...
    @overload
    def __init__(self, doc: Document, type: RebarShapeDefinitionByArcType): ...
    @property
    def Type(self) -> RebarShapeDefinitionByArcType: ...
    @Type.setter
    def Type(self, type: RebarShapeDefinitionByArcType) -> None: ...
    def GetConstraints(self) -> List[RebarShapeConstraint]: ...
    def SetConstraints(self, constraints: List[RebarShapeConstraint]) -> None: ...
    def SetArcTypeSpiral(self, height: float, pitch: float, baseFinishingTurns: int, topFinishingTurns: int) -> None: ...
    def AddConstraintArcLength(self, paramId: ElementId) -> None: ...
    def AddConstraintRadius(self, paramId: ElementId, arcRefType: RebarShapeArcReferenceType) -> None: ...
    def AddConstraintDiameter(self, paramId: ElementId, arcRefType: RebarShapeArcReferenceType) -> None: ...
    def AddConstraintCircumference(self, paramId: ElementId, arcRefType: RebarShapeArcReferenceType) -> None: ...
    def AddConstraintSagittaLength(self, paramId: ElementId) -> None: ...
    def AddConstraintChordLength(self, paramId: ElementId) -> None: ...


class RebarShapeDefinitionBySegments(RebarShapeDefinition):
    def __init__(self, doc: Document, numberOfSegments: int): ...
    @property
    def NumberOfSegments(self) -> int: ...
    @property
    def NumberOfVertices(self) -> int: ...
    @property
    def MajorSegmentIndex(self) -> int: ...
    @MajorSegmentIndex.setter
    def MajorSegmentIndex(self, majorSegmentIndex: int) -> None: ...
    def GetSegment(self, segmentIndex: int) -> RebarShapeSegment: ...
    def GetVertex(self, vertexIndex: int) -> RebarShapeVertex: ...
    def SetSegmentFixedDirection(self, iSegment: int, vecCoordX: float, vecCoordY: float) -> None: ...
    def SetSegmentVariableDirection(self, iSegment: int) -> None: ...
    def AddConstraintParallelToSegment(self, iSegment: int, paramId: ElementId, measureToOutsideOfBend0: bool, measureToOutsideOfBend1: bool) -> None: ...
    def AddConstraintToSegment(self, iSegment: int, paramId: ElementId, constraintDirCoordX: float, constraintDirCoordY: float, signOfZCoordOfCrossProductOfConstraintDirBySegmentDir: int, measureToOutsideOfBend0: bool, measureToOutsideOfBend1: bool) -> None: ...
    @overload
    def SetSegmentAs180DegreeBend(self, iSegment: int, paramId: ElementId, measureToOutsideOfBend: bool) -> None: ...
    @overload
    def SetSegmentAs180DegreeBend(self, iSegment: int) -> None: ...
    def RemoveParameterFromSegment(self, iSegment: int, paramId: ElementId) -> None: ...
    def AddBendDefaultRadius(self, vertexIndex: int, turn: RebarShapeVertexTurn, angle: RebarShapeBendAngle) -> None: ...
    def AddBendVariableRadius(self, vertexIndex: int, turn: RebarShapeVertexTurn, angle: RebarShapeBendAngle, paramId: ElementId, measureIncludingBarThickness: bool) -> None: ...
    def AddListeningDimensionSegmentToSegment(self, paramId: ElementId, constraintDirCoordX: float, constraintDirCoordY: float, iSegment0: int, iSegment1: int) -> None: ...
    def AddListeningDimensionBendToBend(self, paramId: ElementId, constraintDirCoordX: float, constraintDirCoordY: float, iSegment0: int, iEnd0: int, iSegment1: int, iEnd1: int) -> None: ...
    def AddListeningDimensionSegmentToBend(self, paramId: ElementId, constraintDirCoordX: float, constraintDirCoordY: float, iSegment0: int, iSegment1: int, iEnd1: int) -> None: ...


class RebarShapeSegment:
    @property
    def IsValidObject(self) -> bool: ...
    def GetConstraints(self) -> List[RebarShapeConstraint]: ...
    def SetConstraints(self, constraints: List[RebarShapeConstraint]) -> None: ...
    def Dispose(self) -> None: ...


class RebarShapeVertex:
    @property
    def Turn(self) -> RebarShapeVertexTurn: ...
    @Turn.setter
    def Turn(self, turn: RebarShapeVertexTurn) -> None: ...
    @property
    def BendAngle(self) -> RebarShapeBendAngle: ...
    @BendAngle.setter
    def BendAngle(self, angle: RebarShapeBendAngle) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def GetConstraints(self) -> List[RebarShapeConstraint]: ...
    def SetConstraints(self, constraints: List[RebarShapeConstraint]) -> None: ...
    def Dispose(self) -> None: ...


class RebarSystemSpanSymbol(IndependentTag):
    def Create(document: Document, viewId: ElementId, hostId: LinkElementId, point: XYZ, symbolId: ElementId) -> RebarSystemSpanSymbol: ...


class ReinforcementSettings(Element):
    @property
    def HostStructuralRebar(self) -> bool: ...
    @HostStructuralRebar.setter
    def HostStructuralRebar(self, hostRebarFlg: bool) -> None: ...
    @property
    def RebarShapeDefinesHooks(self) -> bool: ...
    @RebarShapeDefinesHooks.setter
    def RebarShapeDefinesHooks(self, value: bool) -> None: ...
    @property
    def RebarShapeDefinesEndTreatments(self) -> bool: ...
    @RebarShapeDefinesEndTreatments.setter
    def RebarShapeDefinesEndTreatments(self, value: bool) -> None: ...
    @property
    def RebarPresentationInView(self) -> RebarPresentationMode: ...
    @RebarPresentationInView.setter
    def RebarPresentationInView(self, value: RebarPresentationMode) -> None: ...
    @property
    def RebarPresentationInSection(self) -> RebarPresentationMode: ...
    @RebarPresentationInSection.setter
    def RebarPresentationInSection(self, value: RebarPresentationMode) -> None: ...
    @property
    def NumberVaryingLengthRebarsIndividually(self) -> bool: ...
    @NumberVaryingLengthRebarsIndividually.setter
    def NumberVaryingLengthRebarsIndividually(self, value: bool) -> None: ...
    @property
    def RebarVaryingLengthNumberSuffix(self) -> str: ...
    @RebarVaryingLengthNumberSuffix.setter
    def RebarVaryingLengthNumberSuffix(self, suffix: str) -> None: ...
    def GetReinforcementSettings(cda: Document) -> ReinforcementSettings: ...
    def IsEqual(self, other: ReinforcementSettings) -> bool: ...
    def GetRebarRoundingManager(self) -> RebarRoundingManager: ...
    def GetFabricRoundingManager(self) -> FabricRoundingManager: ...
    def GetReinforcementAbbreviationTags(self, objectType: ReinforcementAbbreviationObjectType) -> List[ReinforcementAbbreviationTag]: ...
    def GetReinforcementAbbreviationTag(self, tagType: ReinforcementAbbreviationTagType) -> str: ...
    def SetReinforcementAbbreviationTag(self, tagType: ReinforcementAbbreviationTagType, abbreviationTag: str) -> None: ...


class ReinforcementAbbreviationTag:
    def __init__(self, typeTag: ReinforcementAbbreviationTagType, abbreviationTag: str): ...
    @property
    def TypeTag(self) -> ReinforcementAbbreviationTagType: ...
    @property
    def AbbreviationTag(self) -> str: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class RebarHandleType:
    RebarPlane = 0
    StartOfBar = 1
    EndOfBar = 2
    Edge = 3
    OutOfPlaneExtent = 4
    CustomHandle = 5
    Undefined = -1


class RebarConstraintType:
    FixedDistanceToHostFace = 0
    ToCover = 1
    ToOtherRebar = 2


class TargetRebarConstraintType:
    RebarPlane = 0
    StartOfBar = 1
    EndOfBar = 2
    Edge = 3
    OutOfPlaneExtent = 4
    BarBend = 5
    HookBend = 6


class RebarConstraintTargetHostFaceType:
    FaceWithTagId = 0
    Top = 1
    Bottom = 2
    End0 = 3
    End1 = 4
    Side0 = 5
    Side1 = 6


class RebarCouplerError:
    ValidationSuccessfuly = 0
    IncorrectInputData = 1
    DifferentLayout = 2
    BarsNotTouching = 3
    IncorrectEndTreatmentHook = 4
    IncorrectEndTreatmentCoupler = 5
    BarSegementsAreNotParallel = 6
    BarSegmentsAreNotOnSameLine = 7
    InconsistentShape = 8
    InvalidDiameter = 9
    CurvesOtherThanLine = 12
    BarSegmentSmallerThanEngagement = 13
    VaryingDistanceBetweenDistributionsBars = 14
    ArcsHaveDifferentRadii = 15
    ArcsHaveDifferentCenters = 16
    ArcToStraightSegment = 17


class RebarShapeArcReferenceType:
    Centerline = 0
    External = 1
    Internal = -1


class RebarShapeBendAngle:
    Acute = 1
    Right = 2
    Obtuse = 3


class RebarShapeSegmentEndReferenceType:
    Straight = 0
    Exterior = 1


class RebarShapeDefinitionByArcType:
    Arc = 0
    LappedCircle = 1
    Spiral = 2


class RebarShapeVertexTurn:
    Default = 0
    Left = 1
    Right = -1


class ReinforcementAbbreviationTagType:
    AreaReinforcementTopMajor = 0
    AreaReinforcementTopMinor = 1
    AreaReinforcementBottomMajor = 2
    AreaReinforcementBottomMinor = 3
    AreaReinforcementInteriorMajor = 4
    AreaReinforcementInteriorMinor = 5
    AreaReinforcementExteriorMajor = 6
    AreaReinforcementExteriorMinor = 7
    AreaReinforcementLayerEachWay = 8
    AreaReinforcementLayerEachFace = 9
    PathReinforcementTop = 10
    PathReinforcementBottom = 11
    PathReinforcementInterior = 12
    PathReinforcementExterior = 13
    PathReinforcementAlternating = 14
    PathReinforcementAlternatingBarOffset = 15


class ReinforcementAbbreviationObjectType:
    Area = 0
    Path = 1


class ConnectionInputPointInfo:
    @overload
    def __init__(self, ptSelectionText: str, inputMemberIndex: int, restrictionType: str): ...
    @overload
    def __init__(self): ...
    @property
    def PointSelectionText(self) -> str: ...
    @PointSelectionText.setter
    def PointSelectionText(self, pointSelectionText: str) -> None: ...
    @property
    def InputMemberIndex(self) -> int: ...
    @InputMemberIndex.setter
    def InputMemberIndex(self, inputMemberIndex: int) -> None: ...
    @property
    def RestrictionType(self) -> str: ...
    @RestrictionType.setter
    def RestrictionType(self, restrictionType: str) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class StructuralConnectionHandlerType(ElementType):
    @property
    def ConnectionGuid(self) -> Guid: ...
    def IsCustom(self) -> bool: ...
    def IsGeneric(self) -> bool: ...
    def IsDetailed(self) -> bool: ...
    def CreateDefaultStructuralConnectionHandlerType(pADoc: Document) -> ElementId: ...
    def GetDefaultConnectionHandlerType(pADoc: Document) -> ElementId: ...
    @overload
    def Create(pADoc: Document, name: str, guid: Guid, familyName: str, categoryId: ElementId, inputPointsInfo: List[ConnectionInputPointInfo]) -> StructuralConnectionHandlerType: ...
    @overload
    def Create(pADoc: Document, name: str, guid: Guid, familyName: str, categoryId: ElementId) -> StructuralConnectionHandlerType: ...
    @overload
    def Create(pADoc: Document, name: str, guid: Guid, familyName: str) -> StructuralConnectionHandlerType: ...
    def AddElementsToCustomConnection(structuralConnectionHandler: StructuralConnectionHandler, references: List[Reference]) -> None: ...
    def RemoveMainSubelementsFromCustomConnection(structuralConnectionHandler: StructuralConnectionHandler, subelements: List[Subelement]) -> None: ...
    def IsTypeNameValidForCustomConnection(document: Document, typeName: str) -> bool: ...
    def FindGenericConnectionType(doc: Document) -> ElementId: ...


class StructuralConnectionApprovalType(ElementType):
    def Create(doc: Document, name: str) -> StructuralConnectionApprovalType: ...
    def GetAllStructuralConnectionApprovalTypes(cda: Document) -> Tuple[ICollection]: ...
    def IsValidApprovalTypeName(doc: Document, name: str) -> bool: ...


class ConnectionInputPoint:
    @overload
    def __init__(self, pt: XYZ): ...
    @overload
    def __init__(self, pt: XYZ, uid: Guid): ...
    @overload
    def __init__(self): ...
    @property
    def Point(self) -> XYZ: ...
    @Point.setter
    def Point(self, point: XYZ) -> None: ...
    @property
    def Id(self) -> Guid: ...
    @Id.setter
    def Id(self, id: Guid) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    def Dispose(self) -> None: ...


class StructuralConnectionHandler(Element):
    @property
    def SingleElementEndIndex(self) -> int: ...
    @SingleElementEndIndex.setter
    def SingleElementEndIndex(self, singleElementEndIndex: int) -> None: ...
    @property
    def CodeCheckingStatus(self) -> StructuralConnectionCodeCheckingStatus: ...
    @CodeCheckingStatus.setter
    def CodeCheckingStatus(self, codeCheckingStatus: StructuralConnectionCodeCheckingStatus) -> None: ...
    @property
    def ApprovalTypeId(self) -> ElementId: ...
    @ApprovalTypeId.setter
    def ApprovalTypeId(self, id: ElementId) -> None: ...
    @property
    def OverrideTypeParams(self) -> bool: ...
    @OverrideTypeParams.setter
    def OverrideTypeParams(self, overrideTypeParams: bool) -> None: ...
    @overload
    def Create(document: Document, idsToConnect: List[ElementId], typeId: ElementId, additionalInputPoints: List[ConnectionInputPoint]) -> StructuralConnectionHandler: ...
    @overload
    def Create(document: Document, elementIds: List[ElementId], typeName: str) -> StructuralConnectionHandler: ...
    @overload
    def Create(document: Document, idsToConnect: List[ElementId], typeId: ElementId) -> StructuralConnectionHandler: ...
    @overload
    def Create(document: Document, idsToConnect: List[ElementId]) -> StructuralConnectionHandler: ...
    def CreateGenericConnection(document: Document, idsToConnect: List[ElementId]) -> StructuralConnectionHandler: ...
    def GetConnectedElementIds(self) -> List[ElementId]: ...
    def AddElementIds(self, elemIds: List[ElementId]) -> None: ...
    def AddReferences(self, document: Document, picks: List[Reference]) -> None: ...
    def RemoveElementIds(self, elemIds: List[ElementId]) -> None: ...
    def RemoveReferences(self, picks: List[Reference]) -> None: ...
    def GetOrigin(self) -> XYZ: ...
    def IsDetailed(self) -> bool: ...
    def IsCustom(self) -> bool: ...
    def SetDefaultElementOrder(self) -> None: ...
    def GetInputReferences(self) -> List[Reference]: ...
    def GetInputPoints(self) -> List[ConnectionInputPoint]: ...
    def GetInputPoint(self, id: Guid) -> ConnectionInputPoint: ...


class StructuralConnectionSettings(Element):
    @property
    def IncludeWarningControls(self) -> bool: ...
    @IncludeWarningControls.setter
    def IncludeWarningControls(self, includeWarningControls: bool) -> None: ...
    def GetStructuralConnectionSettings(document: Document) -> StructuralConnectionSettings: ...


class StructuralConnectionType(ElementType):
    @property
    def ApplyTo(self) -> StructuralConnectionApplyTo: ...
    def Create(doc: Document, applyTo: StructuralConnectionApplyTo, name: str, familySymbolId: ElementId) -> StructuralConnectionType: ...
    def GetAllStructuralConnectionTypeIds(cda: Document) -> Tuple[ICollection]: ...
    def GetFamilySymbolId(self) -> ElementId: ...
    def SetFamilySymbolId(self, familySymbolId: ElementId) -> None: ...
    def ValidFamilySymbolId(doc: Document, applyTo: StructuralConnectionApplyTo, familySymbolId: ElementId) -> bool: ...


class StructuralSettings(Element):
    @property
    def BraceParallelLineOffset(self) -> float: ...
    @BraceParallelLineOffset.setter
    def BraceParallelLineOffset(self, braceParallelLineOffset: float) -> None: ...
    @property
    def SymbolicCutbackForBeamAndTruss(self) -> float: ...
    @SymbolicCutbackForBeamAndTruss.setter
    def SymbolicCutbackForBeamAndTruss(self, symbolicCutbackForBeamAndTruss: float) -> None: ...
    @property
    def SymbolicCutbackForBrace(self) -> float: ...
    @SymbolicCutbackForBrace.setter
    def SymbolicCutbackForBrace(self, symbolicCutbackForBrace: float) -> None: ...
    @property
    def AnalyticalLinkAutofixTolerance(self) -> float: ...
    @AnalyticalLinkAutofixTolerance.setter
    def AnalyticalLinkAutofixTolerance(self, analyticalLinkAutofixTolerance: float) -> None: ...
    @property
    def SymbolicCutbackForColumn(self) -> float: ...
    @SymbolicCutbackForColumn.setter
    def SymbolicCutbackForColumn(self, symbolicCutbackForColumn: float) -> None: ...
    @property
    def AnalyticalModelSupportDistanceTolerance(self) -> float: ...
    @AnalyticalModelSupportDistanceTolerance.setter
    def AnalyticalModelSupportDistanceTolerance(self, analyticalModelSupportDistanceTolerance: float) -> None: ...
    @property
    def AnalyticalModelDiscrepancyTolerance(self) -> float: ...
    @AnalyticalModelDiscrepancyTolerance.setter
    def AnalyticalModelDiscrepancyTolerance(self, analyticalModelDiscrepancyTolerance: float) -> None: ...
    @property
    def BoundaryConditionAreaAndLineSymbolSpacing(self) -> float: ...
    @BoundaryConditionAreaAndLineSymbolSpacing.setter
    def BoundaryConditionAreaAndLineSymbolSpacing(self, boundaryConditionAreaAndLineSymbolSpacing: float) -> None: ...
    @property
    def BraceAboveSymbol(self) -> ElementId: ...
    @BraceAboveSymbol.setter
    def BraceAboveSymbol(self, braceAboveSymbol: ElementId) -> None: ...
    @property
    def BraceBelowSymbol(self) -> ElementId: ...
    @BraceBelowSymbol.setter
    def BraceBelowSymbol(self, braceBelowSymbol: ElementId) -> None: ...
    @property
    def KickerBraceSymbol(self) -> ElementId: ...
    @KickerBraceSymbol.setter
    def KickerBraceSymbol(self, kickerBraceSymbol: ElementId) -> None: ...
    @property
    def BoundaryConditionFamilySymbolFixed(self) -> ElementId: ...
    @BoundaryConditionFamilySymbolFixed.setter
    def BoundaryConditionFamilySymbolFixed(self, boundaryConditionFamilySymbolFixed: ElementId) -> None: ...
    @property
    def BoundaryConditionFamilySymbolPinned(self) -> ElementId: ...
    @BoundaryConditionFamilySymbolPinned.setter
    def BoundaryConditionFamilySymbolPinned(self, boundaryConditionFamilySymbolPinned: ElementId) -> None: ...
    @property
    def BoundaryConditionFamilySymbolRoller(self) -> ElementId: ...
    @BoundaryConditionFamilySymbolRoller.setter
    def BoundaryConditionFamilySymbolRoller(self, boundaryConditionFamilySymbolRoller: ElementId) -> None: ...
    @property
    def BoundaryConditionFamilySymbolUserDefined(self) -> ElementId: ...
    @BoundaryConditionFamilySymbolUserDefined.setter
    def BoundaryConditionFamilySymbolUserDefined(self, boundaryConditionFamilySymbolUserDefined: ElementId) -> None: ...
    @property
    def ShowBraceAbove(self) -> bool: ...
    @ShowBraceAbove.setter
    def ShowBraceAbove(self, showBraceAbove: bool) -> None: ...
    @property
    def ShowBraceBelow(self) -> bool: ...
    @ShowBraceBelow.setter
    def ShowBraceBelow(self, showBraceBelow: bool) -> None: ...
    @property
    def AnalyticalModelAutoCheckMemberSupports(self) -> bool: ...
    @AnalyticalModelAutoCheckMemberSupports.setter
    def AnalyticalModelAutoCheckMemberSupports(self, analyticalModelAutoCheckMemberSupports: bool) -> None: ...
    @property
    def AnalyticalModelAutoCheckConsistency(self) -> bool: ...
    @AnalyticalModelAutoCheckConsistency.setter
    def AnalyticalModelAutoCheckConsistency(self, analyticalModelAutoCheckConsistency: bool) -> None: ...
    @property
    def AnalyticalModelCheckCircularReferences(self) -> bool: ...
    @AnalyticalModelCheckCircularReferences.setter
    def AnalyticalModelCheckCircularReferences(self, analyticalModelCheckCircularReferences: bool) -> None: ...
    @property
    def AnalyticalModelCheckDiscrepancy(self) -> bool: ...
    @AnalyticalModelCheckDiscrepancy.setter
    def AnalyticalModelCheckDiscrepancy(self, analyticalModelCheckDiscrepancy: bool) -> None: ...
    @property
    def AnalyticalModelCheckSupportDistance(self) -> bool: ...
    @AnalyticalModelCheckSupportDistance.setter
    def AnalyticalModelCheckSupportDistance(self, analyticalModelCheckSupportDistance: bool) -> None: ...
    @property
    def AnalyticalModelCheckBeamSlabDistance(self) -> bool: ...
    @AnalyticalModelCheckBeamSlabDistance.setter
    def AnalyticalModelCheckBeamSlabDistance(self, analyticalModelCheckBeamSlabDistance: bool) -> None: ...
    @property
    def AnalyticalModelCheckInstability(self) -> bool: ...
    @AnalyticalModelCheckInstability.setter
    def AnalyticalModelCheckInstability(self, analyticalModelCheckInstability: bool) -> None: ...
    @property
    def AnalyticalModelCheckAdjustment(self) -> bool: ...
    @AnalyticalModelCheckAdjustment.setter
    def AnalyticalModelCheckAdjustment(self, analyticalModelCheckAdjustment: bool) -> None: ...
    @property
    def DifferentiateAnalyticalEnds(self) -> bool: ...
    @DifferentiateAnalyticalEnds.setter
    def DifferentiateAnalyticalEnds(self, differentiateAnalyticalEnds: bool) -> None: ...
    @property
    def CheckAnalyticalModelAsset(self) -> bool: ...
    @CheckAnalyticalModelAsset.setter
    def CheckAnalyticalModelAsset(self, checkAnalyticalModelAsset: bool) -> None: ...
    @property
    def AnalyticalModelHorizontalAutofixTolerance(self) -> float: ...
    @AnalyticalModelHorizontalAutofixTolerance.setter
    def AnalyticalModelHorizontalAutofixTolerance(self, horizontalAutofixTolerance: float) -> None: ...
    @property
    def AnalyticalModelVerticalAutofixTolerance(self) -> float: ...
    @AnalyticalModelVerticalAutofixTolerance.setter
    def AnalyticalModelVerticalAutofixTolerance(self, verticalAutofixTolerance: float) -> None: ...
    def GetStructuralSettings(doc: Document) -> StructuralSettings: ...


class StructuralFramingUtils:
    def CanSetEndReference(familyInstance: FamilyInstance, end: int) -> bool: ...
    def IsEndReferenceValid(familyInstance: FamilyInstance, end: int, pick: Reference) -> bool: ...
    def RemoveEndReference(familyInstance: FamilyInstance, end: int) -> None: ...
    def GetEndReference(familyInstance: FamilyInstance, end: int) -> Reference: ...
    def SetEndReference(familyInstance: FamilyInstance, end: int, pick: Reference) -> None: ...
    def DisallowJoinAtEnd(familyInstance: FamilyInstance, end: int) -> None: ...
    def AllowJoinAtEnd(familyInstance: FamilyInstance, end: int) -> None: ...
    def IsJoinAllowedAtEnd(familyInstance: FamilyInstance, end: int) -> bool: ...
    def CanFlipEnds(familyInstance: FamilyInstance) -> bool: ...
    def FlipEnds(familyInstance: FamilyInstance) -> None: ...


class StructuralConnectionApplyTo:
    BeamsAndBraces = 0
    ColumnTop = 1
    ColumnBase = 2
    Connection = 3


class StructuralConnectionCodeCheckingStatus:
    NotCalculated = 0
    OkChecked = 1
    CheckingFailed = 2


class BracePlanRepresentation:
    ParallelLine = 1
    LineWithAngle = 2
