from typing import Tuple, Set, Iterable, List


class LanguageType:
    English_USA = 0
    German = 1
    Spanish = 2
    French = 3
    Italian = 4
    Dutch = 5
    Chinese_Simplified = 6
    Chinese_Traditional = 7
    Japanese = 8
    Korean = 9
    Russian = 10
    Czech = 11
    Polish = 12
    Hungarian = 13
    Brazilian_Portuguese = 14
    English_GB = 15
    Unknown = -1


class ProductType:
    Architecture = 0
    Structure = 1
    MEP = 2
    Revit = 3
    LT = 4
    Unknown = 5


class Application:
    def add_ApplicationInitialized(self, handler: EventHandler) -> None: ...
    def remove_ApplicationInitialized(self, handler: EventHandler) -> None: ...
    def add_DocumentChanged(self, handler: EventHandler) -> None: ...
    def remove_DocumentChanged(self, handler: EventHandler) -> None: ...
    def add_FailuresProcessing(self, handler: EventHandler) -> None: ...
    def remove_FailuresProcessing(self, handler: EventHandler) -> None: ...
    def add_DocumentSaving(self, handler: EventHandler) -> None: ...
    def remove_DocumentSaving(self, handler: EventHandler) -> None: ...
    def add_DocumentSaved(self, handler: EventHandler) -> None: ...
    def remove_DocumentSaved(self, handler: EventHandler) -> None: ...
    def add_DocumentSavingAs(self, handler: EventHandler) -> None: ...
    def remove_DocumentSavingAs(self, handler: EventHandler) -> None: ...
    def add_DocumentSavedAs(self, handler: EventHandler) -> None: ...
    def remove_DocumentSavedAs(self, handler: EventHandler) -> None: ...
    def add_DocumentPrinting(self, handler: EventHandler) -> None: ...
    def remove_DocumentPrinting(self, handler: EventHandler) -> None: ...
    def add_DocumentPrinted(self, handler: EventHandler) -> None: ...
    def remove_DocumentPrinted(self, handler: EventHandler) -> None: ...
    def add_ViewPrinting(self, handler: EventHandler) -> None: ...
    def remove_ViewPrinting(self, handler: EventHandler) -> None: ...
    def add_ViewPrinted(self, handler: EventHandler) -> None: ...
    def remove_ViewPrinted(self, handler: EventHandler) -> None: ...
    def add_DocumentClosing(self, handler: EventHandler) -> None: ...
    def remove_DocumentClosing(self, handler: EventHandler) -> None: ...
    def add_DocumentClosed(self, handler: EventHandler) -> None: ...
    def remove_DocumentClosed(self, handler: EventHandler) -> None: ...
    def add_DocumentCreating(self, handler: EventHandler) -> None: ...
    def remove_DocumentCreating(self, handler: EventHandler) -> None: ...
    def add_DocumentCreated(self, handler: EventHandler) -> None: ...
    def remove_DocumentCreated(self, handler: EventHandler) -> None: ...
    def add_FileImporting(self, handler: EventHandler) -> None: ...
    def remove_FileImporting(self, handler: EventHandler) -> None: ...
    def add_FileImported(self, handler: EventHandler) -> None: ...
    def remove_FileImported(self, handler: EventHandler) -> None: ...
    def add_FileExporting(self, handler: EventHandler) -> None: ...
    def remove_FileExporting(self, handler: EventHandler) -> None: ...
    def add_FileExported(self, handler: EventHandler) -> None: ...
    def remove_FileExported(self, handler: EventHandler) -> None: ...
    def add_ViewExporting(self, handler: EventHandler) -> None: ...
    def remove_ViewExporting(self, handler: EventHandler) -> None: ...
    def add_ViewExported(self, handler: EventHandler) -> None: ...
    def remove_ViewExported(self, handler: EventHandler) -> None: ...
    def add_ViewsExportingByContext(self, handler: EventHandler) -> None: ...
    def remove_ViewsExportingByContext(self, handler: EventHandler) -> None: ...
    def add_ViewsExportedByContext(self, handler: EventHandler) -> None: ...
    def remove_ViewsExportedByContext(self, handler: EventHandler) -> None: ...
    def add_DocumentOpening(self, handler: EventHandler) -> None: ...
    def remove_DocumentOpening(self, handler: EventHandler) -> None: ...
    def add_DocumentOpened(self, handler: EventHandler) -> None: ...
    def remove_DocumentOpened(self, handler: EventHandler) -> None: ...
    def add_DocumentSynchronizingWithCentral(self, handler: EventHandler) -> None: ...
    def remove_DocumentSynchronizingWithCentral(self, handler: EventHandler) -> None: ...
    def add_DocumentSynchronizedWithCentral(self, handler: EventHandler) -> None: ...
    def remove_DocumentSynchronizedWithCentral(self, handler: EventHandler) -> None: ...
    def add_LinkedResourceOpening(self, handler: EventHandler) -> None: ...
    def remove_LinkedResourceOpening(self, handler: EventHandler) -> None: ...
    def add_LinkedResourceOpened(self, handler: EventHandler) -> None: ...
    def remove_LinkedResourceOpened(self, handler: EventHandler) -> None: ...
    def add_WorksharedOperationProgressChanged(self, handler: EventHandler) -> None: ...
    def remove_WorksharedOperationProgressChanged(self, handler: EventHandler) -> None: ...
    def add_ProgressChanged(self, handler: EventHandler) -> None: ...
    def remove_ProgressChanged(self, handler: EventHandler) -> None: ...
    def add_DocumentWorksharingEnabled(self, handler: EventHandler) -> None: ...
    def remove_DocumentWorksharingEnabled(self, handler: EventHandler) -> None: ...
    def add_FamilyLoadingIntoDocument(self, handler: EventHandler) -> None: ...
    def remove_FamilyLoadingIntoDocument(self, handler: EventHandler) -> None: ...
    def add_FamilyLoadedIntoDocument(self, handler: EventHandler) -> None: ...
    def remove_FamilyLoadedIntoDocument(self, handler: EventHandler) -> None: ...
    def add_ElementTypeDuplicating(self, handler: EventHandler) -> None: ...
    def remove_ElementTypeDuplicating(self, handler: EventHandler) -> None: ...
    def add_ElementTypeDuplicated(self, handler: EventHandler) -> None: ...
    def remove_ElementTypeDuplicated(self, handler: EventHandler) -> None: ...
    def add_DocumentReloadingLatest(self, handler: EventHandler) -> None: ...
    def remove_DocumentReloadingLatest(self, handler: EventHandler) -> None: ...
    def add_DocumentReloadedLatest(self, handler: EventHandler) -> None: ...
    def remove_DocumentReloadedLatest(self, handler: EventHandler) -> None: ...
    def Dispose(self) -> None: ...
    @property
    def Documents(self) -> DocumentSet: ...
    @overload
    def NewProjectDocument(self, unitSystem: UnitSystem) -> Document: ...
    @overload
    def NewProjectDocument(self, templateFileName: str) -> Document: ...
    def NewProjectTemplateDocument(self, templateFilename: str) -> Document: ...
    def NewFamilyDocument(self, templateFileName: str) -> Document: ...
    def OpenBuildingComponentDocument(self, fileName: str) -> Document: ...
    def ExtractPartAtomFromFamilyFile(self, familyFilePath: str, xmlFilePath: str) -> None: ...
    @property
    def RecordingJournalFilename(self) -> str: ...
    @property
    def Create(self) -> Application: ...
    def OpenSharedParameterFile(self) -> DefinitionFile: ...
    @property
    def VersionName(self) -> str: ...
    @property
    def VersionNumber(self) -> str: ...
    @property
    def VersionBuild(self) -> str: ...
    @property
    def Cities(self) -> CitySet: ...
    @property
    def Language(self) -> LanguageType: ...
    @property
    def Product(self) -> ProductType: ...
    @property
    def SharedParametersFilename(self) -> str: ...
    @SharedParametersFilename.setter
    def SharedParametersFilename(self, filename: str) -> None: ...
    @property
    def ActiveAddInId(self) -> AddInId: ...
    @property
    def Username(self) -> str: ...
    @property
    def SubVersionNumber(self) -> str: ...
    @property
    def FamilyTemplatePath(self) -> str: ...
    @property
    def PointCloudsRootPath(self) -> str: ...
    @property
    def SystemsAnalysisWorkfilesRootPath(self) -> str: ...
    @property
    def DefaultProjectTemplate(self) -> str: ...
    @property
    def DefaultIFCProjectTemplate(self) -> str: ...
    @property
    def ExportIFCCategoryTable(self) -> str: ...
    @property
    def ImportIFCCategoryTable(self) -> str: ...
    @property
    def ShowGraphicalWarningDuctDisconnects(self) -> bool: ...
    @ShowGraphicalWarningDuctDisconnects.setter
    def ShowGraphicalWarningDuctDisconnects(self, bShow: bool) -> None: ...
    @property
    def ShowGraphicalWarningPipeDisconnects(self) -> bool: ...
    @ShowGraphicalWarningPipeDisconnects.setter
    def ShowGraphicalWarningPipeDisconnects(self, bShow: bool) -> None: ...
    @property
    def ShowGraphicalWarningCableTrayConduitDisconnects(self) -> bool: ...
    @ShowGraphicalWarningCableTrayConduitDisconnects.setter
    def ShowGraphicalWarningCableTrayConduitDisconnects(self, bShow: bool) -> None: ...
    @property
    def ShowGraphicalWarningElectricalDisconnects(self) -> bool: ...
    @ShowGraphicalWarningElectricalDisconnects.setter
    def ShowGraphicalWarningElectricalDisconnects(self, bShow: bool) -> None: ...
    @property
    def ShowGraphicalWarningHangerDisconnects(self) -> bool: ...
    @ShowGraphicalWarningHangerDisconnects.setter
    def ShowGraphicalWarningHangerDisconnects(self, bShow: bool) -> None: ...
    @property
    def DefaultViewDiscipline(self) -> ViewDiscipline: ...
    @DefaultViewDiscipline.setter
    def DefaultViewDiscipline(self, viewDiscipline: ViewDiscipline) -> None: ...
    @property
    def VertexTolerance(self) -> float: ...
    @property
    def AngleTolerance(self) -> float: ...
    @property
    def IsArchitectureEnabled(self) -> bool: ...
    @IsArchitectureEnabled.setter
    def IsArchitectureEnabled(self, bArchitectureEnabled: bool) -> None: ...
    @property
    def IsStructureEnabled(self) -> bool: ...
    @IsStructureEnabled.setter
    def IsStructureEnabled(self, bStructureEnabled: bool) -> None: ...
    @property
    def IsSystemsEnabled(self) -> bool: ...
    @property
    def IsMassingEnabled(self) -> bool: ...
    @IsMassingEnabled.setter
    def IsMassingEnabled(self, bMassingEnabled: bool) -> None: ...
    @property
    def IsEnergyAnalysisEnabled(self) -> bool: ...
    @IsEnergyAnalysisEnabled.setter
    def IsEnergyAnalysisEnabled(self, bEenergyAnalysisEnabled: bool) -> None: ...
    @property
    def IsStructuralAnalysisEnabled(self) -> bool: ...
    @IsStructuralAnalysisEnabled.setter
    def IsStructuralAnalysisEnabled(self, bStructuralAnalysisEnabled: bool) -> None: ...
    @property
    def IsMechanicalEnabled(self) -> bool: ...
    @IsMechanicalEnabled.setter
    def IsMechanicalEnabled(self, bMechanicalEnabled: bool) -> None: ...
    @property
    def IsElectricalEnabled(self) -> bool: ...
    @IsElectricalEnabled.setter
    def IsElectricalEnabled(self, bElectricalEnabled: bool) -> None: ...
    @property
    def IsPipingEnabled(self) -> bool: ...
    @IsPipingEnabled.setter
    def IsPipingEnabled(self, bPipingEnabled: bool) -> None: ...
    @property
    def IsMechanicalAnalysisEnabled(self) -> bool: ...
    @IsMechanicalAnalysisEnabled.setter
    def IsMechanicalAnalysisEnabled(self, bMechanicalAnalysisEnabled: bool) -> None: ...
    @property
    def IsElectricalAnalysisEnabled(self) -> bool: ...
    @IsElectricalAnalysisEnabled.setter
    def IsElectricalAnalysisEnabled(self, bElectricalAnalysisEnabled: bool) -> None: ...
    @property
    def IsPipingAnalysisEnabled(self) -> bool: ...
    @IsPipingAnalysisEnabled.setter
    def IsPipingAnalysisEnabled(self, bPipingAnalysisEnabled: bool) -> None: ...
    @property
    def IsRouteAnalysisEnabled(self) -> bool: ...
    @IsRouteAnalysisEnabled.setter
    def IsRouteAnalysisEnabled(self, bRouteAnalysisEnabled: bool) -> None: ...
    @property
    def IsInfrastructureEnabled(self) -> bool: ...
    @IsInfrastructureEnabled.setter
    def IsInfrastructureEnabled(self, bInfrastructureEnabled: bool) -> None: ...
    @property
    def CurrentRevitServerAccelerator(self) -> str: ...
    @CurrentRevitServerAccelerator.setter
    def CurrentRevitServerAccelerator(self, strAcceleratorName: str) -> None: ...
    @property
    def ShortCurveTolerance(self) -> float: ...
    @property
    def MinimumThickness() -> float: ...
    @property
    def CurrentUserAddinsLocation(self) -> str: ...
    @property
    def AllUsersAddinsLocation(self) -> str: ...
    @property
    def CurrentUsersDataFolderPath(self) -> str: ...
    @property
    def CurrentUsersAddinsDataFolderPath(self) -> str: ...
    @property
    def BackgroundColor(self) -> Color: ...
    @BackgroundColor.setter
    def BackgroundColor(self, backgroundColor: Color) -> None: ...
    @property
    def IsLoggedIn() -> bool: ...
    @property
    def LoginUserId(self) -> str: ...
    @property
    def AllowNavigationDuringRedraw(self) -> bool: ...
    @AllowNavigationDuringRedraw.setter
    def AllowNavigationDuringRedraw(self, allowNavigationDuringRedraw: bool) -> None: ...
    @property
    def IsValidObject(self) -> bool: ...
    @overload
    def OpenIFCDocument(self, fileName: str, importOptions: IFCImportOptions) -> Document: ...
    @overload
    def OpenIFCDocument(self, fileName: str) -> Document: ...
    def RegisterFailuresProcessor(processor: IFailuresProcessor) -> None: ...
    def GetFailureDefinitionRegistry() -> FailureDefinitionRegistry: ...
    def WriteJournalComment(self, comment: str, timeStamp: bool) -> None: ...
    def IsJournalPlaying(self) -> bool: ...
    def GetSystemsAnalysisWorkflowNames(self) -> List[str]: ...
    def GetSystemsAnalysisWorkflows(self) -> IDictionary: ...
    def SetSystemsAnalysisWorkflows(self, paths: IDictionary) -> None: ...
    def GetLibraryPaths(self) -> IDictionary: ...
    def SetLibraryPaths(self, paths: IDictionary) -> None: ...
    def PurgeReleasedAPIObjects(self) -> None: ...
    def CopyModel(self, sourceModelPath: ModelPath, destFilePath: str, overwrite: bool) -> None: ...
    def GetWorksharingCentralGUID(self, serverModelPath: ServerPath) -> Guid: ...
    def GetRevitServerNetworkHosts(self) -> List[str]: ...
    def IsValidThickness(thickness: float) -> bool: ...
    @overload
    def OpenDocumentFile(self, fileName: str) -> Document: ...
    @overload
    def OpenDocumentFile(self, modelPath: ModelPath, openOptions: OpenOptions, openFromCloudCallback: IOpenFromCloudCallback) -> Document: ...
    @overload
    def OpenDocumentFile(self, modelPath: ModelPath, openOptions: OpenOptions) -> Document: ...
    def UpdateRenderAppearanceLibrary(self) -> None: ...
    def GetAssets(self, assetType: AssetType) -> List[Asset]: ...


class ControlledApplication:
    @property
    def IsLateAddinLoading(self) -> bool: ...
    def GetFailureDefinitionRegistry() -> FailureDefinitionRegistry: ...
    def RegisterFailuresProcessor(processor: IFailuresProcessor) -> None: ...
    @property
    def RecordingJournalFilename(self) -> str: ...
    def WriteJournalComment(self, comment: str, timeStamp: bool) -> None: ...
    def IsJournalPlaying(self) -> bool: ...
    def GetLibraryPaths(self) -> IDictionary: ...
    def SetLibraryPaths(self, paths: IDictionary) -> None: ...
    def add_DocumentChanged(self, handler: EventHandler) -> None: ...
    def remove_DocumentChanged(self, handler: EventHandler) -> None: ...
    def add_LinkedResourceOpening(self, handler: EventHandler) -> None: ...
    def remove_LinkedResourceOpening(self, handler: EventHandler) -> None: ...
    def add_LinkedResourceOpened(self, handler: EventHandler) -> None: ...
    def remove_LinkedResourceOpened(self, handler: EventHandler) -> None: ...
    def add_WorksharedOperationProgressChanged(self, handler: EventHandler) -> None: ...
    def remove_WorksharedOperationProgressChanged(self, handler: EventHandler) -> None: ...
    def add_FailuresProcessing(self, handler: EventHandler) -> None: ...
    def remove_FailuresProcessing(self, handler: EventHandler) -> None: ...
    def add_DocumentSaving(self, handler: EventHandler) -> None: ...
    def remove_DocumentSaving(self, handler: EventHandler) -> None: ...
    def add_DocumentSaved(self, handler: EventHandler) -> None: ...
    def remove_DocumentSaved(self, handler: EventHandler) -> None: ...
    def add_DocumentSavingAs(self, handler: EventHandler) -> None: ...
    def remove_DocumentSavingAs(self, handler: EventHandler) -> None: ...
    def add_DocumentSavedAs(self, handler: EventHandler) -> None: ...
    def remove_DocumentSavedAs(self, handler: EventHandler) -> None: ...
    def add_DocumentPrinting(self, handler: EventHandler) -> None: ...
    def remove_DocumentPrinting(self, handler: EventHandler) -> None: ...
    def add_DocumentPrinted(self, handler: EventHandler) -> None: ...
    def remove_DocumentPrinted(self, handler: EventHandler) -> None: ...
    def add_ViewPrinting(self, handler: EventHandler) -> None: ...
    def remove_ViewPrinting(self, handler: EventHandler) -> None: ...
    def add_ViewPrinted(self, handler: EventHandler) -> None: ...
    def remove_ViewPrinted(self, handler: EventHandler) -> None: ...
    def add_DocumentClosing(self, handler: EventHandler) -> None: ...
    def remove_DocumentClosing(self, handler: EventHandler) -> None: ...
    def add_DocumentClosed(self, handler: EventHandler) -> None: ...
    def remove_DocumentClosed(self, handler: EventHandler) -> None: ...
    def add_DocumentCreating(self, handler: EventHandler) -> None: ...
    def remove_DocumentCreating(self, handler: EventHandler) -> None: ...
    def add_DocumentCreated(self, handler: EventHandler) -> None: ...
    def remove_DocumentCreated(self, handler: EventHandler) -> None: ...
    def add_FileImporting(self, handler: EventHandler) -> None: ...
    def remove_FileImporting(self, handler: EventHandler) -> None: ...
    def add_FileImported(self, handler: EventHandler) -> None: ...
    def remove_FileImported(self, handler: EventHandler) -> None: ...
    def add_FileExporting(self, handler: EventHandler) -> None: ...
    def remove_FileExporting(self, handler: EventHandler) -> None: ...
    def add_FileExported(self, handler: EventHandler) -> None: ...
    def remove_FileExported(self, handler: EventHandler) -> None: ...
    def add_DocumentOpening(self, handler: EventHandler) -> None: ...
    def remove_DocumentOpening(self, handler: EventHandler) -> None: ...
    def add_DocumentOpened(self, handler: EventHandler) -> None: ...
    def remove_DocumentOpened(self, handler: EventHandler) -> None: ...
    def add_DocumentSynchronizingWithCentral(self, handler: EventHandler) -> None: ...
    def remove_DocumentSynchronizingWithCentral(self, handler: EventHandler) -> None: ...
    def add_DocumentSynchronizedWithCentral(self, handler: EventHandler) -> None: ...
    def remove_DocumentSynchronizedWithCentral(self, handler: EventHandler) -> None: ...
    def add_ProgressChanged(self, handler: EventHandler) -> None: ...
    def remove_ProgressChanged(self, handler: EventHandler) -> None: ...
    def add_ApplicationInitialized(self, handler: EventHandler) -> None: ...
    def remove_ApplicationInitialized(self, handler: EventHandler) -> None: ...
    def add_FamilyLoadingIntoDocument(self, handler: EventHandler) -> None: ...
    def remove_FamilyLoadingIntoDocument(self, handler: EventHandler) -> None: ...
    def add_FamilyLoadedIntoDocument(self, handler: EventHandler) -> None: ...
    def remove_FamilyLoadedIntoDocument(self, handler: EventHandler) -> None: ...
    def add_ElementTypeDuplicating(self, handler: EventHandler) -> None: ...
    def remove_ElementTypeDuplicating(self, handler: EventHandler) -> None: ...
    def add_ElementTypeDuplicated(self, handler: EventHandler) -> None: ...
    def remove_ElementTypeDuplicated(self, handler: EventHandler) -> None: ...
    def add_DocumentReloadingLatest(self, handler: EventHandler) -> None: ...
    def remove_DocumentReloadingLatest(self, handler: EventHandler) -> None: ...
    def add_DocumentReloadedLatest(self, handler: EventHandler) -> None: ...
    def remove_DocumentReloadedLatest(self, handler: EventHandler) -> None: ...
    @property
    def CurrentUserAddinsLocation(self) -> str: ...
    @property
    def AllUsersAddinsLocation(self) -> str: ...
    @property
    def CurrentUsersDataFolderPath(self) -> str: ...
    @property
    def CurrentUsersAddinsDataFolderPath(self) -> str: ...
    @property
    def SubVersionNumber(self) -> str: ...
    @property
    def Create(self) -> Application: ...
    def OpenSharedParameterFile(self) -> DefinitionFile: ...
    @property
    def VersionName(self) -> str: ...
    @property
    def VersionNumber(self) -> str: ...
    @property
    def VersionBuild(self) -> str: ...
    @property
    def Cities(self) -> CitySet: ...
    @property
    def Language(self) -> LanguageType: ...
    @property
    def Product(self) -> ProductType: ...
    @property
    def SharedParametersFilename(self) -> str: ...
    @SharedParametersFilename.setter
    def SharedParametersFilename(self, filename: str) -> None: ...
    @property
    def ActiveAddInId(self) -> AddInId: ...
