NaxToPy 3.2.3__tar.gz → 3.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {naxtopy-3.2.3 → naxtopy-3.3.0}/LICENSE +1 -1
- {naxtopy-3.2.3/src/NaxToPy.egg-info → naxtopy-3.3.0}/PKG-INFO +12 -5
- {naxtopy-3.2.3 → naxtopy-3.3.0}/README.md +10 -3
- {naxtopy-3.2.3 → naxtopy-3.3.0}/pyproject.toml +2 -2
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +384 -1
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Constants/Constants.py +5 -5
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Errors/N2PLog.py +6 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/N2PModelContent.py +27 -21
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/n2ptoexe/N2PtoEXE.py +2 -1
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PUpdateFastener.py +2 -2
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +1 -1
- {naxtopy-3.2.3 → naxtopy-3.3.0/src/NaxToPy.egg-info}/PKG-INFO +12 -5
- {naxtopy-3.2.3 → naxtopy-3.3.0}/setup.cfg +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/setup.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PComponent.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PConnector.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PCoord.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PElement.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PFreeBody.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PIncrement.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PLoadCase.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PMaterial.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PNode.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PProperty.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PReport.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PResult.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PSection.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/N2PSet.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Classes/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Constants/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Constants/librerias.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Errors/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Core/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/common/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/common/data_input_hdf5.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/common/hdf5.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/common/material.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/common/model_processor.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/common/property.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/envelope/N2PEnvelope.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/envelope/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/airbus/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/airbus/core_shear_crimping_airbus.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/airbus/dimpling_airbus.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/airbus/wrinkling_airbus.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/cmh/core_shear_crimping_cmh.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/cmh/dimpling_cmh.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/cmh/wrinkling_cmh.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/hsb/wrinkling_hsb.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/hypersizer/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/hypersizer/crimping_hypersizer.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/hypersizer/dimpling_hypersizer.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/hypersizer/wrinkling_hypersizer.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/handbooks/nasa/wrinkling_nasa.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/n2ptoexe/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/numericaltools/N2PCoefficientsFinder.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/numericaltools/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/delamination/N2PEdgeDelamination.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/delamination/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/failure_analysis/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/sandwich/N2PSandwich.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/composite/sandwich/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PCalculatorRFJoints.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PCompRF.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PFastenerAnalysis.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PGetFasteners.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PGetLoadFasteners.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PMetalRF.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/N2PRivetRF.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/N2PAttachment.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/N2PBolt.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/N2PFastenerSystem.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/N2PJoint.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/N2PJointAnalysisParameters.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/N2PPlate.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/fasteners/joints/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/metallic/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/metallic/neuber/N2PNeuber.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/Modules/static/metallic/neuber/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/NaxToPy.ico +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/__init__.py +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy/user_functions.txt +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy.egg-info/SOURCES.txt +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy.egg-info/requires.txt +0 -0
- {naxtopy-3.2.3 → naxtopy-3.3.0}/src/NaxToPy.egg-info/top_level.txt +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: NaxToPy
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3.0
|
|
4
4
|
Summary: Package for postprocessing FEM results in Python
|
|
5
5
|
Home-page: https://www.idaerosolutions.com/Home/NaxToPy
|
|
6
6
|
Download-URL: https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US
|
|
7
7
|
Author-email: Idaero Solutions <manuel.sanchez@idaerosolutions.com>
|
|
8
8
|
License: MIT
|
|
9
|
-
Project-URL: Documentation, https://www.idaerosolutions.com/NaxToDocumentation/
|
|
9
|
+
Project-URL: Documentation, https://www.idaerosolutions.com/NaxToDocumentation/NaxTo/index.html
|
|
10
10
|
Project-URL: LinkedIn, https://www.linkedin.com/company/idaero/
|
|
11
11
|
Keywords: NaxTo,Postprocessing,FEM
|
|
12
12
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -51,10 +51,10 @@ additional software beyond NaxTo (see the Download and Homepage links on the lef
|
|
|
51
51
|
---------------
|
|
52
52
|
|
|
53
53
|
⚠️**Warning:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
|
|
54
|
-
This version is compatible with **NaxTo
|
|
54
|
+
This version is compatible with **NaxTo 2026.0**.
|
|
55
55
|
Check in _Programs and Features_ the NaxTo version that is installed.
|
|
56
56
|
|
|
57
|
-
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy
|
|
57
|
+
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/#history) to find which newer version is compatible with it.
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
## Installation
|
|
@@ -302,6 +302,13 @@ is redundant. The coordinate system will prevail.
|
|
|
302
302
|
3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
|
|
303
303
|
4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
|
|
304
304
|
|
|
305
|
+
### v.3.3.0
|
|
306
|
+
1. feat: optistruct fem files are now completely supported.
|
|
307
|
+
2. feat: New methods for `N2PmodelContent.ModelInputData`: `update_model()` and `create_bdf_file`.
|
|
308
|
+
3. feat: New methods for Optistruct and Nastran Cards: `remap_card()`, `set_raw_content_and_remap()`, `IsValid()`, `IsModified()`, `mark_as_synthetic()` and `mark_as_original()`.
|
|
309
|
+
4. bugfix: minor errors have been fixed.
|
|
310
|
+
5. refactor: optimize BDF (Nastran) and FEM (OptiStruct) file parsing methods.
|
|
311
|
+
|
|
305
312
|
# Documentation
|
|
306
313
|
|
|
307
314
|
**NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
|
|
@@ -517,7 +524,7 @@ def dataframe_results(model: "N2PModelContent", result: "N2PResult", sections=No
|
|
|
517
524
|
##
|
|
518
525
|
For more documentation visit https://idaerosolutions.com/Home/NaxToPy
|
|
519
526
|
|
|
520
|
-
Complete NaxToPy documentation at: https://www.idaerosolutions.com/NaxToDocumentation/
|
|
527
|
+
Complete NaxToPy documentation at: https://www.idaerosolutions.com/NaxToDocumentation/NaxTo/index.html
|
|
521
528
|
|
|
522
529
|
# License
|
|
523
530
|
|
|
@@ -24,10 +24,10 @@ additional software beyond NaxTo (see the Download and Homepage links on the lef
|
|
|
24
24
|
---------------
|
|
25
25
|
|
|
26
26
|
⚠️**Warning:** To use NaxToPy, [**NaxTo**](https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US) must be installed.
|
|
27
|
-
This version is compatible with **NaxTo
|
|
27
|
+
This version is compatible with **NaxTo 2026.0**.
|
|
28
28
|
Check in _Programs and Features_ the NaxTo version that is installed.
|
|
29
29
|
|
|
30
|
-
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy
|
|
30
|
+
📘**Note:** If a specific NaxTo version is installed, search the [**NaxToPy History**](https://pypi.org/project/NaxToPy/#history) to find which newer version is compatible with it.
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
## Installation
|
|
@@ -275,6 +275,13 @@ is redundant. The coordinate system will prevail.
|
|
|
275
275
|
3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
|
|
276
276
|
4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
|
|
277
277
|
|
|
278
|
+
### v.3.3.0
|
|
279
|
+
1. feat: optistruct fem files are now completely supported.
|
|
280
|
+
2. feat: New methods for `N2PmodelContent.ModelInputData`: `update_model()` and `create_bdf_file`.
|
|
281
|
+
3. feat: New methods for Optistruct and Nastran Cards: `remap_card()`, `set_raw_content_and_remap()`, `IsValid()`, `IsModified()`, `mark_as_synthetic()` and `mark_as_original()`.
|
|
282
|
+
4. bugfix: minor errors have been fixed.
|
|
283
|
+
5. refactor: optimize BDF (Nastran) and FEM (OptiStruct) file parsing methods.
|
|
284
|
+
|
|
278
285
|
# Documentation
|
|
279
286
|
|
|
280
287
|
**NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
|
|
@@ -490,7 +497,7 @@ def dataframe_results(model: "N2PModelContent", result: "N2PResult", sections=No
|
|
|
490
497
|
##
|
|
491
498
|
For more documentation visit https://idaerosolutions.com/Home/NaxToPy
|
|
492
499
|
|
|
493
|
-
Complete NaxToPy documentation at: https://www.idaerosolutions.com/NaxToDocumentation/
|
|
500
|
+
Complete NaxToPy documentation at: https://www.idaerosolutions.com/NaxToDocumentation/NaxTo/index.html
|
|
494
501
|
|
|
495
502
|
# License
|
|
496
503
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "NaxToPy"
|
|
7
|
-
version = "3.
|
|
7
|
+
version = "3.3.0"
|
|
8
8
|
license = {text = "MIT"}
|
|
9
9
|
authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -25,7 +25,7 @@ keywords = ["NaxTo",
|
|
|
25
25
|
"FEM"]
|
|
26
26
|
|
|
27
27
|
[project.urls]
|
|
28
|
-
"Documentation" = "https://www.idaerosolutions.com/NaxToDocumentation/
|
|
28
|
+
"Documentation" = "https://www.idaerosolutions.com/NaxToDocumentation/NaxTo/index.html"
|
|
29
29
|
"LinkedIn" = "https://www.linkedin.com/company/idaero/"
|
|
30
30
|
|
|
31
31
|
[tool.setuptools]
|
|
@@ -183,7 +183,17 @@ class N2PCard(N2PInputDataNas):
|
|
|
183
183
|
|
|
184
184
|
@property
|
|
185
185
|
def MappingSuccessful(self) -> bool:
|
|
186
|
-
return self.__card.
|
|
186
|
+
return self.__card.IsValid
|
|
187
|
+
|
|
188
|
+
@property
|
|
189
|
+
def IsValid(self) -> bool:
|
|
190
|
+
"""Indicates whether the card is currently valid"""
|
|
191
|
+
return self.__card.IsValid
|
|
192
|
+
|
|
193
|
+
@property
|
|
194
|
+
def IsModified(self) -> bool:
|
|
195
|
+
"""Indicates whether the card has been modified since it was read or created"""
|
|
196
|
+
return self.__card.IsModified
|
|
187
197
|
|
|
188
198
|
def comment_card(self) -> None:
|
|
189
199
|
"""Comments the card adding a $ when writing the files"""
|
|
@@ -237,6 +247,80 @@ class N2PCard(N2PInputDataNas):
|
|
|
237
247
|
"""Gets the part id of the card. If the card is not in a superelement, it returns 0"""
|
|
238
248
|
return self.__card.GetSuperElement()
|
|
239
249
|
|
|
250
|
+
def remap_card(self) -> bool:
|
|
251
|
+
"""Re-parses the card from its stored raw content, resetting all fields to
|
|
252
|
+
a clean slate and re-running the full parsing pipeline. Acts as a
|
|
253
|
+
"refresh": discards any uncommitted setter mutations and restores the
|
|
254
|
+
field values that match the stored raw bytes. Cold path — primarily
|
|
255
|
+
useful for recovering cards that mapped with errors at load time after
|
|
256
|
+
a parsing-logic update, or for rolling back unconfirmed setter edits.
|
|
257
|
+
|
|
258
|
+
Returns:
|
|
259
|
+
``True`` if the card is valid after re-parsing, ``False`` if the
|
|
260
|
+
stored raw content was unavailable or re-parsing produced errors.
|
|
261
|
+
Diagnostic detail is available from the model's operation registry.
|
|
262
|
+
"""
|
|
263
|
+
result = self.__card.RemapCard()
|
|
264
|
+
self.last_status_message()
|
|
265
|
+
return result
|
|
266
|
+
|
|
267
|
+
def set_raw_content_and_remap(self, new_raw_content: str) -> bool:
|
|
268
|
+
"""Replaces the card's raw BDF text with ``new_raw_content`` (encoded to
|
|
269
|
+
UTF-8 bytes) and re-runs the full parsing pipeline. The previous raw
|
|
270
|
+
content is **permanently** overwritten — there is no undo. After this
|
|
271
|
+
call, :attr:`IsModified` stays ``True`` even across subsequent
|
|
272
|
+
:meth:`remap_card` calls, because the original on-disk content is
|
|
273
|
+
irrecoverable.
|
|
274
|
+
|
|
275
|
+
Args:
|
|
276
|
+
new_raw_content: New BDF card text to parse. Must be non-empty and
|
|
277
|
+
non-whitespace; otherwise the call is rejected and an error is
|
|
278
|
+
logged via the operation registry without mutating state.
|
|
279
|
+
|
|
280
|
+
Returns:
|
|
281
|
+
``True`` if the card is valid after re-parsing, ``False`` if
|
|
282
|
+
``new_raw_content`` was rejected or re-parsing produced errors.
|
|
283
|
+
On a parsing-error result the new raw content is **already
|
|
284
|
+
persisted**; the consumer can recover field-by-field via property
|
|
285
|
+
setters without calling this method again.
|
|
286
|
+
|
|
287
|
+
Example:
|
|
288
|
+
>>> card.set_raw_content_and_remap(
|
|
289
|
+
... "GRID 1001 0 0.0 1.0 0.0")
|
|
290
|
+
"""
|
|
291
|
+
result = self.__card.SetRawContentAndRemap(new_raw_content)
|
|
292
|
+
self.last_status_message()
|
|
293
|
+
return result
|
|
294
|
+
|
|
295
|
+
def mark_as_synthetic(self) -> None:
|
|
296
|
+
"""Marks the card as synthetically created (built programmatically via the
|
|
297
|
+
API) rather than parsed from a BDF file. **Idempotent** — calling it on
|
|
298
|
+
an already synthetic card is a no-op. Synthetic cards may receive
|
|
299
|
+
distinct visualization treatment when the model is rewritten to disk
|
|
300
|
+
(e.g. explanatory comment headers identifying them as non-original).
|
|
301
|
+
|
|
302
|
+
The transition (when it actually happens) is recorded as an informational
|
|
303
|
+
entry in the model's operation registry under
|
|
304
|
+
``StatusCode.CardMarkedSynthetic``.
|
|
305
|
+
"""
|
|
306
|
+
self.__card.MarkAsSynthetic()
|
|
307
|
+
self.last_status_message()
|
|
308
|
+
|
|
309
|
+
def mark_as_original(self) -> None:
|
|
310
|
+
"""Reverts a previously synthetic card back to original status, treating it
|
|
311
|
+
as if it had been parsed from a BDF file. **Idempotent** — calling it on
|
|
312
|
+
a card that is already original is a no-op. Typical use case: a synthetic
|
|
313
|
+
card has been persisted to disk via :meth:`update_file` or
|
|
314
|
+
:meth:`rebuild_file` and subsequent operations should treat it as part of
|
|
315
|
+
the original model.
|
|
316
|
+
|
|
317
|
+
The transition (when it actually happens) is recorded as an informational
|
|
318
|
+
entry in the model's operation registry under
|
|
319
|
+
``StatusCode.CardMarkedOriginal``.
|
|
320
|
+
"""
|
|
321
|
+
self.__card.MarkAsOriginal()
|
|
322
|
+
self.last_status_message()
|
|
323
|
+
|
|
240
324
|
|
|
241
325
|
class N2PNastranInputData:
|
|
242
326
|
"""Class with the complete data of a MEF input file (text file).
|
|
@@ -447,6 +531,61 @@ class N2PNastranInputData:
|
|
|
447
531
|
else:
|
|
448
532
|
N2PLog.Error.E401(folder)
|
|
449
533
|
|
|
534
|
+
def update_model(self) -> None:
|
|
535
|
+
"""Selectively saves the model in place: rewrites only the BDF files that contain user-modified cards,
|
|
536
|
+
leaving unmodified files untouched (content and timestamp preserved). No destination folder needed — each
|
|
537
|
+
``BdfFile`` is written back to its original absolute path."""
|
|
538
|
+
self.__inputfiledata.UpdateModel()
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
def create_bdf_file(self, file_name: str, parent_bdf_file: str = None) -> Union[str, None]:
|
|
542
|
+
"""Adds a new auxiliary BDF file to a loaded model and links it through an
|
|
543
|
+
``INCLUDE`` statement inside ``parent_bdf_file`` (defaulting to the launcher
|
|
544
|
+
file when omitted). The new file is registered in memory only — it is
|
|
545
|
+
materialized to disk on the next :meth:`update_file` or :meth:`rebuild_file`
|
|
546
|
+
call. Returns the new ``BdfFile`` ready to be populated through
|
|
547
|
+
:meth:`create_card`.
|
|
548
|
+
|
|
549
|
+
Args:
|
|
550
|
+
file_name: Name of the new BDF file (e.g. ``"custom_materials.bdf"``).
|
|
551
|
+
Sub-directories are supported with forward slashes
|
|
552
|
+
(``"extras/load_cases.bdf"``); ``..`` is rejected. The extension is
|
|
553
|
+
not added automatically — supply it explicitly.
|
|
554
|
+
parent_bdf_file: Absolute path of an existing BDF in the model where the
|
|
555
|
+
``INCLUDE`` statement will be inserted. Defaults to the launcher file
|
|
556
|
+
when ``None``.
|
|
557
|
+
|
|
558
|
+
Returns:
|
|
559
|
+
The new ``BdfFile`` instance on success, or ``None`` when the C# layer
|
|
560
|
+
rejects the operation (empty model, invalid file name, path collision,
|
|
561
|
+
include cycle, etc.). Diagnostic detail is available from the model's
|
|
562
|
+
operation registry.
|
|
563
|
+
|
|
564
|
+
Example:
|
|
565
|
+
>>> extras = model.ModelInputData.create_bdf_file("extras/custom_materials.bdf")
|
|
566
|
+
>>> mat = model.ModelInputData.create_card("MAT1", extras.BdfFilePath)
|
|
567
|
+
>>> mat.MID = 999
|
|
568
|
+
>>> model.ModelInputData.update_file()
|
|
569
|
+
"""
|
|
570
|
+
parent = None
|
|
571
|
+
if parent_bdf_file is not None:
|
|
572
|
+
parent = self.__bdfFiles.get(parent_bdf_file)
|
|
573
|
+
if parent is None:
|
|
574
|
+
N2PLog.Warning.W212(parent_bdf_file)
|
|
575
|
+
|
|
576
|
+
new_bdf = self.__inputfiledata.CreateBdfFile(file_name, parent)
|
|
577
|
+
|
|
578
|
+
if new_bdf is None:
|
|
579
|
+
if not self.__inputfiledata.IsLastOperationRead():
|
|
580
|
+
result = self.__inputfiledata.GetLastOperationStatusStructured()
|
|
581
|
+
self.__inputfiledata.SetLastOperationAsRead()
|
|
582
|
+
if result is not None and result.StatusMessage:
|
|
583
|
+
N2PLog.Error.E100(result.StatusMessage)
|
|
584
|
+
return None
|
|
585
|
+
|
|
586
|
+
self.__bdfFiles[new_bdf.BdfFilePath] = new_bdf
|
|
587
|
+
return new_bdf.BdfFilePath
|
|
588
|
+
|
|
450
589
|
def get_failed_cards(self) -> list["N2PCard"]:
|
|
451
590
|
"""Method that returns a list with the N2PCard objects of the input FEM file that have not been mapped correctly."""
|
|
452
591
|
failed_cards = []
|
|
@@ -13059,6 +13198,244 @@ class RSPLINE(N2PCard):
|
|
|
13059
13198
|
self.last_status_message()
|
|
13060
13199
|
|
|
13061
13200
|
|
|
13201
|
+
class SETOPT(N2PCard):
|
|
13202
|
+
def __init__(self, cardinfo):
|
|
13203
|
+
super().__init__(cardinfo)
|
|
13204
|
+
self.__cardinfo = cardinfo
|
|
13205
|
+
|
|
13206
|
+
@property
|
|
13207
|
+
def SID(self) -> int:
|
|
13208
|
+
"""
|
|
13209
|
+
Set Identification number
|
|
13210
|
+
"""
|
|
13211
|
+
return self.__cardinfo.SID
|
|
13212
|
+
|
|
13213
|
+
@SID.setter
|
|
13214
|
+
def SID(self, value: int) -> None:
|
|
13215
|
+
self.__cardinfo.SID = value
|
|
13216
|
+
self.last_status_message()
|
|
13217
|
+
|
|
13218
|
+
@property
|
|
13219
|
+
def Type(self) -> Literal['GRID', 'ELEM', 'RIGID', 'GRIDC', 'DESVAR', 'MODE', 'FREQ', 'TIME', 'LABEL', 'PLY', 'SUBSYS']:
|
|
13220
|
+
"""Gets or sets the entity type contained in the set.
|
|
13221
|
+
|
|
13222
|
+
Valid values: GRID, ELEM, RIGID, GRIDC, DESVAR, MODE, FREQ, TIME, LABEL, PLY, SUBSYS.
|
|
13223
|
+
"""
|
|
13224
|
+
return self.__cardinfo.Type
|
|
13225
|
+
|
|
13226
|
+
@Type.setter
|
|
13227
|
+
def Type(self, value: Literal['GRID', 'ELEM', 'RIGID', 'GRIDC', 'DESVAR', 'MODE', 'FREQ', 'TIME', 'LABEL', 'PLY', 'SUBSYS']) -> None:
|
|
13228
|
+
self.__cardinfo.Type = value
|
|
13229
|
+
self.last_status_message()
|
|
13230
|
+
|
|
13231
|
+
@property
|
|
13232
|
+
def SubtypeOrOperator(self) -> Literal["LIST", "BBOX", "PROP", "MAT", "ELTYPE", "ELEM", "DMIG", "OR", "AND", "NOT", "MINUS"]:
|
|
13233
|
+
"""Gets or sets the method of set definition (SUBTYPE) or boolean operation (OPERATOR).
|
|
13234
|
+
|
|
13235
|
+
SUBTYPE VALUES (define how the set membership is determined):
|
|
13236
|
+
- LIST (default): Direct list of entity IDs with optional range keywords (THRU, EXCEPT, ALL)
|
|
13237
|
+
- BBOX: Bounding box defined by coordinates (not supported by this library)
|
|
13238
|
+
- PROP: Elements by property ID reference
|
|
13239
|
+
- MAT: Elements by material ID reference
|
|
13240
|
+
- ELTYPE: Elements by element type name (not supported by this library)
|
|
13241
|
+
- ELEM: Grids belonging to specified elements
|
|
13242
|
+
- DMIG: Entities from DMIG matrices (not supported by this library)
|
|
13243
|
+
|
|
13244
|
+
OPERATOR VALUES (define boolean combinations of other SETs):
|
|
13245
|
+
- OR: Union of listed sets (1 or more SIDs allowed)
|
|
13246
|
+
- AND: Intersection of listed sets (1 or more SIDs allowed)
|
|
13247
|
+
- NOT: Complement of a single set (exactly 1 SID required)
|
|
13248
|
+
- MINUS: Difference of two sets (exactly 2 SIDs required)
|
|
13249
|
+
"""
|
|
13250
|
+
return self.__cardinfo.SubtypeOrOperator
|
|
13251
|
+
|
|
13252
|
+
@SubtypeOrOperator.setter
|
|
13253
|
+
def SubtypeOrOperator(self, value: Literal["LIST", "BBOX", "PROP", "MAT", "ELTYPE", "ELEM", "DMIG", "OR", "AND", "NOT", "MINUS"]) -> None:
|
|
13254
|
+
self.__cardinfo.SubtypeOrOperator = value
|
|
13255
|
+
self.last_status_message()
|
|
13256
|
+
|
|
13257
|
+
@property
|
|
13258
|
+
def IsOperator(self) -> bool:
|
|
13259
|
+
"""
|
|
13260
|
+
Returns True if the set definition is a boolean operator, False otherwise.
|
|
13261
|
+
"""
|
|
13262
|
+
return self.__cardinfo.IsOperator
|
|
13263
|
+
|
|
13264
|
+
@IsOperator.setter
|
|
13265
|
+
def IsOperator(self, value: bool) -> None:
|
|
13266
|
+
self.__cardinfo.IsOperator = value
|
|
13267
|
+
self.last_status_message()
|
|
13268
|
+
|
|
13269
|
+
@property
|
|
13270
|
+
def IsSubtype(self) -> bool:
|
|
13271
|
+
"""Indicates whether the current SubtypeOrOperator value is a SUBTYPE (LIST, BBOX, PROP, etc.).
|
|
13272
|
+
"""
|
|
13273
|
+
return self.__cardinfo.IsSubtype
|
|
13274
|
+
|
|
13275
|
+
@IsSubtype.setter
|
|
13276
|
+
def IsSubtype(self, value: bool) -> None:
|
|
13277
|
+
self.__cardinfo.IsSubtype = value
|
|
13278
|
+
self.last_status_message()
|
|
13279
|
+
|
|
13280
|
+
@property
|
|
13281
|
+
def EntityIDs(self) -> list[int]:
|
|
13282
|
+
"""Gets a copy of the expanded entity ID sequence.
|
|
13283
|
+
"""
|
|
13284
|
+
return list(self.__cardinfo.EntityIds)
|
|
13285
|
+
|
|
13286
|
+
@property
|
|
13287
|
+
def HasAllEntities(self) -> bool:
|
|
13288
|
+
"""Indicates whether the SET uses the ALL keyword (all entities of the specified TYPE).
|
|
13289
|
+
When true, EntityIds returns null because the list cannot be expanded without model knowledge."""
|
|
13290
|
+
return self.__cardinfo.HasAllEntities
|
|
13291
|
+
|
|
13292
|
+
@property
|
|
13293
|
+
def IsAllExceptMode(self) -> bool:
|
|
13294
|
+
"""Indicates whether the SET uses the ALL EXCEPT pattern.
|
|
13295
|
+
When true, use ExcludedEntityIds to get the list of IDs to exclude."""
|
|
13296
|
+
return self.__cardinfo.IsAllExceptMode
|
|
13297
|
+
|
|
13298
|
+
@property
|
|
13299
|
+
def ExcludedEntityIds(self) -> list[int]:
|
|
13300
|
+
"""Gets a copy of the excluded entity ID list (ALL EXCEPT mode only)."""
|
|
13301
|
+
return list(self.__cardinfo.ExcludedEntityIds)
|
|
13302
|
+
|
|
13303
|
+
|
|
13304
|
+
def add_entity_id(self, entity_id: int) -> None:
|
|
13305
|
+
"""Adds a new entity ID to the sequence with validation."""
|
|
13306
|
+
rs = self.__cardinfo.AddEntityId(entity_id)
|
|
13307
|
+
if not rs:
|
|
13308
|
+
raise ValueError("Failed to add entity ID")
|
|
13309
|
+
|
|
13310
|
+
def remove_entity_id(self, entity_id: int) -> None:
|
|
13311
|
+
"""Removes an entity ID from the sequence by value."""
|
|
13312
|
+
rs = self.__cardinfo.RemoveEntityId(entity_id)
|
|
13313
|
+
if not rs:
|
|
13314
|
+
raise ValueError("Failed to remove entity ID")
|
|
13315
|
+
|
|
13316
|
+
def replace_all_entity_ids(self, new_entity_ids: list[int], validate_ids: bool = True) -> None:
|
|
13317
|
+
"""Replaces the entire sequence of entity IDs with a new list.
|
|
13318
|
+
|
|
13319
|
+
Args:
|
|
13320
|
+
new_entity_ids: The new entity IDs to set. Pass an empty list to clear
|
|
13321
|
+
the sequence.
|
|
13322
|
+
validate_ids: If ``True`` (default), validates each ID against the range
|
|
13323
|
+
constraints for the current entity type. If ``False``, accepts all
|
|
13324
|
+
values without validation.
|
|
13325
|
+
Example:
|
|
13326
|
+
>>> card.replace_all_entity_ids([1001, 1002, 1003])
|
|
13327
|
+
>>> card.replace_all_entity_ids([]) # Clears the sequence
|
|
13328
|
+
"""
|
|
13329
|
+
cs_new_entity_ids = System.Array[System.Int32](new_entity_ids)
|
|
13330
|
+
self.__cardinfo.ReplaceAllEntityIds(cs_new_entity_ids, validate_ids)
|
|
13331
|
+
self.last_status_message()
|
|
13332
|
+
|
|
13333
|
+
class SET1NAS(N2PCard):
|
|
13334
|
+
|
|
13335
|
+
def __init__(self, cardinfo):
|
|
13336
|
+
super().__init__(cardinfo)
|
|
13337
|
+
self.__cardinfo = cardinfo
|
|
13338
|
+
|
|
13339
|
+
@property
|
|
13340
|
+
def SID(self) -> int:
|
|
13341
|
+
"""
|
|
13342
|
+
Identification number of the single-point constraint set
|
|
13343
|
+
"""
|
|
13344
|
+
return self.__cardinfo.SID
|
|
13345
|
+
|
|
13346
|
+
@SID.setter
|
|
13347
|
+
def SID(self, value: int) -> None:
|
|
13348
|
+
self.__cardinfo.SID = value
|
|
13349
|
+
self.last_status_message()
|
|
13350
|
+
|
|
13351
|
+
@property
|
|
13352
|
+
def HasExplicitList(self) -> bool:
|
|
13353
|
+
"""Indicates whether the SET1 card uses an explicit list of entity IDs (standard mode).
|
|
13354
|
+
When true, the entity IDs are available via the EntityIds property.
|
|
13355
|
+
"""
|
|
13356
|
+
return self.__cardinfo.HasExplicitList
|
|
13357
|
+
|
|
13358
|
+
@property
|
|
13359
|
+
def EntityIds(self) -> list[int]:
|
|
13360
|
+
"""Gets the expanded array of structural grid point or element IDs (IDs mode only).
|
|
13361
|
+
Returns a copy to prevent external modification of internal state."""
|
|
13362
|
+
return list(self.__cardinfo.EntityIds)
|
|
13363
|
+
|
|
13364
|
+
def contains_entity_id(self, entity_id: int) -> bool:
|
|
13365
|
+
"""Determines whether the entity ID list contains the specified ID."""
|
|
13366
|
+
return self.__cardinfo.ContainsEntityId(entity_id)
|
|
13367
|
+
|
|
13368
|
+
def add_entity_id(self, entity_id: int) -> None:
|
|
13369
|
+
"""Adds a new entity ID to the end of the list, enforcing uniqueness and positive value."""
|
|
13370
|
+
rs = self.__cardinfo.AddEntityId(entity_id)
|
|
13371
|
+
if not rs:
|
|
13372
|
+
raise ValueError("Failed to add entity ID")
|
|
13373
|
+
|
|
13374
|
+
def remove_entity_id(self, entity_id: int) -> None:
|
|
13375
|
+
"""Removes the first occurrence of the specified entity ID from the list."""
|
|
13376
|
+
rs = self.__cardinfo.RemoveEntityId(entity_id)
|
|
13377
|
+
if not rs:
|
|
13378
|
+
raise ValueError("Failed to remove entity ID")
|
|
13379
|
+
|
|
13380
|
+
def replace_all_entity_ids(self, new_entity_ids: list[int]) -> None:
|
|
13381
|
+
"""Replaces the entire entity ID list with a new set of IDs. Automatically removes
|
|
13382
|
+
duplicates and validates all values. Can transition from SKIN mode to IDs mode.
|
|
13383
|
+
This is the only method that clears contextual parsing errors (THRU grammar
|
|
13384
|
+
violations from initial parsing)."""
|
|
13385
|
+
cs_new_entity_ids = System.Array[System.Int32](new_entity_ids)
|
|
13386
|
+
self.__cardinfo.ReplaceAllEntityIds(cs_new_entity_ids)
|
|
13387
|
+
self.last_status_message()
|
|
13388
|
+
|
|
13389
|
+
class SET1OPT(N2PCard):
|
|
13390
|
+
|
|
13391
|
+
def __init__(self, cardinfo):
|
|
13392
|
+
super().__init__(cardinfo)
|
|
13393
|
+
self.__cardinfo = cardinfo
|
|
13394
|
+
|
|
13395
|
+
@property
|
|
13396
|
+
def SID(self) -> int:
|
|
13397
|
+
"""
|
|
13398
|
+
Identification number of the single-point constraint set
|
|
13399
|
+
"""
|
|
13400
|
+
return self.__cardinfo.SID
|
|
13401
|
+
|
|
13402
|
+
@SID.setter
|
|
13403
|
+
def SID(self, value: int) -> None:
|
|
13404
|
+
self.__cardinfo.SID = value
|
|
13405
|
+
self.last_status_message()
|
|
13406
|
+
|
|
13407
|
+
|
|
13408
|
+
@property
|
|
13409
|
+
def EntityIds(self) -> list[int]:
|
|
13410
|
+
"""Gets the expanded array of structural grid point or element IDs..
|
|
13411
|
+
Returns a copy to prevent external modification of internal state."""
|
|
13412
|
+
return list(self.__cardinfo.EntityIds)
|
|
13413
|
+
|
|
13414
|
+
def contains_entity_id(self, entity_id: int) -> bool:
|
|
13415
|
+
"""Determines whether the entity ID list contains the specified ID."""
|
|
13416
|
+
return self.__cardinfo.ContainsEntityId(entity_id)
|
|
13417
|
+
|
|
13418
|
+
def add_entity_id(self, entity_id: int) -> None:
|
|
13419
|
+
"""Adds a new entity ID to the end of the list, enforcing uniqueness and positive value."""
|
|
13420
|
+
rs = self.__cardinfo.AddEntityId(entity_id)
|
|
13421
|
+
if not rs:
|
|
13422
|
+
raise ValueError("Failed to add entity ID")
|
|
13423
|
+
|
|
13424
|
+
def remove_entity_id(self, entity_id: int) -> None:
|
|
13425
|
+
"""Removes the first occurrence of the specified entity ID from the list."""
|
|
13426
|
+
rs = self.__cardinfo.RemoveEntityId(entity_id)
|
|
13427
|
+
if not rs:
|
|
13428
|
+
raise ValueError("Failed to remove entity ID")
|
|
13429
|
+
|
|
13430
|
+
def replace_all_entity_ids(self, new_entity_ids: list[int]) -> None:
|
|
13431
|
+
"""Replaces the entire entity ID list with a new set of IDs. Automatically removes
|
|
13432
|
+
duplicates and validates all values. This is the only method that clears contextual parsing errors
|
|
13433
|
+
(THRU grammar violations from initial parsing)."""
|
|
13434
|
+
|
|
13435
|
+
cs_new_entity_ids = System.Array[System.Int32](new_entity_ids)
|
|
13436
|
+
self.__cardinfo.ReplaceAllEntityIds(cs_new_entity_ids)
|
|
13437
|
+
self.last_status_message()
|
|
13438
|
+
|
|
13062
13439
|
class SPCNAS(N2PCard):
|
|
13063
13440
|
|
|
13064
13441
|
def __init__(self, cardinfo):
|
|
@@ -13397,11 +13774,17 @@ CONSTRUCTDICT = {
|
|
|
13397
13774
|
"RBE2": RBE2,
|
|
13398
13775
|
"RBE3": RBE3,
|
|
13399
13776
|
"RSPLINE": RSPLINE,
|
|
13777
|
+
"SET_OPTISTRUCT": SETOPT,
|
|
13778
|
+
"SET1_NASTRAN": SET1NAS,
|
|
13779
|
+
"SET1_OPTISTRUCT": SET1OPT,
|
|
13780
|
+
#"SET3_NASTRAN": SET3NAS,
|
|
13781
|
+
#"SET3_OPTISTRUCT": SET3OPT,
|
|
13400
13782
|
"SPC_NASTRAN": SPCNAS,
|
|
13401
13783
|
"SPCD_NASTRAN": SPCDNAS,
|
|
13402
13784
|
"SPC1": SPC1,
|
|
13403
13785
|
"SPCADD": SPCADD,
|
|
13404
13786
|
"UNSUPPORTED": N2PCard,
|
|
13787
|
+
"FIELD_MAPPING_ERROR": N2PCard,
|
|
13405
13788
|
"FIELD_MAPPING_ERROR_NASTRAN": N2PCard,
|
|
13406
13789
|
"FIELD_MAPPING_ERROR_OPTISTRUCT": N2PCard
|
|
13407
13790
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"""Constants of the NaxToPy package"""
|
|
2
2
|
|
|
3
3
|
# NaxToPy Version
|
|
4
|
-
VERSION = "3.
|
|
4
|
+
VERSION = "3.3.0"
|
|
5
5
|
|
|
6
6
|
# Supported for Naxto:
|
|
7
|
-
NAXTO_VERSION = '
|
|
8
|
-
NAXTO_STEP = "
|
|
9
|
-
NAXTO_ADVANCED_INSTALLER = "
|
|
7
|
+
NAXTO_VERSION = '2026R0'
|
|
8
|
+
NAXTO_STEP = "0"
|
|
9
|
+
NAXTO_ADVANCED_INSTALLER = "2026.0.0"
|
|
10
10
|
|
|
11
11
|
# Assembly version of NaxToModel.dll
|
|
12
|
-
VIZZER_COMPATIBILITY = ("
|
|
12
|
+
VIZZER_COMPATIBILITY = ("6.0.0.0")
|
|
13
13
|
"""Tuple with the compatible versions of NaxToModel.dll"""
|
|
14
14
|
|
|
15
15
|
# PYTHON EXTERNO ----------------------------------------------------------------------------------
|
|
@@ -698,6 +698,12 @@ own information message. Use the following structure as a standard message (I +
|
|
|
698
698
|
message = f"W301: the name for the new load case already exist. It has been rename to '{name}'"
|
|
699
699
|
N2PLog._N2PLog__logger.warning(message)
|
|
700
700
|
|
|
701
|
+
@staticmethod
|
|
702
|
+
def W302() -> None:
|
|
703
|
+
""" Warning raised when not all the inputs components are in N2PResult.Components
|
|
704
|
+
"""
|
|
705
|
+
message = f"W302: A component introduced is not in the results component list of a load case"
|
|
706
|
+
N2PLog._N2PLog__logger.warning(message)
|
|
701
707
|
|
|
702
708
|
@staticmethod
|
|
703
709
|
def W500(listids) -> None:
|