diff --git a/core/src/main/resources/l10n/messages.properties b/core/src/main/resources/l10n/messages.properties index 6c838ce14..0b8d9d418 100644 --- a/core/src/main/resources/l10n/messages.properties +++ b/core/src/main/resources/l10n/messages.properties @@ -909,44 +909,48 @@ compaddbuttons.askPosition.Inserthere = Insert here compaddbuttons.askPosition.Addtotheend = Add to the end compaddbuttons.askPosition.Cancel = Cancel -! Component Analysis Dialog -componentanalysisdlg.componentanalysis = Component analysis -componentanalysisdlg.lbl.winddir = Wind direction: -componentanalysisdlg.TitledBorder.warnings = Warnings: -componentanalysisdlg.ToggleBut.worst = Worst -componentanalysisdlg.lbl.angleofattack = Angle of attack: -componentanalysisdlg.lbl.machnumber = Mach number: -componentanalysisdlg.lbl.rollrate = Roll rate: -componentanalysisdlg.lbl.activestages = Active stages: -componentanalysisdlg.lbl.motorconf = Motor configuration: -componentanalysisdlg.TabStability.Col = Component Name -componentanalysisdlg.TabStability.Col.EachMass = Instance Mass -componentanalysisdlg.TabStability.Col.AllMass = Aggregate Mass -componentanalysisdlg.TabStability.Col.CG = Aggregate CG Location -componentanalysisdlg.TabStability.Col.CP = CP -componentanalysisdlg.TabStability = Stability -componentanalysisdlg.TabStability.ttip = Stability information -componentanalysisdlg.dragTableModel.Col.Component = Component -componentanalysisdlg.dragTableModel.Col.Pressure = Pressure CD -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.friction = Friction CD -componentanalysisdlg.dragTableModel.Col.total = Total CD -componentanalysisdlg.dragTabchar = Drag characteristics -componentanalysisdlg.dragTabchar.ttip = Drag characteristics -componentanalysisdlg.rollTableModel.Col.component = Component -componentanalysisdlg.rollTableModel.Col.rollforc = Roll forcing coefficient -componentanalysisdlg.rollTableModel.Col.rolldamp = Roll damping coefficient -componentanalysisdlg.rollTableModel.Col.total = Total Cl -componentanalysisdlg.rollTableModel = Roll dynamics -componentanalysisdlg.rollTableModel.ttip = Roll dynamics -componentanalysisdlg.println.closingmethod = Closing method called: -componentanalysisdlg.println.settingnam = SETTING NAN VALUES -componentanalysisdlg.lbl.reflenght = Reference length: -componentanalysisdlg.lbl.refarea = Reference area: +! ComponentAnalysisDialog +ComponentAnalysisDialog.componentanalysis = Component analysis +ComponentAnalysisDialog.tab.General = General +ComponentAnalysisDialog.tab.PlotExport = Plot / Export + +! ComponentAnalysisGeneralTab +ComponentAnalysisGeneralTab.lbl.winddir = Wind direction: +ComponentAnalysisGeneralTab.TitledBorder.warnings = Warnings: +ComponentAnalysisGeneralTab.ToggleBut.worst = Worst +ComponentAnalysisGeneralTab.lbl.angleofattack = Angle of attack: +ComponentAnalysisGeneralTab.lbl.machnumber = Mach number: +ComponentAnalysisGeneralTab.lbl.rollrate = Roll rate: +ComponentAnalysisGeneralTab.lbl.activestages = Active stages: +ComponentAnalysisGeneralTab.lbl.motorconf = Motor configuration: +ComponentAnalysisGeneralTab.TabStability.Col = Component Name +ComponentAnalysisGeneralTab.TabStability.Col.EachMass = Instance Mass +ComponentAnalysisGeneralTab.TabStability.Col.AllMass = Aggregate Mass +ComponentAnalysisGeneralTab.TabStability.Col.CG = Aggregate CG Location +ComponentAnalysisGeneralTab.TabStability.Col.CP = CP +ComponentAnalysisGeneralTab.TabStability = Stability +ComponentAnalysisGeneralTab.TabStability.ttip = Stability information +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Component +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Pressure CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Friction CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Total CD +ComponentAnalysisGeneralTab.dragTabchar = Drag characteristics +ComponentAnalysisGeneralTab.dragTabchar.ttip = Drag characteristics +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Component +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Roll forcing coefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Roll damping coefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Total Cl +ComponentAnalysisGeneralTab.rollTableModel = Roll dynamics +ComponentAnalysisGeneralTab.rollTableModel.ttip = Roll dynamics +ComponentAnalysisGeneralTab.println.closingmethod = Closing method called: +ComponentAnalysisGeneralTab.println.settingnam = SETTING NAN VALUES +ComponentAnalysisGeneralTab.lbl.reflenght = Reference length: +ComponentAnalysisGeneralTab.lbl.refarea = Reference area: !componentanalysisdlg.But.close =Close -componentanalysisdlg.TabStability.Col.Component = Component -componentanalysisdlg.TOTAL = Total (Rocket) -componentanalysisdlg.noWarnings = No warnings. +ComponentAnalysisGeneralTab.TabStability.Col.Component = Component +ComponentAnalysisGeneralTab.TOTAL = Total (Rocket) +ComponentAnalysisGeneralTab.noWarnings = No warnings. ! CAPlotExportDialog CAPlotExportDialog.title = Plot / Export Component Analysis diff --git a/core/src/main/resources/l10n/messages_ar.properties b/core/src/main/resources/l10n/messages_ar.properties index 1bcbe92a6..190eac1d8 100644 --- a/core/src/main/resources/l10n/messages_ar.properties +++ b/core/src/main/resources/l10n/messages_ar.properties @@ -747,43 +747,43 @@ compaddbuttons.askPosition.Addtotheend = إضف للنهاية compaddbuttons.askPosition.Cancel = إلغاء ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = تحليل المكونات -componentanalysisdlg.lbl.winddir = إتجاه الريح -componentanalysisdlg.TitledBorder.warnings = :تحذيرات -componentanalysisdlg.ToggleBut.worst = أسوأ -componentanalysisdlg.lbl.angleofattack = :زاوية المواجهة -componentanalysisdlg.lbl.machnumber = :رقم ماخ -componentanalysisdlg.lbl.rollrate = :معدل الإلتفاف -componentanalysisdlg.lbl.activestages = :المراحل النشطة -componentanalysisdlg.lbl.motorconf = :إعدادات المحرك -componentanalysisdlg.TabStability.Col = إسم المكون -componentanalysisdlg.TabStability.Col.EachMass = كتلة المثيل -componentanalysisdlg.TabStability.Col.AllMass = الكتلة الكلية -componentanalysisdlg.TabStability.Col.CG = موقع مركز الجاذبية الكلي -componentanalysisdlg.TabStability.Col.CP = مركز الضغط -componentanalysisdlg.TabStability = الإستقرار -componentanalysisdlg.TabStability.ttip = معلومات الإستقرار -componentanalysisdlg.dragTableModel.Col.Component = مكون -componentanalysisdlg.dragTableModel.Col.Pressure = مركز الضغط -componentanalysisdlg.dragTableModel.Col.Base = معامل السحب الأساسي -componentanalysisdlg.dragTableModel.Col.friction = معامل مقاومة الإحتكاك -componentanalysisdlg.dragTableModel.Col.total = معامل السحب الكلي -componentanalysisdlg.dragTabchar = خصائص السحب -componentanalysisdlg.dragTabchar.ttip = خصائص السحب -componentanalysisdlg.rollTableModel.Col.component = المكون -componentanalysisdlg.rollTableModel.Col.rollforc = معامل تأثير الإلتفاف -componentanalysisdlg.rollTableModel.Col.rolldamp = معامل تخميد الإلتفاف -componentanalysisdlg.rollTableModel.Col.total = إجمالي معامل الإلتفاف -componentanalysisdlg.rollTableModel = ديناميات الإلتفاف -componentanalysisdlg.rollTableModel.ttip = ديناميات الإلتفاف -componentanalysisdlg.println.closingmethod = :طريقة الإغلاق تسمى -componentanalysisdlg.println.settingnam = عدم ضبط قيم الأرقام -componentanalysisdlg.lbl.reflenght = :طول مرجعي -componentanalysisdlg.lbl.refarea = :المنطقة المرجعية +ComponentAnalysisDialog.componentanalysis = تحليل المكونات +ComponentAnalysisGeneralTab.lbl.winddir = إتجاه الريح +ComponentAnalysisGeneralTab.TitledBorder.warnings = :تحذيرات +ComponentAnalysisGeneralTab.ToggleBut.worst = أسوأ +ComponentAnalysisGeneralTab.lbl.angleofattack = :زاوية المواجهة +ComponentAnalysisGeneralTab.lbl.machnumber = :رقم ماخ +ComponentAnalysisGeneralTab.lbl.rollrate = :معدل الإلتفاف +ComponentAnalysisGeneralTab.lbl.activestages = :المراحل النشطة +ComponentAnalysisGeneralTab.lbl.motorconf = :إعدادات المحرك +ComponentAnalysisGeneralTab.TabStability.Col = إسم المكون +ComponentAnalysisGeneralTab.TabStability.Col.EachMass = كتلة المثيل +ComponentAnalysisGeneralTab.TabStability.Col.AllMass = الكتلة الكلية +ComponentAnalysisGeneralTab.TabStability.Col.CG = موقع مركز الجاذبية الكلي +ComponentAnalysisGeneralTab.TabStability.Col.CP = مركز الضغط +ComponentAnalysisGeneralTab.TabStability = الإستقرار +ComponentAnalysisGeneralTab.TabStability.ttip = معلومات الإستقرار +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = مكون +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = مركز الضغط +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = معامل السحب الأساسي +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = معامل مقاومة الإحتكاك +ComponentAnalysisGeneralTab.dragTableModel.Col.total = معامل السحب الكلي +ComponentAnalysisGeneralTab.dragTabchar = خصائص السحب +ComponentAnalysisGeneralTab.dragTabchar.ttip = خصائص السحب +ComponentAnalysisGeneralTab.rollTableModel.Col.component = المكون +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = معامل تأثير الإلتفاف +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = معامل تخميد الإلتفاف +ComponentAnalysisGeneralTab.rollTableModel.Col.total = إجمالي معامل الإلتفاف +ComponentAnalysisGeneralTab.rollTableModel = ديناميات الإلتفاف +ComponentAnalysisGeneralTab.rollTableModel.ttip = ديناميات الإلتفاف +ComponentAnalysisGeneralTab.println.closingmethod = :طريقة الإغلاق تسمى +ComponentAnalysisGeneralTab.println.settingnam = عدم ضبط قيم الأرقام +ComponentAnalysisGeneralTab.lbl.reflenght = :طول مرجعي +ComponentAnalysisGeneralTab.lbl.refarea = :المنطقة المرجعية !componentanalysisdlg.But.close = إغلاق -componentanalysisdlg.TabStability.Col.Component = المكون -componentanalysisdlg.TOTAL = الكلي -componentanalysisdlg.noWarnings = لا تحذيرات +ComponentAnalysisGeneralTab.TabStability.Col.Component = المكون +ComponentAnalysisGeneralTab.TOTAL = الكلي +ComponentAnalysisGeneralTab.noWarnings = لا تحذيرات ! CADomainDataType CADomainDataType.lbl.winddir = إتجاه الريح diff --git a/core/src/main/resources/l10n/messages_cs.properties b/core/src/main/resources/l10n/messages_cs.properties index 0168ea042..aafbf6947 100644 --- a/core/src/main/resources/l10n/messages_cs.properties +++ b/core/src/main/resources/l10n/messages_cs.properties @@ -508,37 +508,37 @@ compaddbuttons.askPosition.Addtotheend = Pridej na konec compaddbuttons.askPosition.Cancel = Zru\u0161it ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = Analza soucstky -componentanalysisdlg.lbl.winddir = Smer vetru: -componentanalysisdlg.TitledBorder.warnings = Varovn: -componentanalysisdlg.ToggleBut.worst = Nejhor\u0161 -componentanalysisdlg.lbl.angleofattack = hel nbehu: -componentanalysisdlg.lbl.machnumber = Machovo cslo: -componentanalysisdlg.lbl.rollrate = Rychlost otcen: -componentanalysisdlg.lbl.activestages = Startovac rampa: -componentanalysisdlg.lbl.motorconf = Nastaven motoru: -componentanalysisdlg.TabStability.Col = Komponenta -componentanalysisdlg.TabStability = Stabilita -componentanalysisdlg.TabStability.ttip = Informace o stabilite -componentanalysisdlg.dragTableModel.Col.Component = Komponenta -componentanalysisdlg.dragTableModel.Col.Pressure = Tlak CD -componentanalysisdlg.dragTableModel.Col.Base = Zkladn CD -componentanalysisdlg.dragTableModel.Col.friction = Tren CD -componentanalysisdlg.dragTableModel.Col.total = Celkem CD -componentanalysisdlg.dragTabchar = Vlastnosti trupu -componentanalysisdlg.dragTabchar.ttip = Drag characteristics -componentanalysisdlg.rollTableModel.Col.component = Komponenta -componentanalysisdlg.rollTableModel.Col.rollforc = Otcec koefficient -componentanalysisdlg.rollTableModel.Col.rolldamp = Otcec tlumc coefficient -componentanalysisdlg.rollTableModel.Col.total = Celkem Cl -componentanalysisdlg.rollTableModel = Otcec dynamika -componentanalysisdlg.rollTableModel.ttip = Otcec dynamika -componentanalysisdlg.println.closingmethod = Jmno uzavrac metody: -componentanalysisdlg.println.settingnam = Nastaven NAN hodnot -componentanalysisdlg.lbl.reflenght = Doporucen dlka: -componentanalysisdlg.lbl.refarea = Doporucen plocha: +ComponentAnalysisDialog.componentanalysis = Analza soucstky +ComponentAnalysisGeneralTab.lbl.winddir = Smer vetru: +ComponentAnalysisGeneralTab.TitledBorder.warnings = Varovn: +ComponentAnalysisGeneralTab.ToggleBut.worst = Nejhor\u0161 +ComponentAnalysisGeneralTab.lbl.angleofattack = hel nbehu: +ComponentAnalysisGeneralTab.lbl.machnumber = Machovo cslo: +ComponentAnalysisGeneralTab.lbl.rollrate = Rychlost otcen: +ComponentAnalysisGeneralTab.lbl.activestages = Startovac rampa: +ComponentAnalysisGeneralTab.lbl.motorconf = Nastaven motoru: +ComponentAnalysisGeneralTab.TabStability.Col = Komponenta +ComponentAnalysisGeneralTab.TabStability = Stabilita +ComponentAnalysisGeneralTab.TabStability.ttip = Informace o stabilite +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Komponenta +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Tlak CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Zkladn CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Tren CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Celkem CD +ComponentAnalysisGeneralTab.dragTabchar = Vlastnosti trupu +ComponentAnalysisGeneralTab.dragTabchar.ttip = Drag characteristics +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Komponenta +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Otcec koefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Otcec tlumc coefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Celkem Cl +ComponentAnalysisGeneralTab.rollTableModel = Otcec dynamika +ComponentAnalysisGeneralTab.rollTableModel.ttip = Otcec dynamika +ComponentAnalysisGeneralTab.println.closingmethod = Jmno uzavrac metody: +ComponentAnalysisGeneralTab.println.settingnam = Nastaven NAN hodnot +ComponentAnalysisGeneralTab.lbl.reflenght = Doporucen dlka: +ComponentAnalysisGeneralTab.lbl.refarea = Doporucen plocha: !componentanalysisdlg.But.close = Zavrt -componentanalysisdlg.TabStability.Col.Component = Komponenta +ComponentAnalysisGeneralTab.TabStability.Col.Component = Komponenta ! CADomainDataType CADomainDataType.lbl.winddir = Smer vetru diff --git a/core/src/main/resources/l10n/messages_de.properties b/core/src/main/resources/l10n/messages_de.properties index a6352135a..64465e4b1 100644 --- a/core/src/main/resources/l10n/messages_de.properties +++ b/core/src/main/resources/l10n/messages_de.properties @@ -565,37 +565,37 @@ compaddbuttons.askPosition.Addtotheend = Zum Ende hinzuf compaddbuttons.askPosition.Cancel = Abbrechen ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = Component analysis -componentanalysisdlg.lbl.winddir = Windrichtung -componentanalysisdlg.TitledBorder.warnings = Warnungen: -componentanalysisdlg.ToggleBut.worst = Worst -componentanalysisdlg.lbl.angleofattack = Angriffswinkel: -componentanalysisdlg.lbl.machnumber = Machzahl: -componentanalysisdlg.lbl.rollrate = Rollrate: -componentanalysisdlg.lbl.activestages = Aktive Stufen: -componentanalysisdlg.lbl.motorconf = Motorkonfiguration: -componentanalysisdlg.TabStability.Col = Komponente -componentanalysisdlg.TabStability = Stabilitt -componentanalysisdlg.TabStability.ttip = Stabilittsinformationen -componentanalysisdlg.dragTableModel.Col.Component = Komponente -componentanalysisdlg.dragTableModel.Col.Pressure = Druck CD -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.friction = Reibung CD -componentanalysisdlg.dragTableModel.Col.total = Gesamt CD -componentanalysisdlg.dragTabchar = Luftwiderstand -componentanalysisdlg.dragTabchar.ttip = Luftwiderstands-Eigenschaften -componentanalysisdlg.rollTableModel.Col.component = Komponente -componentanalysisdlg.rollTableModel.Col.rollforc = Roll forcing coefficient -componentanalysisdlg.rollTableModel.Col.rolldamp = Roll damping coefficient -componentanalysisdlg.rollTableModel.Col.total = Gesamt Cl -componentanalysisdlg.rollTableModel = Rolldynamik -componentanalysisdlg.rollTableModel.ttip = Rolldynamik -componentanalysisdlg.println.closingmethod = Closing method called: -componentanalysisdlg.println.settingnam = SETTING NAN VALUES -componentanalysisdlg.lbl.reflenght = Referenzlnge: -componentanalysisdlg.lbl.refarea = Referenzflche: +ComponentAnalysisDialog.componentanalysis = Component analysis +ComponentAnalysisGeneralTab.lbl.winddir = Windrichtung +ComponentAnalysisGeneralTab.TitledBorder.warnings = Warnungen: +ComponentAnalysisGeneralTab.ToggleBut.worst = Worst +ComponentAnalysisGeneralTab.lbl.angleofattack = Angriffswinkel: +ComponentAnalysisGeneralTab.lbl.machnumber = Machzahl: +ComponentAnalysisGeneralTab.lbl.rollrate = Rollrate: +ComponentAnalysisGeneralTab.lbl.activestages = Aktive Stufen: +ComponentAnalysisGeneralTab.lbl.motorconf = Motorkonfiguration: +ComponentAnalysisGeneralTab.TabStability.Col = Komponente +ComponentAnalysisGeneralTab.TabStability = Stabilitt +ComponentAnalysisGeneralTab.TabStability.ttip = Stabilittsinformationen +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Komponente +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Druck CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Reibung CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Gesamt CD +ComponentAnalysisGeneralTab.dragTabchar = Luftwiderstand +ComponentAnalysisGeneralTab.dragTabchar.ttip = Luftwiderstands-Eigenschaften +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Komponente +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Roll forcing coefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Roll damping coefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Gesamt Cl +ComponentAnalysisGeneralTab.rollTableModel = Rolldynamik +ComponentAnalysisGeneralTab.rollTableModel.ttip = Rolldynamik +ComponentAnalysisGeneralTab.println.closingmethod = Closing method called: +ComponentAnalysisGeneralTab.println.settingnam = SETTING NAN VALUES +ComponentAnalysisGeneralTab.lbl.reflenght = Referenzlnge: +ComponentAnalysisGeneralTab.lbl.refarea = Referenzflche: !componentanalysisdlg.But.close =Close -componentanalysisdlg.TabStability.Col.Component = Komponente +ComponentAnalysisGeneralTab.TabStability.Col.Component = Komponente ! CADomainDataType CADomainDataType.lbl.winddir = Windrichtung diff --git a/core/src/main/resources/l10n/messages_es.properties b/core/src/main/resources/l10n/messages_es.properties index 3d6b17f86..c9a053ac1 100644 --- a/core/src/main/resources/l10n/messages_es.properties +++ b/core/src/main/resources/l10n/messages_es.properties @@ -1282,43 +1282,43 @@ compaddbuttons.askPosition.Inserthere = Insertar aqu\u00ed compaddbuttons.lbl.Youcanchange = Puede cambiar la operaci\u00f3n con las preferencias por defecto compaddbuttons.lbl.insertcomp = \u00bfInsertar el componente despu\u00e9s del actual o al final? -componentanalysisdlg.TOTAL = Total -componentanalysisdlg.TabStability = Estabilidad -componentanalysisdlg.TabStability.Col = Componente -componentanalysisdlg.TabStability.Col.CG = CG -componentanalysisdlg.TabStability.Col.CP = CP +ComponentAnalysisGeneralTab.TOTAL = Total +ComponentAnalysisGeneralTab.TabStability = Estabilidad +ComponentAnalysisGeneralTab.TabStability.Col = Componente +ComponentAnalysisGeneralTab.TabStability.Col.CG = CG +ComponentAnalysisGeneralTab.TabStability.Col.CP = CP !componentanalysisdlg.But.close = Cerrar -componentanalysisdlg.TabStability.Col.Component = Componente +ComponentAnalysisGeneralTab.TabStability.Col.Component = Componente componentanalysisdlg.TabStability.Col.Mass = Masa -componentanalysisdlg.TabStability.ttip = Informaci\u00f3n de Estabilidad -componentanalysisdlg.TitledBorder.warnings = Advertencias: -componentanalysisdlg.ToggleBut.worst = Peor +ComponentAnalysisGeneralTab.TabStability.ttip = Informaci\u00f3n de Estabilidad +ComponentAnalysisGeneralTab.TitledBorder.warnings = Advertencias: +ComponentAnalysisGeneralTab.ToggleBut.worst = Peor ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = An\u00e1lisis de los componentes -componentanalysisdlg.dragTabchar = Caracter\u00edsticas de rozamiento -componentanalysisdlg.dragTabchar.ttip = Coeficientes de arrastre de los componentes. -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.Component = Componente -componentanalysisdlg.dragTableModel.Col.Pressure = Presi\u00f3n CD -componentanalysisdlg.dragTableModel.Col.friction = Rozamiento CD -componentanalysisdlg.dragTableModel.Col.total = Total CD -componentanalysisdlg.lbl.activestages = Etapas activas: -componentanalysisdlg.lbl.angleofattack = \u00c1ngulo de ataque: -componentanalysisdlg.lbl.machnumber = N\u00famero Mach: -componentanalysisdlg.lbl.motorconf = Configuraci\u00f3n del motor: -componentanalysisdlg.lbl.refarea = \u00c1rea de referencia: -componentanalysisdlg.lbl.reflenght = Di\u00e1metro de referencia: -componentanalysisdlg.lbl.rollrate = Valor de rotaci\u00f3n: -componentanalysisdlg.lbl.winddir = Direcci\u00f3n del viento: -componentanalysisdlg.noWarnings = Sin advertencias. -componentanalysisdlg.println.closingmethod = Llamar al m\u00e9todo de cierre: -componentanalysisdlg.println.settingnam = AJUSTANDO VALORES NAN -componentanalysisdlg.rollTableModel = Din\u00e1mica de rotaci\u00f3n -componentanalysisdlg.rollTableModel.Col.component = Componente -componentanalysisdlg.rollTableModel.Col.rolldamp = Coeficiente de correcci\u00f3n -componentanalysisdlg.rollTableModel.Col.rollforc = Coeficiente de rotaci\u00f3n -componentanalysisdlg.rollTableModel.Col.total = Total Cl -componentanalysisdlg.rollTableModel.ttip = Din\u00e1mica del movimiento de rotaci\u00f3n del cohete (spin) +ComponentAnalysisDialog.componentanalysis = An\u00e1lisis de los componentes +ComponentAnalysisGeneralTab.dragTabchar = Caracter\u00edsticas de rozamiento +ComponentAnalysisGeneralTab.dragTabchar.ttip = Coeficientes de arrastre de los componentes. +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Componente +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Presi\u00f3n CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Rozamiento CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Total CD +ComponentAnalysisGeneralTab.lbl.activestages = Etapas activas: +ComponentAnalysisGeneralTab.lbl.angleofattack = \u00c1ngulo de ataque: +ComponentAnalysisGeneralTab.lbl.machnumber = N\u00famero Mach: +ComponentAnalysisGeneralTab.lbl.motorconf = Configuraci\u00f3n del motor: +ComponentAnalysisGeneralTab.lbl.refarea = \u00c1rea de referencia: +ComponentAnalysisGeneralTab.lbl.reflenght = Di\u00e1metro de referencia: +ComponentAnalysisGeneralTab.lbl.rollrate = Valor de rotaci\u00f3n: +ComponentAnalysisGeneralTab.lbl.winddir = Direcci\u00f3n del viento: +ComponentAnalysisGeneralTab.noWarnings = Sin advertencias. +ComponentAnalysisGeneralTab.println.closingmethod = Llamar al m\u00e9todo de cierre: +ComponentAnalysisGeneralTab.println.settingnam = AJUSTANDO VALORES NAN +ComponentAnalysisGeneralTab.rollTableModel = Din\u00e1mica de rotaci\u00f3n +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Componente +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Coeficiente de correcci\u00f3n +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Coeficiente de rotaci\u00f3n +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Total Cl +ComponentAnalysisGeneralTab.rollTableModel.ttip = Din\u00e1mica del movimiento de rotaci\u00f3n del cohete (spin) ! CADomainDataType CADomainDataType.lbl.winddir = Direcci\u00f3n del viento diff --git a/core/src/main/resources/l10n/messages_fr.properties b/core/src/main/resources/l10n/messages_fr.properties index 700e4f7b2..7e71043be 100644 --- a/core/src/main/resources/l10n/messages_fr.properties +++ b/core/src/main/resources/l10n/messages_fr.properties @@ -1276,44 +1276,44 @@ compaddbuttons.askPosition.Inserthere = Ajouter ici compaddbuttons.lbl.Youcanchange = Vous pouvez modifier le fonctionnement par d\u00E9faut dans les pr\u00E9f\u00E9rences. compaddbuttons.lbl.insertcomp = Ins\u00E9rez la pi\u00E8ce apr\u00E8s l'\u00E9l\u00E9ment actuel ou en tant que dernier \u00E9l\u00E9ment? -componentanalysisdlg.TOTAL = Total -componentanalysisdlg.TabStability = Stabilit\u00E9 +ComponentAnalysisGeneralTab.TOTAL = Total +ComponentAnalysisGeneralTab.TabStability = Stabilit\u00E9 !componentanalysisdlg.TabStability.Col.Component = Pi\u00e8ce -componentanalysisdlg.TabStability.Col = Pi\u00E8ce -componentanalysisdlg.TabStability.Col.CG = CG -componentanalysisdlg.TabStability.Col.CP = CP +ComponentAnalysisGeneralTab.TabStability.Col = Pi\u00E8ce +ComponentAnalysisGeneralTab.TabStability.Col.CG = CG +ComponentAnalysisGeneralTab.TabStability.Col.CP = CP !componentanalysisdlg.but.close =Fermer -componentanalysisdlg.TabStability.Col.Component = Pi\u00E8ce +ComponentAnalysisGeneralTab.TabStability.Col.Component = Pi\u00E8ce componentanalysisdlg.TabStability.Col.Mass = Masse -componentanalysisdlg.TabStability.ttip = Information de stabilit\u00E9 -componentanalysisdlg.TitledBorder.warnings = Avertissements: -componentanalysisdlg.ToggleBut.worst = Pire +ComponentAnalysisGeneralTab.TabStability.ttip = Information de stabilit\u00E9 +ComponentAnalysisGeneralTab.TitledBorder.warnings = Avertissements: +ComponentAnalysisGeneralTab.ToggleBut.worst = Pire ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = Analyse pi\u00E8ce -componentanalysisdlg.dragTabchar = Caract\u00E9ristiques de tra\u00EEn\u00E9e -componentanalysisdlg.dragTabchar.ttip = Caract\u00E9ristiques de tra\u00EEn\u00E9e -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.Component = Pi\u00E8ce -componentanalysisdlg.dragTableModel.Col.Pressure = Pression CD -componentanalysisdlg.dragTableModel.Col.friction = Friction CD -componentanalysisdlg.dragTableModel.Col.total = Total CD -componentanalysisdlg.lbl.activestages = Etages actifs: -componentanalysisdlg.lbl.angleofattack = Angle d'attaque: -componentanalysisdlg.lbl.machnumber = Mach number: -componentanalysisdlg.lbl.motorconf = Configuration moteur: -componentanalysisdlg.lbl.refarea = Aire de r\u00E9f\u00E9rence: -componentanalysisdlg.lbl.reflenght = Longueur de r\u00E9f\u00E9rence: -componentanalysisdlg.lbl.rollrate = Taux de roulis: -componentanalysisdlg.lbl.winddir = Direction du vent: -componentanalysisdlg.noWarnings = Pas d'alertes. -componentanalysisdlg.println.closingmethod = M\u00E9thode de cl\u00F4ture appel\u00E9e: -componentanalysisdlg.println.settingnam = SETTING NAN VALUES -componentanalysisdlg.rollTableModel = Dynamique du roulis -componentanalysisdlg.rollTableModel.Col.component = Pi\u00E8ce -componentanalysisdlg.rollTableModel.Col.rolldamp = Coefficient amortisseur de roulis -componentanalysisdlg.rollTableModel.Col.rollforc = Coefficient de for\u00E7age de roulis -componentanalysisdlg.rollTableModel.Col.total = Total Cl -componentanalysisdlg.rollTableModel.ttip = Dynamique du roulis +ComponentAnalysisDialog.componentanalysis = Analyse pi\u00E8ce +ComponentAnalysisGeneralTab.dragTabchar = Caract\u00E9ristiques de tra\u00EEn\u00E9e +ComponentAnalysisGeneralTab.dragTabchar.ttip = Caract\u00E9ristiques de tra\u00EEn\u00E9e +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Pi\u00E8ce +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Pression CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Friction CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Total CD +ComponentAnalysisGeneralTab.lbl.activestages = Etages actifs: +ComponentAnalysisGeneralTab.lbl.angleofattack = Angle d'attaque: +ComponentAnalysisGeneralTab.lbl.machnumber = Mach number: +ComponentAnalysisGeneralTab.lbl.motorconf = Configuration moteur: +ComponentAnalysisGeneralTab.lbl.refarea = Aire de r\u00E9f\u00E9rence: +ComponentAnalysisGeneralTab.lbl.reflenght = Longueur de r\u00E9f\u00E9rence: +ComponentAnalysisGeneralTab.lbl.rollrate = Taux de roulis: +ComponentAnalysisGeneralTab.lbl.winddir = Direction du vent: +ComponentAnalysisGeneralTab.noWarnings = Pas d'alertes. +ComponentAnalysisGeneralTab.println.closingmethod = M\u00E9thode de cl\u00F4ture appel\u00E9e: +ComponentAnalysisGeneralTab.println.settingnam = SETTING NAN VALUES +ComponentAnalysisGeneralTab.rollTableModel = Dynamique du roulis +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Pi\u00E8ce +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Coefficient amortisseur de roulis +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Coefficient de for\u00E7age de roulis +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Total Cl +ComponentAnalysisGeneralTab.rollTableModel.ttip = Dynamique du roulis ! CADomainDataType CADomainDataType.lbl.winddir = Direction du vent diff --git a/core/src/main/resources/l10n/messages_it.properties b/core/src/main/resources/l10n/messages_it.properties index e607cf5cb..6c7e1015e 100644 --- a/core/src/main/resources/l10n/messages_it.properties +++ b/core/src/main/resources/l10n/messages_it.properties @@ -567,37 +567,37 @@ compaddbuttons.askPosition.Addtotheend = Aggiungi alla fine compaddbuttons.askPosition.Cancel = Annulla ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = Analisi del componente -componentanalysisdlg.lbl.winddir = Direzione del vento: -componentanalysisdlg.TitledBorder.warnings = Avvertimenti: -componentanalysisdlg.ToggleBut.worst = Peggiore -componentanalysisdlg.lbl.angleofattack = Angolo di attacco: -componentanalysisdlg.lbl.machnumber = Numero di Mach: -componentanalysisdlg.lbl.rollrate = Tasso di rollio: -componentanalysisdlg.lbl.activestages = Stadi attivi: -componentanalysisdlg.lbl.motorconf = Configurazione del motore: -componentanalysisdlg.TabStability.Col = Componente -componentanalysisdlg.TabStability = Stabilita' -componentanalysisdlg.TabStability.ttip = Informazioni sulla stabilita'Stability information -componentanalysisdlg.dragTableModel.Col.Component = Componente -componentanalysisdlg.dragTableModel.Col.Pressure = Pressione CD -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.friction = Attrito CD -componentanalysisdlg.dragTableModel.Col.total = Totale CD -componentanalysisdlg.dragTabchar = Caratteristiche di resistenza -componentanalysisdlg.dragTabchar.ttip = Caratteristiche di resistenza -componentanalysisdlg.rollTableModel.Col.component = Componente -componentanalysisdlg.rollTableModel.Col.rollforc = Roll forcing coefficient -componentanalysisdlg.rollTableModel.Col.rolldamp = Coefficiente smorzamento di rollio -componentanalysisdlg.rollTableModel.Col.total = Totale Cl -componentanalysisdlg.rollTableModel = Dinamiche di rollio -componentanalysisdlg.rollTableModel.ttip = Dinamiche di rollio -componentanalysisdlg.println.closingmethod = Sto chiudendo il metodo chiamato: -componentanalysisdlg.println.settingnam = IMPOSTAZIONI DEI VALORI NaN -componentanalysisdlg.lbl.reflenght = Lunghezza di riferimento: -componentanalysisdlg.lbl.refarea = Area di riferimento: +ComponentAnalysisDialog.componentanalysis = Analisi del componente +ComponentAnalysisGeneralTab.lbl.winddir = Direzione del vento: +ComponentAnalysisGeneralTab.TitledBorder.warnings = Avvertimenti: +ComponentAnalysisGeneralTab.ToggleBut.worst = Peggiore +ComponentAnalysisGeneralTab.lbl.angleofattack = Angolo di attacco: +ComponentAnalysisGeneralTab.lbl.machnumber = Numero di Mach: +ComponentAnalysisGeneralTab.lbl.rollrate = Tasso di rollio: +ComponentAnalysisGeneralTab.lbl.activestages = Stadi attivi: +ComponentAnalysisGeneralTab.lbl.motorconf = Configurazione del motore: +ComponentAnalysisGeneralTab.TabStability.Col = Componente +ComponentAnalysisGeneralTab.TabStability = Stabilita' +ComponentAnalysisGeneralTab.TabStability.ttip = Informazioni sulla stabilita'Stability information +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Componente +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Pressione CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Attrito CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Totale CD +ComponentAnalysisGeneralTab.dragTabchar = Caratteristiche di resistenza +ComponentAnalysisGeneralTab.dragTabchar.ttip = Caratteristiche di resistenza +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Componente +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Roll forcing coefficient +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Coefficiente smorzamento di rollio +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Totale Cl +ComponentAnalysisGeneralTab.rollTableModel = Dinamiche di rollio +ComponentAnalysisGeneralTab.rollTableModel.ttip = Dinamiche di rollio +ComponentAnalysisGeneralTab.println.closingmethod = Sto chiudendo il metodo chiamato: +ComponentAnalysisGeneralTab.println.settingnam = IMPOSTAZIONI DEI VALORI NaN +ComponentAnalysisGeneralTab.lbl.reflenght = Lunghezza di riferimento: +ComponentAnalysisGeneralTab.lbl.refarea = Area di riferimento: !componentanalysisdlg.But.close =Chiudi -componentanalysisdlg.TabStability.Col.Component = Componente +ComponentAnalysisGeneralTab.TabStability.Col.Component = Componente ! CADomainDataType CADomainDataType.lbl.winddir = Direzione del vento diff --git a/core/src/main/resources/l10n/messages_ja.properties b/core/src/main/resources/l10n/messages_ja.properties index 808131f48..dda06596a 100644 --- a/core/src/main/resources/l10n/messages_ja.properties +++ b/core/src/main/resources/l10n/messages_ja.properties @@ -592,42 +592,42 @@ compaddbuttons.askPosition.Addtotheend = \u6700\u5F8C\u306B\u8FFD\u52A0 compaddbuttons.askPosition.Cancel = \u30AD\u30E3\u30F3\u30BB\u30EB ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = \u90E8\u54C1\u89E3\u6790 -componentanalysisdlg.lbl.winddir = \u98A8\u5411\u304D\uFF1A -componentanalysisdlg.TitledBorder.warnings = \u30A8\u30E9\u30FC\uFF1A -componentanalysisdlg.ToggleBut.worst = Worst -componentanalysisdlg.lbl.angleofattack = \u8FCE\u3048\u89D2\uFF1A -componentanalysisdlg.lbl.machnumber = \u30DE\u30C3\u30CF\u6570\uFF1A -componentanalysisdlg.lbl.rollrate = \u89D2\u901F\u5EA6\uFF08\u30ED\u30FC\u30EB\uFF09\uFF1A -componentanalysisdlg.lbl.activestages = Active stages: -componentanalysisdlg.lbl.motorconf = Motor configuration: -componentanalysisdlg.TabStability.Col = \u90E8\u54C1 -componentanalysisdlg.TabStability.Col.CG = CG +ComponentAnalysisDialog.componentanalysis = \u90E8\u54C1\u89E3\u6790 +ComponentAnalysisGeneralTab.lbl.winddir = \u98A8\u5411\u304D\uFF1A +ComponentAnalysisGeneralTab.TitledBorder.warnings = \u30A8\u30E9\u30FC\uFF1A +ComponentAnalysisGeneralTab.ToggleBut.worst = Worst +ComponentAnalysisGeneralTab.lbl.angleofattack = \u8FCE\u3048\u89D2\uFF1A +ComponentAnalysisGeneralTab.lbl.machnumber = \u30DE\u30C3\u30CF\u6570\uFF1A +ComponentAnalysisGeneralTab.lbl.rollrate = \u89D2\u901F\u5EA6\uFF08\u30ED\u30FC\u30EB\uFF09\uFF1A +ComponentAnalysisGeneralTab.lbl.activestages = Active stages: +ComponentAnalysisGeneralTab.lbl.motorconf = Motor configuration: +ComponentAnalysisGeneralTab.TabStability.Col = \u90E8\u54C1 +ComponentAnalysisGeneralTab.TabStability.Col.CG = CG componentanalysisdlg.TabStability.Col.Mass = \u8CEA\u91CF -componentanalysisdlg.TabStability.Col.CP = CP -componentanalysisdlg.TabStability = \u5B89\u5B9A\u6027 -componentanalysisdlg.TabStability.ttip = \u5B89\u5B9A\u6027 -componentanalysisdlg.dragTableModel.Col.Component = \u90E8\u54C1 -componentanalysisdlg.dragTableModel.Col.Pressure = \u5727\u529B CD -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.friction = \u6469\u64E6 CD -componentanalysisdlg.dragTableModel.Col.total = Total CD -componentanalysisdlg.dragTabchar = \u6297\u529B\u6307\u6A19 -componentanalysisdlg.dragTabchar.ttip = \u6297\u529B\u6307\u6A19 -componentanalysisdlg.rollTableModel.Col.component = \u90E8\u54C1 -componentanalysisdlg.rollTableModel.Col.rollforc = \u529B\u4FC2\u6570\uFF08\u30ED\u30FC\u30EB\uFF09 -componentanalysisdlg.rollTableModel.Col.rolldamp = \u6E1B\u8870\u4FC2\u6570\uFF08\u30ED\u30FC\u30EB\uFF09 -componentanalysisdlg.rollTableModel.Col.total = Total Cl -componentanalysisdlg.rollTableModel = Roll dynamics -componentanalysisdlg.rollTableModel.ttip = Roll dynamics -componentanalysisdlg.println.closingmethod = Closing method called: -componentanalysisdlg.println.settingnam = SETTING NAN VALUES -componentanalysisdlg.lbl.reflenght = \u4EE3\u8868\u9577\u3055\uFF1A -componentanalysisdlg.lbl.refarea = \u4EE3\u8868\u9762\u7A4D\uFF1A +ComponentAnalysisGeneralTab.TabStability.Col.CP = CP +ComponentAnalysisGeneralTab.TabStability = \u5B89\u5B9A\u6027 +ComponentAnalysisGeneralTab.TabStability.ttip = \u5B89\u5B9A\u6027 +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = \u90E8\u54C1 +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = \u5727\u529B CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = \u6469\u64E6 CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Total CD +ComponentAnalysisGeneralTab.dragTabchar = \u6297\u529B\u6307\u6A19 +ComponentAnalysisGeneralTab.dragTabchar.ttip = \u6297\u529B\u6307\u6A19 +ComponentAnalysisGeneralTab.rollTableModel.Col.component = \u90E8\u54C1 +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = \u529B\u4FC2\u6570\uFF08\u30ED\u30FC\u30EB\uFF09 +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = \u6E1B\u8870\u4FC2\u6570\uFF08\u30ED\u30FC\u30EB\uFF09 +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Total Cl +ComponentAnalysisGeneralTab.rollTableModel = Roll dynamics +ComponentAnalysisGeneralTab.rollTableModel.ttip = Roll dynamics +ComponentAnalysisGeneralTab.println.closingmethod = Closing method called: +ComponentAnalysisGeneralTab.println.settingnam = SETTING NAN VALUES +ComponentAnalysisGeneralTab.lbl.reflenght = \u4EE3\u8868\u9577\u3055\uFF1A +ComponentAnalysisGeneralTab.lbl.refarea = \u4EE3\u8868\u9762\u7A4D\uFF1A !componentanalysisdlg.But.close -componentanalysisdlg.TabStability.Col.Component = \u90E8\u54C1 -componentanalysisdlg.TOTAL = Total -componentanalysisdlg.noWarnings = Druk CD -componentanalysisdlg.dragTableModel.Col.Base = Basis CD -componentanalysisdlg.dragTableModel.Col.friction = Wrijving CD -componentanalysisdlg.dragTableModel.Col.total = Totaal CD -componentanalysisdlg.dragTabchar = Weerstandskarakteristieken -componentanalysisdlg.dragTabchar.ttip = Weerstandskarakteristieken -componentanalysisdlg.rollTableModel.Col.component = Onderdeel -componentanalysisdlg.rollTableModel.Col.rollforc = Rolverdringingscoëfficiënt -componentanalysisdlg.rollTableModel.Col.rolldamp = Roldempingscoëfficiënt -componentanalysisdlg.rollTableModel.Col.total = Totaal Cl -componentanalysisdlg.rollTableModel = Roldynamieken -componentanalysisdlg.rollTableModel.ttip = Roldynamieken -componentanalysisdlg.println.closingmethod = Afsluitmethode genoemd: -componentanalysisdlg.println.settingnam = INSTELLEN VAN NAN WAARDEN -componentanalysisdlg.lbl.reflenght = Referentielengte: -componentanalysisdlg.lbl.refarea = Referentie-oppervlakte: +ComponentAnalysisDialog.componentanalysis = Onderdeelanalyses +ComponentAnalysisGeneralTab.lbl.winddir = Windrichting: +ComponentAnalysisGeneralTab.TitledBorder.warnings = Waarschuwingen: +ComponentAnalysisGeneralTab.ToggleBut.worst = Ergste +ComponentAnalysisGeneralTab.lbl.angleofattack = Invalshoek: +ComponentAnalysisGeneralTab.lbl.machnumber = Machgetal: +ComponentAnalysisGeneralTab.lbl.rollrate = Rolpercentage: +ComponentAnalysisGeneralTab.lbl.activestages = Actieve trappen: +ComponentAnalysisGeneralTab.lbl.motorconf = Motorconfiguratie: +ComponentAnalysisGeneralTab.TabStability.Col = Onderdeelnaam +ComponentAnalysisGeneralTab.TabStability.Col.EachMass = Massa Instantie +ComponentAnalysisGeneralTab.TabStability.Col.AllMass = Massa Geheel +ComponentAnalysisGeneralTab.TabStability.Col.CG = ZP Locatie Geheel +ComponentAnalysisGeneralTab.TabStability.Col.CP = DP +ComponentAnalysisGeneralTab.TabStability = Stabiliteit +ComponentAnalysisGeneralTab.TabStability.ttip = Stabiliteitsinformatie +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Onderdeel +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Druk CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Basis CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Wrijving CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Totaal CD +ComponentAnalysisGeneralTab.dragTabchar = Weerstandskarakteristieken +ComponentAnalysisGeneralTab.dragTabchar.ttip = Weerstandskarakteristieken +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Onderdeel +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Rolverdringingscoëfficiënt +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Roldempingscoëfficiënt +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Totaal Cl +ComponentAnalysisGeneralTab.rollTableModel = Roldynamieken +ComponentAnalysisGeneralTab.rollTableModel.ttip = Roldynamieken +ComponentAnalysisGeneralTab.println.closingmethod = Afsluitmethode genoemd: +ComponentAnalysisGeneralTab.println.settingnam = INSTELLEN VAN NAN WAARDEN +ComponentAnalysisGeneralTab.lbl.reflenght = Referentielengte: +ComponentAnalysisGeneralTab.lbl.refarea = Referentie-oppervlakte: !componentanalysisdlg.But.close = Sluit -componentanalysisdlg.TabStability.Col.Component = Onderdeel -componentanalysisdlg.TOTAL = Totaal -componentanalysisdlg.noWarnings = Geen waarschuwingen. +ComponentAnalysisGeneralTab.TabStability.Col.Component = Onderdeel +ComponentAnalysisGeneralTab.TOTAL = Totaal +ComponentAnalysisGeneralTab.noWarnings = Geen waarschuwingen. ! CADomainDataType CADomainDataType.lbl.winddir = Windrichting diff --git a/core/src/main/resources/l10n/messages_pl.properties b/core/src/main/resources/l10n/messages_pl.properties index d38630901..895e10dd4 100644 --- a/core/src/main/resources/l10n/messages_pl.properties +++ b/core/src/main/resources/l10n/messages_pl.properties @@ -511,37 +511,37 @@ update.dlg.latestVersion = Korzystasz z najnowszej wersji OpenRocket: %s. compaddbuttons.askPosition.Cancel = Anuluj ! Component Analysis Dialog - componentanalysisdlg.componentanalysis = Analiza cz\u0119\u015Bci - componentanalysisdlg.lbl.winddir = Kierunek wiatru: - componentanalysisdlg.TitledBorder.warnings = Ostrze\u017Cenia: - componentanalysisdlg.ToggleBut.worst = Najgorszy - componentanalysisdlg.lbl.angleofattack = K\u0105t natarcia: - componentanalysisdlg.lbl.machnumber = Liczba Macha: - componentanalysisdlg.lbl.rollrate = Tempo obrotu: - componentanalysisdlg.lbl.activestages = Aktywne stopnie: - componentanalysisdlg.lbl.motorconf = Konfiguracja silnika: - componentanalysisdlg.TabStability.Col = Cz\u0119\u015B\u0107 - componentanalysisdlg.TabStability = Stabilno\u015B\u0107 - componentanalysisdlg.TabStability.ttip = Informacje dotycz\u0105ce stabilno\u015Bci - componentanalysisdlg.dragTableModel.Col.Component = Cz\u0119\u015B\u0107 - componentanalysisdlg.dragTableModel.Col.Pressure = Ci\u015Bnienie CD - componentanalysisdlg.dragTableModel.Col.Base = Baza CD - componentanalysisdlg.dragTableModel.Col.friction = Tarcie CD - componentanalysisdlg.dragTableModel.Col.total = Razem CD - componentanalysisdlg.dragTabchar = Charakterystyka oporu - componentanalysisdlg.dragTabchar.ttip = Charakterystyka oporu - componentanalysisdlg.rollTableModel.Col.component = Cz\u0119\u015B\u0107 - componentanalysisdlg.rollTableModel.Col.rollforc = Wsp\u0142czynnik wymuszania obrotu - componentanalysisdlg.rollTableModel.Col.rolldamp = Wsp\u0142czynnik hamowania obrotu - componentanalysisdlg.rollTableModel.Col.total = Razem CI - componentanalysisdlg.rollTableModel = Dynamika obrotu - componentanalysisdlg.rollTableModel.ttip = Dynamika obrotu - componentanalysisdlg.println.closingmethod = Metoda zamykania: - componentanalysisdlg.println.settingnam = USTAWIANIE WARTO\u015ACI NAN - componentanalysisdlg.lbl.reflenght = D\u0142ugo\u015B\u0107 wzorcowa: - componentanalysisdlg.lbl.refarea = Powierzchnia wzorcowa: + ComponentAnalysisDialog.componentanalysis = Analiza cz\u0119\u015Bci + ComponentAnalysisGeneralTab.lbl.winddir = Kierunek wiatru: + ComponentAnalysisGeneralTab.TitledBorder.warnings = Ostrze\u017Cenia: + ComponentAnalysisGeneralTab.ToggleBut.worst = Najgorszy + ComponentAnalysisGeneralTab.lbl.angleofattack = K\u0105t natarcia: + ComponentAnalysisGeneralTab.lbl.machnumber = Liczba Macha: + ComponentAnalysisGeneralTab.lbl.rollrate = Tempo obrotu: + ComponentAnalysisGeneralTab.lbl.activestages = Aktywne stopnie: + ComponentAnalysisGeneralTab.lbl.motorconf = Konfiguracja silnika: + ComponentAnalysisGeneralTab.TabStability.Col = Cz\u0119\u015B\u0107 + ComponentAnalysisGeneralTab.TabStability = Stabilno\u015B\u0107 + ComponentAnalysisGeneralTab.TabStability.ttip = Informacje dotycz\u0105ce stabilno\u015Bci + ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Cz\u0119\u015B\u0107 + ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Ci\u015Bnienie CD + ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Baza CD + ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Tarcie CD + ComponentAnalysisGeneralTab.dragTableModel.Col.total = Razem CD + ComponentAnalysisGeneralTab.dragTabchar = Charakterystyka oporu + ComponentAnalysisGeneralTab.dragTabchar.ttip = Charakterystyka oporu + ComponentAnalysisGeneralTab.rollTableModel.Col.component = Cz\u0119\u015B\u0107 + ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Wsp\u0142czynnik wymuszania obrotu + ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Wsp\u0142czynnik hamowania obrotu + ComponentAnalysisGeneralTab.rollTableModel.Col.total = Razem CI + ComponentAnalysisGeneralTab.rollTableModel = Dynamika obrotu + ComponentAnalysisGeneralTab.rollTableModel.ttip = Dynamika obrotu + ComponentAnalysisGeneralTab.println.closingmethod = Metoda zamykania: + ComponentAnalysisGeneralTab.println.settingnam = USTAWIANIE WARTO\u015ACI NAN + ComponentAnalysisGeneralTab.lbl.reflenght = D\u0142ugo\u015B\u0107 wzorcowa: + ComponentAnalysisGeneralTab.lbl.refarea = Powierzchnia wzorcowa: !componentanalysisdlg.But.close - componentanalysisdlg.TabStability.Col.Component = Cz\u0119\u015B\u0107 + ComponentAnalysisGeneralTab.TabStability.Col.Component = Cz\u0119\u015B\u0107 ! CADomainDataType CADomainDataType.lbl.winddir = Kierunek wiatru diff --git a/core/src/main/resources/l10n/messages_pt.properties b/core/src/main/resources/l10n/messages_pt.properties index 166c6b733..3565592c8 100644 --- a/core/src/main/resources/l10n/messages_pt.properties +++ b/core/src/main/resources/l10n/messages_pt.properties @@ -1239,43 +1239,43 @@ compaddbuttons.askPosition.Inserthere = Inserir aqui compaddbuttons.lbl.Youcanchange = Voc\u00ea pode alterar a opera\u00e7\u00e3o padr\u00e3o em Prefer\u00eancias. compaddbuttons.lbl.insertcomp = Inserir o componente depois do componente de corrente ou como o \u00faltimo componente? -componentanalysisdlg.TOTAL = Total -componentanalysisdlg.TabStability = Estabilidade -componentanalysisdlg.TabStability.Col = Componente -componentanalysisdlg.TabStability.Col.CG = CG -componentanalysisdlg.TabStability.Col.CP = CP +ComponentAnalysisGeneralTab.TOTAL = Total +ComponentAnalysisGeneralTab.TabStability = Estabilidade +ComponentAnalysisGeneralTab.TabStability.Col = Componente +ComponentAnalysisGeneralTab.TabStability.Col.CG = CG +ComponentAnalysisGeneralTab.TabStability.Col.CP = CP # componentanalysisdlg.But.close =Close -componentanalysisdlg.TabStability.Col.Component = Componente +ComponentAnalysisGeneralTab.TabStability.Col.Component = Componente componentanalysisdlg.TabStability.Col.Mass = Massa. -componentanalysisdlg.TabStability.ttip = Informa\u00e7\u00f5es sobre a estabilidade -componentanalysisdlg.TitledBorder.warnings = Avisos: -componentanalysisdlg.ToggleBut.worst = Pior +ComponentAnalysisGeneralTab.TabStability.ttip = Informa\u00e7\u00f5es sobre a estabilidade +ComponentAnalysisGeneralTab.TitledBorder.warnings = Avisos: +ComponentAnalysisGeneralTab.ToggleBut.worst = Pior # Component Analysis Dialog -componentanalysisdlg.componentanalysis = An\u00e1lise dos componentes -componentanalysisdlg.dragTabchar = Caracter\u00edsticas do arrasto -componentanalysisdlg.dragTabchar.ttip = Caracter\u00edsticas do arrasto -componentanalysisdlg.dragTableModel.Col.Base = Base CD -componentanalysisdlg.dragTableModel.Col.Component = Componente -componentanalysisdlg.dragTableModel.Col.Pressure = Press\u00e3o CD -componentanalysisdlg.dragTableModel.Col.friction = Atrito CD -componentanalysisdlg.dragTableModel.Col.total = Total CD -componentanalysisdlg.lbl.activestages = Est\u00e1gios ativos: -componentanalysisdlg.lbl.angleofattack = \u00c2ngulo de ataque: -componentanalysisdlg.lbl.machnumber = N\u00famero de Mach: -componentanalysisdlg.lbl.motorconf = Configura\u00e7\u00e3o do motor: -componentanalysisdlg.lbl.refarea = \u00c1rea de refer\u00eancia: -componentanalysisdlg.lbl.reflenght = Comprimento de refer\u00eancia: -componentanalysisdlg.lbl.rollrate = Taxa de rota\u00e7\u00e3o: -componentanalysisdlg.lbl.winddir = Dire\u00e7\u00e3o do vento: -componentanalysisdlg.noWarnings = Nenhuma advert\u00eancia. -componentanalysisdlg.println.closingmethod = Fechando m\u00e9todo chamado: -componentanalysisdlg.println.settingnam = DEFININDO VALORES DE NAN -componentanalysisdlg.rollTableModel = Rota\u00e7\u00e3o din\u00e2mica -componentanalysisdlg.rollTableModel.Col.component = Componente -componentanalysisdlg.rollTableModel.Col.rolldamp = Coeficiente de amortecimento de rota\u00e7\u00e3o -componentanalysisdlg.rollTableModel.Col.rollforc = Coeficiente for\u00e7ado de rota\u00e7\u00e3o -componentanalysisdlg.rollTableModel.Col.total = Total Cl -componentanalysisdlg.rollTableModel.ttip = Rota\u00e7\u00e3o din\u00e2mica +ComponentAnalysisDialog.componentanalysis = An\u00e1lise dos componentes +ComponentAnalysisGeneralTab.dragTabchar = Caracter\u00edsticas do arrasto +ComponentAnalysisGeneralTab.dragTabchar.ttip = Caracter\u00edsticas do arrasto +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = Base CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Componente +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = Press\u00e3o CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = Atrito CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = Total CD +ComponentAnalysisGeneralTab.lbl.activestages = Est\u00e1gios ativos: +ComponentAnalysisGeneralTab.lbl.angleofattack = \u00c2ngulo de ataque: +ComponentAnalysisGeneralTab.lbl.machnumber = N\u00famero de Mach: +ComponentAnalysisGeneralTab.lbl.motorconf = Configura\u00e7\u00e3o do motor: +ComponentAnalysisGeneralTab.lbl.refarea = \u00c1rea de refer\u00eancia: +ComponentAnalysisGeneralTab.lbl.reflenght = Comprimento de refer\u00eancia: +ComponentAnalysisGeneralTab.lbl.rollrate = Taxa de rota\u00e7\u00e3o: +ComponentAnalysisGeneralTab.lbl.winddir = Dire\u00e7\u00e3o do vento: +ComponentAnalysisGeneralTab.noWarnings = Nenhuma advert\u00eancia. +ComponentAnalysisGeneralTab.println.closingmethod = Fechando m\u00e9todo chamado: +ComponentAnalysisGeneralTab.println.settingnam = DEFININDO VALORES DE NAN +ComponentAnalysisGeneralTab.rollTableModel = Rota\u00e7\u00e3o din\u00e2mica +ComponentAnalysisGeneralTab.rollTableModel.Col.component = Componente +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Coeficiente de amortecimento de rota\u00e7\u00e3o +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Coeficiente for\u00e7ado de rota\u00e7\u00e3o +ComponentAnalysisGeneralTab.rollTableModel.Col.total = Total Cl +ComponentAnalysisGeneralTab.rollTableModel.ttip = Rota\u00e7\u00e3o din\u00e2mica ! CADomainDataType CADomainDataType.lbl.winddir = Dire\u00e7\u00e3o do vento diff --git a/core/src/main/resources/l10n/messages_ru.properties b/core/src/main/resources/l10n/messages_ru.properties index 8a7065af9..e8d90d919 100644 --- a/core/src/main/resources/l10n/messages_ru.properties +++ b/core/src/main/resources/l10n/messages_ru.properties @@ -736,43 +736,43 @@ compaddbuttons.askPosition.Addtotheend = \u0414\u043E\u0431\u0430\u0432\u0438\u0 compaddbuttons.askPosition.Cancel = \u041E\u0442\u043C\u0435\u043D\u0430 ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = \u0410\u043D\u0430\u043B\u0438\u0437 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432 -componentanalysisdlg.lbl.winddir = \u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0442\u0440\u0430: -componentanalysisdlg.TitledBorder.warnings = \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F: -componentanalysisdlg.ToggleBut.worst = \u0425\u0443\u0434\u0448\u0435\u0435 -componentanalysisdlg.lbl.angleofattack = \u0423\u0433\u043E\u043B \u0430\u0442\u0430\u043A\u0438: -componentanalysisdlg.lbl.machnumber = \u0427\u0438\u0441\u043B\u043E \u041C\u0430\u0445\u0430: -componentanalysisdlg.lbl.rollrate = \u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u043A\u0440\u0435\u043D\u0430: -componentanalysisdlg.lbl.activestages = \u0410\u043A\u0442\u0438\u0432\u043D\u044B\u0435 \u0441\u0442\u0443\u043F\u0435\u043D\u0438: -componentanalysisdlg.lbl.motorconf = \u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u0435\u0439: -componentanalysisdlg.TabStability.Col = \u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 -componentanalysisdlg.TabStability.Col.EachMass = \u041C\u0430\u0441\u0441\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 -componentanalysisdlg.TabStability.Col.AllMass = \u041E\u0431\u0449\u0430\u044F \u043C\u0430\u0441\u0441\u0430 -componentanalysisdlg.TabStability.Col.CG = \u0426\u0422 -componentanalysisdlg.TabStability.Col.CP = \u0426\u0414 -componentanalysisdlg.TabStability = \u0421\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u044C -componentanalysisdlg.TabStability.ttip = \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u0438 -componentanalysisdlg.dragTableModel.Col.Component = \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 -componentanalysisdlg.dragTableModel.Col.Pressure = \u0414\u0430\u0432\u043B\u0435\u043D\u0438\u044F CD -componentanalysisdlg.dragTableModel.Col.Base = \u0411\u0430\u0437\u043E\u0432\u044B\u0439 CD -componentanalysisdlg.dragTableModel.Col.friction = \u0422\u0440\u0435\u043D\u0438\u044F CD -componentanalysisdlg.dragTableModel.Col.total = \u041E\u0431\u0449\u0438\u0439 CD -componentanalysisdlg.dragTabchar = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u0441\u043E\u043F\u0440\u043E\u0442\u0438\u0432\u043B\u0435\u043D\u0438\u044F -componentanalysisdlg.dragTabchar.ttip = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u0430\u044D\u0440\u043E\u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0441\u043E\u043F\u0440\u043E\u0442\u0438\u0432\u043B\u0435\u043D\u0438\u044F -componentanalysisdlg.rollTableModel.Col.component = \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 -componentanalysisdlg.rollTableModel.Col.rollforc = \u041A\u043E\u044D\u0444\u0444\u0438\u0446\u0438\u0435\u043D\u0442 \u0443\u0441\u0438\u043B\u0435\u043D\u0438\u044F \u043A\u0440\u0435\u043D\u0430 -componentanalysisdlg.rollTableModel.Col.rolldamp = \u041A\u043E\u044D\u0444\u0444\u0438\u0446\u0438\u0435\u043D\u0442 \u0434\u0435\u043C\u043F\u0444\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u0440\u0435\u043D\u0430 -componentanalysisdlg.rollTableModel.Col.total = \u041E\u0431\u0449\u0438\u0439 Cl -componentanalysisdlg.rollTableModel = \u0414\u0438\u043D\u0430\u043C\u0438\u043A\u0430 \u043A\u0440\u0435\u043D\u0430 -componentanalysisdlg.rollTableModel.ttip = \u0414\u0438\u043D\u0430\u043C\u0438\u043A\u0430 \u043A\u0440\u0435\u043D\u0430 -componentanalysisdlg.println.closingmethod = Closing method called: -componentanalysisdlg.println.settingnam = SETTING NAN VALUES -componentanalysisdlg.lbl.reflenght = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u043D\u0430\u044F \u0434\u043B\u0438\u043D\u0430 \u043C\u0438\u0434\u0435\u043B\u044F: -componentanalysisdlg.lbl.refarea = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u043D\u0430\u044F \u043F\u043B\u043E\u0449\u0430\u0434\u044C \u043C\u0438\u0434\u0435\u043B\u044F: +ComponentAnalysisDialog.componentanalysis = \u0410\u043D\u0430\u043B\u0438\u0437 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432 +ComponentAnalysisGeneralTab.lbl.winddir = \u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0442\u0440\u0430: +ComponentAnalysisGeneralTab.TitledBorder.warnings = \u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F: +ComponentAnalysisGeneralTab.ToggleBut.worst = \u0425\u0443\u0434\u0448\u0435\u0435 +ComponentAnalysisGeneralTab.lbl.angleofattack = \u0423\u0433\u043E\u043B \u0430\u0442\u0430\u043A\u0438: +ComponentAnalysisGeneralTab.lbl.machnumber = \u0427\u0438\u0441\u043B\u043E \u041C\u0430\u0445\u0430: +ComponentAnalysisGeneralTab.lbl.rollrate = \u0421\u043A\u043E\u0440\u043E\u0441\u0442\u044C \u043A\u0440\u0435\u043D\u0430: +ComponentAnalysisGeneralTab.lbl.activestages = \u0410\u043A\u0442\u0438\u0432\u043D\u044B\u0435 \u0441\u0442\u0443\u043F\u0435\u043D\u0438: +ComponentAnalysisGeneralTab.lbl.motorconf = \u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u0435\u0439: +ComponentAnalysisGeneralTab.TabStability.Col = \u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 +ComponentAnalysisGeneralTab.TabStability.Col.EachMass = \u041C\u0430\u0441\u0441\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 +ComponentAnalysisGeneralTab.TabStability.Col.AllMass = \u041E\u0431\u0449\u0430\u044F \u043C\u0430\u0441\u0441\u0430 +ComponentAnalysisGeneralTab.TabStability.Col.CG = \u0426\u0422 +ComponentAnalysisGeneralTab.TabStability.Col.CP = \u0426\u0414 +ComponentAnalysisGeneralTab.TabStability = \u0421\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u044C +ComponentAnalysisGeneralTab.TabStability.ttip = \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0441\u0442\u0430\u0431\u0438\u043B\u044C\u043D\u043E\u0441\u0442\u0438 +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = \u0414\u0430\u0432\u043B\u0435\u043D\u0438\u044F CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = \u0411\u0430\u0437\u043E\u0432\u044B\u0439 CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = \u0422\u0440\u0435\u043D\u0438\u044F CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = \u041E\u0431\u0449\u0438\u0439 CD +ComponentAnalysisGeneralTab.dragTabchar = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u0441\u043E\u043F\u0440\u043E\u0442\u0438\u0432\u043B\u0435\u043D\u0438\u044F +ComponentAnalysisGeneralTab.dragTabchar.ttip = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u0430\u044D\u0440\u043E\u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0441\u043E\u043F\u0440\u043E\u0442\u0438\u0432\u043B\u0435\u043D\u0438\u044F +ComponentAnalysisGeneralTab.rollTableModel.Col.component = \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = \u041A\u043E\u044D\u0444\u0444\u0438\u0446\u0438\u0435\u043D\u0442 \u0443\u0441\u0438\u043B\u0435\u043D\u0438\u044F \u043A\u0440\u0435\u043D\u0430 +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = \u041A\u043E\u044D\u0444\u0444\u0438\u0446\u0438\u0435\u043D\u0442 \u0434\u0435\u043C\u043F\u0444\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u0440\u0435\u043D\u0430 +ComponentAnalysisGeneralTab.rollTableModel.Col.total = \u041E\u0431\u0449\u0438\u0439 Cl +ComponentAnalysisGeneralTab.rollTableModel = \u0414\u0438\u043D\u0430\u043C\u0438\u043A\u0430 \u043A\u0440\u0435\u043D\u0430 +ComponentAnalysisGeneralTab.rollTableModel.ttip = \u0414\u0438\u043D\u0430\u043C\u0438\u043A\u0430 \u043A\u0440\u0435\u043D\u0430 +ComponentAnalysisGeneralTab.println.closingmethod = Closing method called: +ComponentAnalysisGeneralTab.println.settingnam = SETTING NAN VALUES +ComponentAnalysisGeneralTab.lbl.reflenght = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u043D\u0430\u044F \u0434\u043B\u0438\u043D\u0430 \u043C\u0438\u0434\u0435\u043B\u044F: +ComponentAnalysisGeneralTab.lbl.refarea = \u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u043D\u0430\u044F \u043F\u043B\u043E\u0449\u0430\u0434\u044C \u043C\u0438\u0434\u0435\u043B\u044F: !componentanalysisdlg.But.close = \u0417\u0430\u043A\u0440\u044B\u0442\u044C -componentanalysisdlg.TabStability.Col.Component = \u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 -componentanalysisdlg.TOTAL = \u0412\u0441\u0435\u0433\u043E -componentanalysisdlg.noWarnings = \u0417\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u0439 \u043D\u0435\u0442. +ComponentAnalysisGeneralTab.TabStability.Col.Component = \u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 +ComponentAnalysisGeneralTab.TOTAL = \u0412\u0441\u0435\u0433\u043E +ComponentAnalysisGeneralTab.noWarnings = \u0417\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u0439 \u043D\u0435\u0442. ! CADomainDataType CADomainDataType.lbl.winddir = \u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0442\u0440\u0430 diff --git a/core/src/main/resources/l10n/messages_uk_UA.properties b/core/src/main/resources/l10n/messages_uk_UA.properties index d7839171c..ffc2ae8a4 100644 --- a/core/src/main/resources/l10n/messages_uk_UA.properties +++ b/core/src/main/resources/l10n/messages_uk_UA.properties @@ -880,43 +880,43 @@ compaddbuttons.askPosition.Addtotheend = \u0414\u043e\u0434\u0430\u0442\u0438 \u compaddbuttons.askPosition.Cancel = \u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438 ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = \u0410\u043d\u0430\u043b\u0456\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 -componentanalysisdlg.lbl.winddir = \u041d\u0430\u043f\u0440\u044f\u043c \u0432\u0456\u0442\u0440\u0443: -componentanalysisdlg.TitledBorder.warnings = \u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f: -componentanalysisdlg.ToggleBut.worst = \u041d\u0430\u0439\u0433\u0456\u0440\u0448\u0438\u0439 -componentanalysisdlg.lbl.angleofattack = \u041a\u0443\u0442 \u043d\u0430\u043f\u0430\u0434\u0443: -componentanalysisdlg.lbl.machnumber = \u0427\u0438\u0441\u043b\u043e \u041c\u0430\u0445\u0430: -componentanalysisdlg.lbl.rollrate = \u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f: -componentanalysisdlg.lbl.activestages = \u0410\u043a\u0442\u0438\u0432\u043d\u0456 \u0441\u0442\u0443\u043f\u0435\u043d\u0456: -componentanalysisdlg.lbl.motorconf = \u041a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f \u0434\u0432\u0438\u0433\u0443\u043d\u0430: -componentanalysisdlg.TabStability.Col = \u0406\u043c\u2019\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 -componentanalysisdlg.TabStability.Col.EachMass = \u041c\u0430\u0441\u0430 \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 -componentanalysisdlg.TabStability.Col.AllMass = \u0410\u0433\u0440\u0435\u0433\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u0441\u0430 -componentanalysisdlg.TabStability.Col.CG = \u041c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u0426\u041c -componentanalysisdlg.TabStability.Col.CP = \u0426\u0414 -componentanalysisdlg.TabStability = \u0421\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c -componentanalysisdlg.TabStability.ttip = \u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0441\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c -componentanalysisdlg.dragTableModel.Col.Component = \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 -componentanalysisdlg.dragTableModel.Col.Pressure = \u0422\u0438\u0441\u043a CD -componentanalysisdlg.dragTableModel.Col.Base = \u0411\u0430\u0437\u043e\u0432\u0438\u0439 CD -componentanalysisdlg.dragTableModel.Col.friction = \u0422\u0435\u0440\u0442\u044f CD -componentanalysisdlg.dragTableModel.Col.total = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 CD -componentanalysisdlg.dragTabchar = \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u043f\u043e\u0440\u0443 -componentanalysisdlg.dragTabchar.ttip = \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u043f\u043e\u0440\u0443 -componentanalysisdlg.rollTableModel.Col.component = \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 -componentanalysisdlg.rollTableModel.Col.rollforc = \u041a\u043e\u0435\u0444\u0456\u0446\u0456\u0454\u043d\u0442 \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f -componentanalysisdlg.rollTableModel.Col.rolldamp = \u041a\u043e\u0435\u0444\u0456\u0446\u0456\u0454\u043d\u0442 \u0433\u0430\u0441\u0456\u043d\u043d\u044f -componentanalysisdlg.rollTableModel.Col.total = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 Cl -componentanalysisdlg.rollTableModel = \u0414\u0438\u043d\u0430\u043c\u0456\u043a\u0430 \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f -componentanalysisdlg.rollTableModel.ttip = \u0414\u0438\u043d\u0430\u043c\u0456\u043a\u0430 \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f -componentanalysisdlg.println.closingmethod = \u0417\u0430\u043a\u0440\u0438\u0442\u0442\u044f \u043c\u0435\u0442\u043e\u0434\u0443 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u043d\u043e: -componentanalysisdlg.println.settingnam = \u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u044c \u043d\u0435\u0432\u0456\u0434: -componentanalysisdlg.lbl.reflenght = \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u0430 \u0434\u043e\u0432\u0436\u0438\u043d\u0430: -componentanalysisdlg.lbl.refarea = \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u0430 \u043f\u043b\u043e\u0449\u0430: +ComponentAnalysisDialog.componentanalysis = \u0410\u043d\u0430\u043b\u0456\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 +ComponentAnalysisGeneralTab.lbl.winddir = \u041d\u0430\u043f\u0440\u044f\u043c \u0432\u0456\u0442\u0440\u0443: +ComponentAnalysisGeneralTab.TitledBorder.warnings = \u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f: +ComponentAnalysisGeneralTab.ToggleBut.worst = \u041d\u0430\u0439\u0433\u0456\u0440\u0448\u0438\u0439 +ComponentAnalysisGeneralTab.lbl.angleofattack = \u041a\u0443\u0442 \u043d\u0430\u043f\u0430\u0434\u0443: +ComponentAnalysisGeneralTab.lbl.machnumber = \u0427\u0438\u0441\u043b\u043e \u041c\u0430\u0445\u0430: +ComponentAnalysisGeneralTab.lbl.rollrate = \u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f: +ComponentAnalysisGeneralTab.lbl.activestages = \u0410\u043a\u0442\u0438\u0432\u043d\u0456 \u0441\u0442\u0443\u043f\u0435\u043d\u0456: +ComponentAnalysisGeneralTab.lbl.motorconf = \u041a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f \u0434\u0432\u0438\u0433\u0443\u043d\u0430: +ComponentAnalysisGeneralTab.TabStability.Col = \u0406\u043c\u2019\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 +ComponentAnalysisGeneralTab.TabStability.Col.EachMass = \u041c\u0430\u0441\u0430 \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u0435\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 +ComponentAnalysisGeneralTab.TabStability.Col.AllMass = \u0410\u0433\u0440\u0435\u0433\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u0441\u0430 +ComponentAnalysisGeneralTab.TabStability.Col.CG = \u041c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u0426\u041c +ComponentAnalysisGeneralTab.TabStability.Col.CP = \u0426\u0414 +ComponentAnalysisGeneralTab.TabStability = \u0421\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c +ComponentAnalysisGeneralTab.TabStability.ttip = \u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0441\u0442\u0430\u0431\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = \u0422\u0438\u0441\u043a CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = \u0411\u0430\u0437\u043e\u0432\u0438\u0439 CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = \u0422\u0435\u0440\u0442\u044f CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 CD +ComponentAnalysisGeneralTab.dragTabchar = \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u043f\u043e\u0440\u0443 +ComponentAnalysisGeneralTab.dragTabchar.ttip = \u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043e\u043f\u043e\u0440\u0443 +ComponentAnalysisGeneralTab.rollTableModel.Col.component = \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = \u041a\u043e\u0435\u0444\u0456\u0446\u0456\u0454\u043d\u0442 \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = \u041a\u043e\u0435\u0444\u0456\u0446\u0456\u0454\u043d\u0442 \u0433\u0430\u0441\u0456\u043d\u043d\u044f +ComponentAnalysisGeneralTab.rollTableModel.Col.total = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 Cl +ComponentAnalysisGeneralTab.rollTableModel = \u0414\u0438\u043d\u0430\u043c\u0456\u043a\u0430 \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f +ComponentAnalysisGeneralTab.rollTableModel.ttip = \u0414\u0438\u043d\u0430\u043c\u0456\u043a\u0430 \u043e\u0431\u0435\u0440\u0442\u0430\u043d\u043d\u044f +ComponentAnalysisGeneralTab.println.closingmethod = \u0417\u0430\u043a\u0440\u0438\u0442\u0442\u044f \u043c\u0435\u0442\u043e\u0434\u0443 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u043d\u043e: +ComponentAnalysisGeneralTab.println.settingnam = \u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u044c \u043d\u0435\u0432\u0456\u0434: +ComponentAnalysisGeneralTab.lbl.reflenght = \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u0430 \u0434\u043e\u0432\u0436\u0438\u043d\u0430: +ComponentAnalysisGeneralTab.lbl.refarea = \u0420\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u0430 \u043f\u043b\u043e\u0449\u0430: componentanalysisdlg.But.close = \u0417\u0430\u043a\u0440\u0438\u0442\u0438 -componentanalysisdlg.TabStability.Col.Component = \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 -componentanalysisdlg.TOTAL = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 (\u0420\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a) -componentanalysisdlg.noWarnings = \u041d\u0435\u043c\u0430\u0454 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u044c. +ComponentAnalysisGeneralTab.TabStability.Col.Component = \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 +ComponentAnalysisGeneralTab.TOTAL = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 (\u0420\u043e\u0437\u0440\u0430\u0445\u0443\u043d\u043e\u043a) +ComponentAnalysisGeneralTab.noWarnings = \u041d\u0435\u043c\u0430\u0454 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u044c. ! CADomainDataType CADomainDataType.lbl.winddir = \u041d\u0430\u043f\u0440\u044f\u043c \u0432\u0456\u0442\u0440\u0443 diff --git a/core/src/main/resources/l10n/messages_zh_CN.properties b/core/src/main/resources/l10n/messages_zh_CN.properties index efa85ec72..e373aa934 100644 --- a/core/src/main/resources/l10n/messages_zh_CN.properties +++ b/core/src/main/resources/l10n/messages_zh_CN.properties @@ -1359,43 +1359,43 @@ compaddbuttons.askPosition.Inserthere = \u5728\u6B64\u63D2\u5165 compaddbuttons.lbl.Youcanchange = \u4F60\u53EF\u4EE5\u5728\u9996\u9009\u9879\u4E2D\u8BBE\u5B9A\u9ED8\u8BA4\u64CD\u4F5C. compaddbuttons.lbl.insertcomp = \u7D27\u63A5\u5F53\u524D\u7EC4\u4EF6\u6DFB\u52A0\u65B0\u7EC4\u4EF6\u6216\u5728\u5C3E\u90E8\u6DFB\u52A0\u65B0\u7EC4\u4EF6 -componentanalysisdlg.TOTAL = \u603B\u5171 -componentanalysisdlg.TabStability = \u7A33\u5B9A\u6027 -componentanalysisdlg.TabStability.Col = \u7EC4\u4EF6 -componentanalysisdlg.TabStability.Col.CG = \u91CD\u5FC3 -componentanalysisdlg.TabStability.Col.CP = \u538B\u5FC3 +ComponentAnalysisGeneralTab.TOTAL = \u603B\u5171 +ComponentAnalysisGeneralTab.TabStability = \u7A33\u5B9A\u6027 +ComponentAnalysisGeneralTab.TabStability.Col = \u7EC4\u4EF6 +ComponentAnalysisGeneralTab.TabStability.Col.CG = \u91CD\u5FC3 +ComponentAnalysisGeneralTab.TabStability.Col.CP = \u538B\u5FC3 !componentanalysisdlg.But.close = \u5173\u95ed -componentanalysisdlg.TabStability.Col.Component = \u7EC4\u4EF6 +ComponentAnalysisGeneralTab.TabStability.Col.Component = \u7EC4\u4EF6 componentanalysisdlg.TabStability.Col.Mass = \u8D28\u91CF -componentanalysisdlg.TabStability.ttip = \u7A33\u5B9A\u6027\u4FE1\u606F -componentanalysisdlg.TitledBorder.warnings = \u8B66\u544A: -componentanalysisdlg.ToggleBut.worst = \u6700\u574F\u60C5\u51B5 +ComponentAnalysisGeneralTab.TabStability.ttip = \u7A33\u5B9A\u6027\u4FE1\u606F +ComponentAnalysisGeneralTab.TitledBorder.warnings = \u8B66\u544A: +ComponentAnalysisGeneralTab.ToggleBut.worst = \u6700\u574F\u60C5\u51B5 ! Component Analysis Dialog -componentanalysisdlg.componentanalysis = \u7EC4\u4EF6\u5206\u6790 -componentanalysisdlg.dragTabchar = \u963B\u529B\u7279\u6027 -componentanalysisdlg.dragTabchar.ttip = \u963B\u529B\u7279\u6027 -componentanalysisdlg.dragTableModel.Col.Base = \u57FA\u51C6 CD -componentanalysisdlg.dragTableModel.Col.Component = \u7EC4\u4EF6 -componentanalysisdlg.dragTableModel.Col.Pressure = \u538B\u529B CD -componentanalysisdlg.dragTableModel.Col.friction = \u6469\u64E6 CD -componentanalysisdlg.dragTableModel.Col.total = \u603B CD -componentanalysisdlg.lbl.activestages = \u6709\u6548\u7EA7: -componentanalysisdlg.lbl.angleofattack = \u653B\u89D2: -componentanalysisdlg.lbl.machnumber = \u9A6C\u8D6B: -componentanalysisdlg.lbl.motorconf = \u53D1\u52A8\u673A\u8BBE\u7F6E: -componentanalysisdlg.lbl.refarea = \u53C2\u8003\u9762\u79EF: -componentanalysisdlg.lbl.reflenght = \u53C2\u8003\u957F\u5EA6: -componentanalysisdlg.lbl.rollrate = \u89D2\u901F\u5EA6: -componentanalysisdlg.lbl.winddir = \u98CE\u5411: -componentanalysisdlg.noWarnings = \u6CA1\u6709\u8B66\u544A. -componentanalysisdlg.println.closingmethod = \u8C03\u7528\u5173\u95ED\u4E8B\u4EF6: -componentanalysisdlg.println.settingnam = \u8BBE\u7F6E\u975E\u6570\u5B57\u503C -componentanalysisdlg.rollTableModel = \u6EDA\u8F6C\u52A8\u529B\u5B66 -componentanalysisdlg.rollTableModel.Col.component = \u7EC4\u4EF6 -componentanalysisdlg.rollTableModel.Col.rolldamp = \u6EDA\u8F6C\u963B\u5C3C\u7CFB\u6570 -componentanalysisdlg.rollTableModel.Col.rollforc = \u6EDA\u8F6C\u529B\u7CFB\u6570 -componentanalysisdlg.rollTableModel.Col.total = \u603B Cl -componentanalysisdlg.rollTableModel.ttip = \u6EDA\u8F6C\u52A8\u529B\u5B66 +ComponentAnalysisDialog.componentanalysis = \u7EC4\u4EF6\u5206\u6790 +ComponentAnalysisGeneralTab.dragTabchar = \u963B\u529B\u7279\u6027 +ComponentAnalysisGeneralTab.dragTabchar.ttip = \u963B\u529B\u7279\u6027 +ComponentAnalysisGeneralTab.dragTableModel.Col.Base = \u57FA\u51C6 CD +ComponentAnalysisGeneralTab.dragTableModel.Col.Component = \u7EC4\u4EF6 +ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = \u538B\u529B CD +ComponentAnalysisGeneralTab.dragTableModel.Col.friction = \u6469\u64E6 CD +ComponentAnalysisGeneralTab.dragTableModel.Col.total = \u603B CD +ComponentAnalysisGeneralTab.lbl.activestages = \u6709\u6548\u7EA7: +ComponentAnalysisGeneralTab.lbl.angleofattack = \u653B\u89D2: +ComponentAnalysisGeneralTab.lbl.machnumber = \u9A6C\u8D6B: +ComponentAnalysisGeneralTab.lbl.motorconf = \u53D1\u52A8\u673A\u8BBE\u7F6E: +ComponentAnalysisGeneralTab.lbl.refarea = \u53C2\u8003\u9762\u79EF: +ComponentAnalysisGeneralTab.lbl.reflenght = \u53C2\u8003\u957F\u5EA6: +ComponentAnalysisGeneralTab.lbl.rollrate = \u89D2\u901F\u5EA6: +ComponentAnalysisGeneralTab.lbl.winddir = \u98CE\u5411: +ComponentAnalysisGeneralTab.noWarnings = \u6CA1\u6709\u8B66\u544A. +ComponentAnalysisGeneralTab.println.closingmethod = \u8C03\u7528\u5173\u95ED\u4E8B\u4EF6: +ComponentAnalysisGeneralTab.println.settingnam = \u8BBE\u7F6E\u975E\u6570\u5B57\u503C +ComponentAnalysisGeneralTab.rollTableModel = \u6EDA\u8F6C\u52A8\u529B\u5B66 +ComponentAnalysisGeneralTab.rollTableModel.Col.component = \u7EC4\u4EF6 +ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = \u6EDA\u8F6C\u963B\u5C3C\u7CFB\u6570 +ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = \u6EDA\u8F6C\u529B\u7CFB\u6570 +ComponentAnalysisGeneralTab.rollTableModel.Col.total = \u603B Cl +ComponentAnalysisGeneralTab.rollTableModel.ttip = \u6EDA\u8F6C\u52A8\u529B\u5B66 ! CADomainDataType CADomainDataType.lbl.winddir = \u98CE\u5411 diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CADataType.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CADataType.java index 7a4acc82c..1ee27fe00 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CADataType.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CADataType.java @@ -1,7 +1,6 @@ package info.openrocket.swing.gui.dialogs.componentanalysis; import info.openrocket.core.l10n.Translator; -import info.openrocket.core.rocketcomponent.ComponentAssembly; import info.openrocket.core.rocketcomponent.FinSet; import info.openrocket.core.rocketcomponent.FlightConfiguration; import info.openrocket.core.rocketcomponent.Rocket; @@ -28,27 +27,27 @@ public class CADataType implements Comparable, GroupableCN" + ALPHA + "", "CNa", UnitGroup.UNITS_NONE, CADataTypeGroup.STABILITY, 11); //// Drag - public static final CADataType PRESSURE_CD = new CADataType(trans.get("componentanalysisdlg.dragTableModel.Col.Pressure"), + public static final CADataType PRESSURE_CD = new CADataType(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure"), "CD,pressure", UnitGroup.UNITS_NONE, CADataTypeGroup.DRAG, 20); - public static final CADataType BASE_CD = new CADataType(trans.get("componentanalysisdlg.dragTableModel.Col.Base"), + public static final CADataType BASE_CD = new CADataType(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Base"), "CD,base", UnitGroup.UNITS_NONE, CADataTypeGroup.DRAG, 21); - public static final CADataType FRICTION_CD = new CADataType(trans.get("componentanalysisdlg.dragTableModel.Col.friction"), + public static final CADataType FRICTION_CD = new CADataType(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.friction"), "CD,friction", UnitGroup.UNITS_NONE, CADataTypeGroup.DRAG, 22); - public static final CADataType TOTAL_CD = new CADataType(trans.get("componentanalysisdlg.dragTableModel.Col.total"), + public static final CADataType TOTAL_CD = new CADataType(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.total"), "CD,total", UnitGroup.UNITS_NONE, CADataTypeGroup.DRAG, 23); //// Roll - public static final CADataType ROLL_FORCING_COEFFICIENT = new CADataType(trans.get("componentanalysisdlg.rollTableModel.Col.rollforc"), + public static final CADataType ROLL_FORCING_COEFFICIENT = new CADataType(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc"), "Clf", UnitGroup.UNITS_NONE, CADataTypeGroup.ROLL, 30); - public static final CADataType ROLL_DAMPING_COEFFICIENT = new CADataType(trans.get("componentanalysisdlg.rollTableModel.Col.rolldamp"), + public static final CADataType ROLL_DAMPING_COEFFICIENT = new CADataType(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp"), "Cld", UnitGroup.UNITS_NONE, CADataTypeGroup.ROLL, 31); - public static final CADataType TOTAL_ROLL_COEFFICIENT = new CADataType(trans.get("componentanalysisdlg.rollTableModel.Col.total"), + public static final CADataType TOTAL_ROLL_COEFFICIENT = new CADataType(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.total"), "Cl,tot", UnitGroup.UNITS_NONE, CADataTypeGroup.ROLL, 32); diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CAPlotPanel.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CAPlotPanel.java index e480e33ee..327eea73d 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CAPlotPanel.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/CAPlotPanel.java @@ -24,7 +24,7 @@ public class CAPlotPanel extends PlotPanel { private final JComboBox componentSelector; - public CAPlotTypeSelector(final ComponentAnalysisPlotExportDialog parent, int plotIndex, + public CAPlotTypeSelector(final ComponentAnalysisPlotExportPanel parent, int plotIndex, CADataType type, Unit unit, int position, List availableTypes, List componentsForType, CAPlotConfiguration configuration) { super(plotIndex, type, unit, position, availableTypes, false); diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisDialog.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisDialog.java index 01f73656f..27cc6b0da 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisDialog.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisDialog.java @@ -1,498 +1,62 @@ package info.openrocket.swing.gui.dialogs.componentanalysis; -import static info.openrocket.core.unit.Unit.NOUNIT; -import static info.openrocket.core.util.Chars.ALPHA; -import info.openrocket.core.aerodynamics.AerodynamicCalculator; -import info.openrocket.core.aerodynamics.AerodynamicForces; -import info.openrocket.core.aerodynamics.FlightConditions; -import info.openrocket.core.logging.WarningSet; import info.openrocket.core.l10n.Translator; -import info.openrocket.core.masscalc.CMAnalysisEntry; -import info.openrocket.core.masscalc.MassCalculator; -import info.openrocket.core.motor.MotorConfiguration; -import info.openrocket.core.rocketcomponent.ComponentAssembly; -import info.openrocket.core.rocketcomponent.FinSet; -import info.openrocket.core.rocketcomponent.FlightConfiguration; -import info.openrocket.core.rocketcomponent.Rocket; -import info.openrocket.core.rocketcomponent.RocketComponent; import info.openrocket.core.startup.Application; -import info.openrocket.core.unit.Unit; -import info.openrocket.core.unit.UnitGroup; -import info.openrocket.core.util.Coordinate; -import info.openrocket.core.util.MathUtil; -import info.openrocket.core.util.StateChangeListener; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.EventObject; -import java.util.List; -import java.util.Map; -import java.util.Vector; -import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JList; import javax.swing.JPanel; -import javax.swing.JScrollPane; import javax.swing.JTabbedPane; -import javax.swing.JTable; -import javax.swing.JToggleButton; -import javax.swing.ListSelectionModel; -import javax.swing.SwingConstants; import javax.swing.SwingUtilities; -import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import javax.swing.table.DefaultTableCellRenderer; -import net.miginfocom.swing.MigLayout; -import info.openrocket.swing.gui.theme.UITheme; -import info.openrocket.swing.gui.adaptors.Column; -import info.openrocket.swing.gui.adaptors.ColumnTable; -import info.openrocket.swing.gui.adaptors.ColumnTableModel; -import info.openrocket.swing.gui.adaptors.DoubleModel; -import info.openrocket.swing.gui.components.EditableSpinner; -import info.openrocket.swing.gui.components.BasicSlider; -import info.openrocket.swing.gui.components.ConfigurationComboBox; -import info.openrocket.swing.gui.components.StageSelector; -import info.openrocket.swing.gui.components.StyledLabel; -import info.openrocket.swing.gui.components.UnitSelector; import info.openrocket.swing.gui.scalefigure.RocketPanel; import info.openrocket.swing.gui.util.GUIUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ComponentAnalysisDialog extends JDialog implements StateChangeListener { - private static final Logger log = LoggerFactory.getLogger(ComponentAnalysisDialog.class); +import net.miginfocom.swing.MigLayout; +public class ComponentAnalysisDialog extends JDialog { private static final long serialVersionUID = 9131240570600307935L; private static ComponentAnalysisDialog singletonDialog = null; private static final Translator trans = Application.getTranslator(); + private JButton okButton; - private final FlightConditions conditions; - private final Rocket rkt; - private final DoubleModel theta, aoa, mach, roll; - private final JToggleButton worstToggle; - private boolean fakeChange = false; - private AerodynamicCalculator aerodynamicCalculator; - private CAParameters parameters; + public ComponentAnalysisDialog(RocketPanel rocketPanel) { + //// Component analysis + super(SwingUtilities.getWindowAncestor(rocketPanel), trans.get("ComponentAnalysisDialog.componentanalysis")); - private final ColumnTableModel longitudeStabilityTableModel; - private final ColumnTableModel dragTableModel; - private final ColumnTableModel rollTableModel; - - private final JList warningList; - - - private final List stabData = new ArrayList<>(); - private final List dragData = new ArrayList<>(); - private final List rollData = new ArrayList<>(); - - - public ComponentAnalysisDialog(final RocketPanel rocketPanel) { - ////Component analysis - super(SwingUtilities.getWindowAncestor(rocketPanel), - trans.get("componentanalysisdlg.componentanalysis")); - - JTable table; - - JPanel panel = new JPanel(new MigLayout("fill", "[120lp][70lp][50lp][]")); + JPanel panel = new JPanel(new MigLayout("fill, hidemode 3")); add(panel); - rkt = rocketPanel.getDocument().getRocket(); - this.aerodynamicCalculator = rocketPanel.getAerodynamicCalculator().newInstance(); - - conditions = new FlightConditions(rkt.getSelectedConfiguration()); - - // Create CAParameters - parameters = new CAParameters(rkt, rocketPanel); - - aoa = new DoubleModel(parameters, "AOA", UnitGroup.UNITS_ANGLE, 0, Math.PI); - mach = new DoubleModel(parameters, "Mach", UnitGroup.UNITS_COEFFICIENT, 0); - theta = new DoubleModel(parameters, "Theta", UnitGroup.UNITS_ANGLE, 0, 2 * Math.PI); - roll = new DoubleModel(parameters, "RollRate", UnitGroup.UNITS_ROLL); - - //// Wind direction: - panel.add(new JLabel(trans.get("componentanalysisdlg.lbl.winddir"))); - EditableSpinner spinner = new EditableSpinner(theta.getSpinnerModel()); - panel.add(spinner, "growx"); - panel.add(new UnitSelector(theta)); - BasicSlider slider = new BasicSlider(theta.getSliderModel(0, 2 * Math.PI)); - panel.add(slider, "growx, split 2"); - //// Worst button - worstToggle = new JToggleButton(trans.get("componentanalysisdlg.ToggleBut.worst")); - worstToggle.setSelected(true); - worstToggle.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - stateChanged(null); - } - }); - slider.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (!fakeChange) - worstToggle.setSelected(false); - } - }); - panel.add(worstToggle); - - - warningList = new JList<>(); - JScrollPane scrollPane = new JScrollPane(warningList); - ////Warnings: - scrollPane.setBorder(BorderFactory.createTitledBorder(trans.get("componentanalysisdlg.TitledBorder.warnings"))); - panel.add(scrollPane, "gap paragraph, spany 4, w 300lp, grow, height :100lp:, wrap"); - - ////Angle of attack: - panel.add(new JLabel(trans.get("componentanalysisdlg.lbl.angleofattack"))); - panel.add(new EditableSpinner(aoa.getSpinnerModel()), "growx"); - panel.add(new UnitSelector(aoa)); - panel.add(new BasicSlider(aoa.getSliderModel(0, Math.PI)), "growx, wrap"); - - //// Mach number: - panel.add(new JLabel(trans.get("componentanalysisdlg.lbl.machnumber"))); - panel.add(new EditableSpinner(mach.getSpinnerModel())); - panel.add(new UnitSelector(mach)); - panel.add(new BasicSlider(mach.getSliderModel(0, 3)), "growx, wrap"); - - //// Roll rate: - panel.add(new JLabel(trans.get("componentanalysisdlg.lbl.rollrate"))); - panel.add(new EditableSpinner(roll.getSpinnerModel()), "growx"); - panel.add(new UnitSelector(roll)); - panel.add(new BasicSlider(roll.getSliderModel(-20 * 2 * Math.PI, 20 * 2 * Math.PI)), - "growx, wrap"); - - // Stage and motor selection: - //// Active stages: - StageSelector stageSelector = new StageSelector(rkt); - rkt.addChangeListener(stageSelector); - panel.add(new JLabel(trans.get("componentanalysisdlg.lbl.activestages")), "spanx, split, gapafter rel"); - panel.add(stageSelector, "gapafter paragraph"); - - //// Motor configuration: - JLabel label = new JLabel(trans.get("componentanalysisdlg.lbl.motorconf")); - label.setHorizontalAlignment(JLabel.RIGHT); - panel.add(label, "growx, right"); - - final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rkt); - panel.add( configComboBox, "wrap"); - - - // Tabbed pane - JTabbedPane tabbedPane = new JTabbedPane(); - panel.add(tabbedPane, "spanx, growx, growy, pushy"); + // General tab + ComponentAnalysisGeneralPanel generalTab = new ComponentAnalysisGeneralPanel(this, rocketPanel); + tabbedPane.addTab(trans.get("ComponentAnalysisDialog.tab.General"), generalTab); - // Create the Longitudinal Stability (CM vs CP) data table - longitudeStabilityTableModel = new ColumnTableModel( + // Plot export tab + ComponentAnalysisPlotExportPanel plotExportTab = new ComponentAnalysisPlotExportPanel(this, generalTab.getParameters(), + generalTab.getAerodynamicCalculator(), generalTab.getRocket()); + tabbedPane.addTab(trans.get("ComponentAnalysisDialog.tab.PlotExport"), plotExportTab); - //// Component - new Column(trans.get("componentanalysisdlg.TabStability.Col.Component")) { - @Override - public Object getValueAt(int row) { - Object c = stabData.get(row).name; - - return c.toString(); - } + panel.add(tabbedPane, "span, pushy, grow, wrap"); - @Override - public int getDefaultWidth() { - return 200; - } - }, - // would be per-instance mass - new Column(trans.get("componentanalysisdlg.TabStability.Col.EachMass") + " (" + UnitGroup.UNITS_MASS.getDefaultUnit().getUnit() + ")") { - final private Unit unit = UnitGroup.UNITS_MASS.getDefaultUnit(); - - @Override - public Object getValueAt(int row) { - return unit.toUnit(stabData.get(row).eachMass); - } - }, - new Column(trans.get("componentanalysisdlg.TabStability.Col.AllMass") + " (" + UnitGroup.UNITS_MASS.getDefaultUnit().getUnit() + ")") { - final private Unit unit = UnitGroup.UNITS_MASS.getDefaultUnit(); - - @Override - public Object getValueAt(int row) { - return unit.toUnit(stabData.get(row).cm.weight); - } - }, - new Column(trans.get("componentanalysisdlg.TabStability.Col.CG") + " (" + UnitGroup.UNITS_LENGTH.getDefaultUnit().getUnit() + ")") { - final private Unit unit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); - - @Override - public Object getValueAt(int row) { - return unit.toUnit(stabData.get(row).cm.x); - } - }, - new Column(trans.get("componentanalysisdlg.TabStability.Col.CP") + " (" + UnitGroup.UNITS_LENGTH.getDefaultUnit().getUnit() + ")") { - final private Unit unit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); - - @Override - public Object getValueAt(int row) { - return unit.toUnit(stabData.get(row).cpx); - } - }, - new Column("CN" + ALPHA + "") { - @Override - public Object getValueAt(int row) { - return NOUNIT.toUnit(stabData.get(row).cna); - } - } - - ) { - /** - * - */ - private static final long serialVersionUID = 1L; - - - @Override - public int getRowCount() { - return stabData.size(); - } - }; - - table = new ColumnTable(longitudeStabilityTableModel); - table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - longitudeStabilityTableModel.setColumnWidths(table.getColumnModel()); - - table.setDefaultRenderer(Object.class, new StabilityCellRenderer()); - - JScrollPane scrollpane = new JScrollPane(table); - scrollpane.setPreferredSize(new Dimension(600, 200)); - - //// Stability and Stability information - tabbedPane.addTab(trans.get("componentanalysisdlg.TabStability"), - null, scrollpane, trans.get("componentanalysisdlg.TabStability.ttip")); - - - - // Create the drag data table - dragTableModel = new ColumnTableModel( - //// Component - new Column(trans.get("componentanalysisdlg.dragTableModel.Col.Component")) { - @Override - public Object getValueAt(int row) { - RocketComponent c = dragData.get(row).getComponent(); - if (c instanceof Rocket) { - return trans.get("componentanalysisdlg.TOTAL"); - } - return c.toString(); - } - - @Override - public int getDefaultWidth() { - return 200; - } - }, - //// Pressure CD - new Column(trans.get("componentanalysisdlg.dragTableModel.Col.Pressure")) { - @Override - public Object getValueAt(int row) { - return dragData.get(row).getPressureCD(); - } - }, - //// Base CD - new Column(trans.get("componentanalysisdlg.dragTableModel.Col.Base")) { - @Override - public Object getValueAt(int row) { - return dragData.get(row).getBaseCD(); - } - }, - //// Friction CD - new Column(trans.get("componentanalysisdlg.dragTableModel.Col.friction")) { - @Override - public Object getValueAt(int row) { - return dragData.get(row).getFrictionCD(); - } - }, - //// Total CD - new Column(trans.get("componentanalysisdlg.dragTableModel.Col.total")) { - @Override - public Object getValueAt(int row) { - return dragData.get(row).getCD(); - } - } - ) { - /** - * - */ - private static final long serialVersionUID = 1L; - - @Override - public int getRowCount() { - return dragData.size(); - } - }; - - - table = new JTable(dragTableModel); - table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - dragTableModel.setColumnWidths(table.getColumnModel()); - - table.setDefaultRenderer(Object.class, new DragCellRenderer()); - - scrollpane = new JScrollPane(table); - scrollpane.setPreferredSize(new Dimension(600, 200)); - - //// Drag characteristics and Drag characteristics tooltip - tabbedPane.addTab(trans.get("componentanalysisdlg.dragTabchar"), null, scrollpane, - trans.get("componentanalysisdlg.dragTabchar.ttip")); - - - - - // Create the roll data table - rollTableModel = new ColumnTableModel( - //// Component - new Column(trans.get("componentanalysisdlg.rollTableModel.Col.component")) { - @Override - public Object getValueAt(int row) { - RocketComponent c = rollData.get(row).getComponent(); - if (c instanceof Rocket) { - return trans.get("componentanalysisdlg.TOTAL"); - } - return c.toString(); - } - }, - //// Roll forcing coefficient - new Column(trans.get("componentanalysisdlg.rollTableModel.Col.rollforc")) { - @Override - public Object getValueAt(int row) { - return rollData.get(row).getCrollForce(); - } - }, - //// Roll damping coefficient - new Column(trans.get("componentanalysisdlg.rollTableModel.Col.rolldamp")) { - @Override - public Object getValueAt(int row) { - return rollData.get(row).getCrollDamp(); - } - }, - //// Total Cl - new Column(trans.get("componentanalysisdlg.rollTableModel.Col.total")) { - @Override - public Object getValueAt(int row) { - return rollData.get(row).getCroll(); - } - } - ) { - /** - * - */ - private static final long serialVersionUID = 1L; - - @Override - public int getRowCount() { - return rollData.size(); - } - }; - - - table = new JTable(rollTableModel); - table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - table.setDefaultRenderer(Object.class, new RollDynamicsCellRenderer()); - - scrollpane = new JScrollPane(table); - scrollpane.setPreferredSize(new Dimension(600, 200)); - - //// Roll dynamics and Roll dynamics tooltip - tabbedPane.addTab(trans.get("componentanalysisdlg.rollTableModel"), null, scrollpane, - trans.get("componentanalysisdlg.rollTableModel.ttip")); - - - - // Add the data updater to listen to changes - rkt.addChangeListener(this); - mach.addChangeListener(this); - theta.addChangeListener(this); - aoa.addChangeListener(this); - roll.addChangeListener(this); - this.stateChanged(null); - - - - // Remove listeners when closing window + // Reset the singleton this.addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { - theta.setValue(parameters.getInitialTheta()); - - //System.out.println("Closing method called: " + this); - rkt.removeChangeListener(ComponentAnalysisDialog.this); - mach.removeChangeListener(ComponentAnalysisDialog.this); - theta.removeChangeListener(ComponentAnalysisDialog.this); - aoa.removeChangeListener(ComponentAnalysisDialog.this); - roll.removeChangeListener(ComponentAnalysisDialog.this); - //System.out.println("SETTING NAN VALUES"); - rocketPanel.setCPAOA(Double.NaN); - rocketPanel.setCPTheta(Double.NaN); - rocketPanel.setCPMach(Double.NaN); - rocketPanel.setCPRoll(Double.NaN); singletonDialog = null; } }); - //// Reference length: - panel.add(new StyledLabel(trans.get("componentanalysisdlg.lbl.reflenght"), -1), - "span, split, gapleft para, gapright rel"); - DoubleModel dm = new DoubleModel(conditions, "RefLength", UnitGroup.UNITS_LENGTH); - UnitSelector sel = new UnitSelector(dm, true); - sel.resizeFont(-1); - panel.add(sel, "gapright para"); - - //// Reference area: - panel.add(new StyledLabel(trans.get("componentanalysisdlg.lbl.refarea"), -1), "gapright rel"); - dm = new DoubleModel(conditions, "RefArea", UnitGroup.UNITS_AREA); - sel = new UnitSelector(dm, true); - sel.resizeFont(-1); - panel.add(sel, "wrap"); - - - - // Buttons - JButton plotExportBtn = new JButton(trans.get("simpanel.but.plotexport")); - plotExportBtn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - ComponentAnalysisPlotExportDialog dialog = new ComponentAnalysisPlotExportDialog(ComponentAnalysisDialog.this, - parameters, aerodynamicCalculator, rkt); - dialog.setVisible(true); - } - }); - panel.add(plotExportBtn, "tag plotexport"); - - // TODO: LOW: printing - // button = new JButton("Print"); - // button.addActionListener(new ActionListener() { - // public void actionPerformed(ActionEvent e) { - // try { - // table.print(); - // } catch (PrinterException e1) { - // JOptionPane.showMessageDialog(ComponentAnalysisDialog.this, - // "An error occurred while printing.", "Print error", - // JOptionPane.ERROR_MESSAGE); - // } - // } - // }); - // panel.add(button,"tag ok"); - - //Close button + // Close button JButton closeBtn = new JButton(trans.get("dlg.but.close")); closeBtn.addActionListener(new ActionListener() { @Override @@ -500,294 +64,32 @@ public class ComponentAnalysisDialog extends JDialog implements StateChangeListe ComponentAnalysisDialog.this.dispose(); } }); - panel.add(closeBtn, "span, tag cancel"); + panel.add(closeBtn, "span, gapbefore push, split 2, right, tag cancel"); + // OK button + this.okButton = plotExportTab.getOkButton(); + this.okButton.setVisible(false); + panel.add(okButton, "tag cancel, wrap"); + + tabbedPane.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + showOkButton(tabbedPane.getSelectedComponent() == plotExportTab); + } + }); this.setLocationByPlatform(true); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + validate(); pack(); GUIUtil.setDisposableDialogOptions(this, null); } - - - /** - * Updates the data in the table and fires a table data change event. - */ - @Override - public void stateChanged(EventObject e) { - final FlightConfiguration configuration = rkt.getSelectedConfiguration(); - AerodynamicForces forces; - WarningSet set = new WarningSet(); - conditions.setAOA(aoa.getValue()); - conditions.setTheta(theta.getValue()); - conditions.setMach(mach.getValue()); - conditions.setRollRate(roll.getValue()); - conditions.setReference(configuration); - - if (worstToggle.isSelected()) { - aerodynamicCalculator.getWorstCP(configuration, conditions, null); - if (!MathUtil.equals(conditions.getTheta(), theta.getValue())) { - fakeChange = true; - theta.setValue(conditions.getTheta()); // Fires a stateChanged event - fakeChange = false; - return; - } - } - - // key is the comp.hashCode() or motor.getDesignation().hashCode() - Map cmMap= MassCalculator.getCMAnalysis(configuration); - - Map aeroData = aerodynamicCalculator.getForceAnalysis(configuration, conditions, set); - - stabData.clear(); - dragData.clear(); - rollData.clear(); - - for (final RocketComponent comp: configuration.getAllComponents()) { - CMAnalysisEntry cmEntry = cmMap.get(comp.hashCode()); - if (null == cmEntry) { - log.warn("Could not find massData entry for component: " + comp.getName()); - continue; - } - - if ((comp instanceof ComponentAssembly) && !(comp instanceof Rocket)){ - continue; - } - - String name = cmEntry.name; - if (cmEntry.source instanceof Rocket) { - name = trans.get("componentanalysisdlg.TOTAL"); - } - LongitudinalStabilityRow row = new LongitudinalStabilityRow(name, cmEntry.source); - stabData.add(row); - - row.source = cmEntry.source; - row.eachMass = cmEntry.eachMass; - row.cm = cmEntry.totalCM; - - forces = aeroData.get(comp); - if (forces == null) { - row.cpx = 0.0; - row.cna = 0.0; - continue; - } - - if (forces.getCP() != null) { - if ((comp instanceof Rocket) && - (forces.getCP().weight < MathUtil.EPSILON)) { - row.cpx = Double.NaN; - } else { - row.cpx = forces.getCP().x; - } - row.cna = forces.getCNa(); - } - - if (!Double.isNaN(forces.getCD())) { - dragData.add(forces); - } - - if (comp instanceof FinSet) { - rollData.add(forces); - } - // // We _would_ check this, except TubeFinSet doesn't implement cant angles... so they can't impart any roll torque - // // If this is ever implemented, uncomment this block: - // else if(comp instanceof TubeFinSet){ - // rollData.add(forces) - // } - } - - for (final MotorConfiguration config: configuration.getActiveMotors()) { - CMAnalysisEntry cmEntry = cmMap.get(config.getMotor().getDesignation().hashCode()); - if (null == cmEntry) { - continue; - } - - LongitudinalStabilityRow row = new LongitudinalStabilityRow(cmEntry.name, cmEntry.source); - stabData.add(row); - - row.source = cmEntry.source; - row.eachMass = cmEntry.eachMass; - row.cm = cmEntry.totalCM; - row.cpx = 0.0; - row.cna = 0.0; - } - - // Set warnings - if (set.isEmpty()) { - warningList.setListData(new String[] {trans.get("componentanalysisdlg.noWarnings") - }); - } else { - warningList.setListData(new Vector<>(set)); - } - - longitudeStabilityTableModel.fireTableDataChanged(); - dragTableModel.fireTableDataChanged(); - rollTableModel.fireTableDataChanged(); - } - - /** - * Default cell renderer for the tables. - */ - private class CustomCellRenderer extends DefaultTableCellRenderer { - private static final long serialVersionUID = 1L; - protected final Font normalFont; - protected final Font boldFont; - - private final List data; - protected final int decimalPlaces; - - private static Color backgroundColor; - - static { - initColors(); - } - - public CustomCellRenderer(List data, int decimalPlaces) { - super(); - this.decimalPlaces = decimalPlaces; - this.data = data; - this.normalFont = getFont(); - this.boldFont = normalFont.deriveFont(Font.BOLD); - } - - private static void initColors() { - updateColors(); - UITheme.Theme.addUIThemeChangeListener(CustomCellRenderer::updateColors); - } - - private static void updateColors() { - backgroundColor = GUIUtil.getUITheme().getBackgroundColor(); - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, - boolean isSelected, boolean hasFocus, int row, int column) { - JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - - if (value instanceof Double) { - label.setText(formatDouble((Double) value)); - } else { - // Other - label.setText(value != null ? value.toString() : null); - } - - label.setOpaque(true); - label.setBackground(backgroundColor); - label.setHorizontalAlignment(SwingConstants.LEFT); - - if ((row < 0) || (row >= data.size())) - return label; - - // Set selected color - if (isSelected) { - label.setBackground(table.getSelectionBackground()); - label.setForeground((Color) UIManager.get("Table.selectionForeground")); - } else { - label.setForeground(table.getForeground()); - } - - return label; - } - - protected String formatDouble(Double value) { - DecimalFormat df = new DecimalFormat("0." + "#".repeat(Math.max(0, decimalPlaces))); - return df.format(value); - } - } - - - private class StabilityCellRenderer extends CustomCellRenderer { - public StabilityCellRenderer() { - super(stabData, 3); - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, - boolean isSelected, boolean hasFocus, int row, int column) { - JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - - if (row == 0) { - this.setFont(boldFont); - } else { - this.setFont(normalFont); - } - - return label; - } - } - - private class DragCellRenderer extends CustomCellRenderer { - private static final long serialVersionUID = 1L; - - public DragCellRenderer() { - super(dragData, 3); - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, - boolean isSelected, boolean hasFocus, int row, int column) { - JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); - - if (!isSelected && (value instanceof Double)) { - double cd = (Double) value; - float r = (float) (cd / 1.5); - - float hue = MathUtil.clamp(0.3333f * (1 - 2.0f * r), 0, 0.3333f); - float sat = MathUtil.clamp(0.8f * r + 0.1f * (1 - r), 0, 1); - float val = 1.0f; - - label.setBackground(Color.getHSBColor(hue, sat, val)); - label.setForeground(Color.BLACK); - } - - if ((row < 0) || (row >= dragData.size())) - return label; - - if ((dragData.get(row).getComponent() instanceof Rocket) || (column == 4)) { - label.setFont(boldFont); - } else { - label.setFont(normalFont); - } - - return label; - } - - @Override - protected String formatDouble(Double cd) { - final double totalCD = dragData.get(0).getCD(); - - DecimalFormat df = new DecimalFormat("0." + "#".repeat(Math.max(0, decimalPlaces))); - String cdFormatted = df.format(cd); - return String.format(cdFormatted + " (%.0f%%)", 100 * cd / totalCD); - } - } - - private class RollDynamicsCellRenderer extends CustomCellRenderer { - public RollDynamicsCellRenderer() { - super(rollData, 3); - } - } - - private class LongitudinalStabilityRow { - - public String name; - public Object source; - public double eachMass; - public Coordinate cm; - public double cpx; - public double cna; - - public LongitudinalStabilityRow(final String _name, final Object _source){ - name = _name; - source = _source; - eachMass = Double.NaN; - cm = Coordinate.NaN; - cpx = Double.NaN; - cna = Double.NaN; - } - + public void showOkButton(boolean visible) { + this.okButton.setVisible(visible); + revalidate(); + repaint(); } ///////// Singleton implementation @@ -803,5 +105,4 @@ public class ComponentAnalysisDialog extends JDialog implements StateChangeListe if (singletonDialog != null) singletonDialog.dispose(); } - } diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisGeneralPanel.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisGeneralPanel.java new file mode 100644 index 000000000..e254a51da --- /dev/null +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisGeneralPanel.java @@ -0,0 +1,759 @@ +package info.openrocket.swing.gui.dialogs.componentanalysis; + +import info.openrocket.core.aerodynamics.AerodynamicCalculator; +import info.openrocket.core.aerodynamics.AerodynamicForces; +import info.openrocket.core.aerodynamics.FlightConditions; +import info.openrocket.core.l10n.Translator; +import info.openrocket.core.logging.WarningSet; +import info.openrocket.core.masscalc.CMAnalysisEntry; +import info.openrocket.core.masscalc.MassCalculator; +import info.openrocket.core.motor.MotorConfiguration; +import info.openrocket.core.rocketcomponent.ComponentAssembly; +import info.openrocket.core.rocketcomponent.FinSet; +import info.openrocket.core.rocketcomponent.FlightConfiguration; +import info.openrocket.core.rocketcomponent.Rocket; +import info.openrocket.core.rocketcomponent.RocketComponent; +import info.openrocket.core.startup.Application; +import info.openrocket.core.unit.Unit; +import info.openrocket.core.unit.UnitGroup; +import info.openrocket.core.util.Coordinate; +import info.openrocket.core.util.MathUtil; +import info.openrocket.core.util.StateChangeListener; +import info.openrocket.swing.gui.adaptors.Column; +import info.openrocket.swing.gui.adaptors.ColumnTable; +import info.openrocket.swing.gui.adaptors.ColumnTableModel; +import info.openrocket.swing.gui.adaptors.DoubleModel; +import info.openrocket.swing.gui.components.BasicSlider; +import info.openrocket.swing.gui.components.ConfigurationComboBox; +import info.openrocket.swing.gui.components.EditableSpinner; +import info.openrocket.swing.gui.components.StageSelector; +import info.openrocket.swing.gui.components.StyledLabel; +import info.openrocket.swing.gui.components.UnitSelector; +import info.openrocket.swing.gui.scalefigure.RocketPanel; +import info.openrocket.swing.gui.theme.UITheme; +import info.openrocket.swing.gui.util.GUIUtil; +import net.miginfocom.swing.MigLayout; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTable; +import javax.swing.JToggleButton; +import javax.swing.ListSelectionModel; +import javax.swing.SwingConstants; +import javax.swing.UIManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import static info.openrocket.core.unit.Unit.NOUNIT; +import static info.openrocket.core.util.Chars.ALPHA; + +public class ComponentAnalysisGeneralPanel extends JPanel implements StateChangeListener { + private static final Logger log = LoggerFactory.getLogger(ComponentAnalysisDialog.class); + private static final Translator trans = Application.getTranslator(); + + + private final FlightConditions conditions; + private final Rocket rocket; + private final DoubleModel theta, aoa, mach, roll; + private final JToggleButton worstToggle; + private boolean fakeChange = false; + private final AerodynamicCalculator aerodynamicCalculator; + private final CAParameters parameters; + + private final ColumnTableModel longitudeStabilityTableModel; + private final ColumnTableModel dragTableModel; + private final ColumnTableModel rollTableModel; + + private final JList warningList; + + + private final List stabData = new ArrayList<>(); + private final List dragData = new ArrayList<>(); + private final List rollData = new ArrayList<>(); + + + public ComponentAnalysisGeneralPanel(Window parent, final RocketPanel rocketPanel) { + super(new MigLayout("fill", "[120lp][70lp][50lp][]")); + + this.rocket = rocketPanel.getDocument().getRocket(); + this.aerodynamicCalculator = rocketPanel.getAerodynamicCalculator().newInstance(); + + this.conditions = new FlightConditions(rocket.getSelectedConfiguration()); + + // Create CAParameters + this.parameters = new CAParameters(rocket, rocketPanel); + + this.aoa = new DoubleModel(parameters, "AOA", UnitGroup.UNITS_ANGLE, 0, Math.PI); + this.mach = new DoubleModel(parameters, "Mach", UnitGroup.UNITS_COEFFICIENT, 0); + this.theta = new DoubleModel(parameters, "Theta", UnitGroup.UNITS_ANGLE, 0, 2 * Math.PI); + this.roll = new DoubleModel(parameters, "RollRate", UnitGroup.UNITS_ROLL); + + JTable table; + + //// Wind direction: + this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.winddir"))); + EditableSpinner spinner = new EditableSpinner(theta.getSpinnerModel()); + this.add(spinner, "growx"); + this.add(new UnitSelector(theta)); + BasicSlider slider = new BasicSlider(theta.getSliderModel(0, 2 * Math.PI)); + this.add(slider, "growx, split 2"); + //// Worst button + this.worstToggle = new JToggleButton(trans.get("ComponentAnalysisGeneralTab.ToggleBut.worst")); + this.worstToggle.setSelected(true); + this.worstToggle.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + stateChanged(null); + } + }); + slider.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (!fakeChange) + worstToggle.setSelected(false); + } + }); + this.add(worstToggle); + + + this.warningList = new JList<>(); + JScrollPane scrollPane = new JScrollPane(warningList); + ////Warnings: + scrollPane.setBorder(BorderFactory.createTitledBorder(trans.get("ComponentAnalysisGeneralTab.TitledBorder.warnings"))); + this.add(scrollPane, "gap paragraph, spany 4, w 300lp, grow, height :100lp:, wrap"); + + ////Angle of attack: + this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.angleofattack"))); + this.add(new EditableSpinner(aoa.getSpinnerModel()), "growx"); + this.add(new UnitSelector(aoa)); + this.add(new BasicSlider(aoa.getSliderModel(0, Math.PI)), "growx, wrap"); + + //// Mach number: + this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.machnumber"))); + this.add(new EditableSpinner(mach.getSpinnerModel())); + this.add(new UnitSelector(mach)); + this.add(new BasicSlider(mach.getSliderModel(0, 3)), "growx, wrap"); + + //// Roll rate: + this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.rollrate"))); + this.add(new EditableSpinner(roll.getSpinnerModel()), "growx"); + this.add(new UnitSelector(roll)); + this.add(new BasicSlider(roll.getSliderModel(-20 * 2 * Math.PI, 20 * 2 * Math.PI)), + "growx, wrap"); + + // Stage and motor selection: + //// Active stages: + StageSelector stageSelector = new StageSelector(rocket); + this.rocket.addChangeListener(stageSelector); + this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.activestages")), "spanx, split, gapafter rel"); + this.add(stageSelector, "gapafter paragraph"); + + //// Motor configuration: + JLabel label = new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.motorconf")); + label.setHorizontalAlignment(JLabel.RIGHT); + this.add(label, "growx, right"); + + final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rocket); + this.add( configComboBox, "wrap"); + + + // Tabbed pane + + JTabbedPane tabbedPane = new JTabbedPane(); + this.add(tabbedPane, "spanx, growx, growy, pushy"); + + + // Create the Longitudinal Stability (CM vs CP) data table + this.longitudeStabilityTableModel = new ColumnTableModel( + + //// Component + new Column(trans.get("ComponentAnalysisGeneralTab.TabStability.Col.Component")) { + @Override + public Object getValueAt(int row) { + Object c = stabData.get(row).name; + + return c.toString(); + } + + @Override + public int getDefaultWidth() { + return 200; + } + }, + // would be per-instance mass + new Column(trans.get("ComponentAnalysisGeneralTab.TabStability.Col.EachMass") + " (" + UnitGroup.UNITS_MASS.getDefaultUnit().getUnit() + ")") { + final private Unit unit = UnitGroup.UNITS_MASS.getDefaultUnit(); + + @Override + public Object getValueAt(int row) { + return unit.toUnit(stabData.get(row).eachMass); + } + }, + new Column(trans.get("ComponentAnalysisGeneralTab.TabStability.Col.AllMass") + " (" + UnitGroup.UNITS_MASS.getDefaultUnit().getUnit() + ")") { + final private Unit unit = UnitGroup.UNITS_MASS.getDefaultUnit(); + + @Override + public Object getValueAt(int row) { + return unit.toUnit(stabData.get(row).cm.weight); + } + }, + new Column(trans.get("ComponentAnalysisGeneralTab.TabStability.Col.CG") + " (" + UnitGroup.UNITS_LENGTH.getDefaultUnit().getUnit() + ")") { + final private Unit unit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); + + @Override + public Object getValueAt(int row) { + return unit.toUnit(stabData.get(row).cm.x); + } + }, + new Column(trans.get("ComponentAnalysisGeneralTab.TabStability.Col.CP") + " (" + UnitGroup.UNITS_LENGTH.getDefaultUnit().getUnit() + ")") { + final private Unit unit = UnitGroup.UNITS_LENGTH.getDefaultUnit(); + + @Override + public Object getValueAt(int row) { + return unit.toUnit(stabData.get(row).cpx); + } + }, + new Column("CN" + ALPHA + "") { + @Override + public Object getValueAt(int row) { + return NOUNIT.toUnit(stabData.get(row).cna); + } + } + + ) { + /** + * + */ + private static final long serialVersionUID = 1L; + + + @Override + public int getRowCount() { + return stabData.size(); + } + }; + + table = new ColumnTable(longitudeStabilityTableModel); + table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + this.longitudeStabilityTableModel.setColumnWidths(table.getColumnModel()); + + table.setDefaultRenderer(Object.class, new StabilityCellRenderer()); + + JScrollPane scrollpane = new JScrollPane(table); + scrollpane.setPreferredSize(new Dimension(600, 200)); + + //// Stability and Stability information + tabbedPane.addTab(trans.get("ComponentAnalysisGeneralTab.TabStability"), + null, scrollpane, trans.get("ComponentAnalysisGeneralTab.TabStability.ttip")); + + + + // Create the drag data table + this.dragTableModel = new ColumnTableModel( + //// Component + new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Component")) { + @Override + public Object getValueAt(int row) { + RocketComponent c = dragData.get(row).getComponent(); + if (c instanceof Rocket) { + return trans.get("ComponentAnalysisGeneralTab.TOTAL"); + } + return c.toString(); + } + + @Override + public int getDefaultWidth() { + return 200; + } + }, + //// Pressure CD + new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure")) { + @Override + public Object getValueAt(int row) { + return dragData.get(row).getPressureCD(); + } + }, + //// Base CD + new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Base")) { + @Override + public Object getValueAt(int row) { + return dragData.get(row).getBaseCD(); + } + }, + //// Friction CD + new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.friction")) { + @Override + public Object getValueAt(int row) { + return dragData.get(row).getFrictionCD(); + } + }, + //// Total CD + new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.total")) { + @Override + public Object getValueAt(int row) { + return dragData.get(row).getCD(); + } + } + ) { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public int getRowCount() { + return dragData.size(); + } + }; + + + table = new JTable(dragTableModel); + table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + this.dragTableModel.setColumnWidths(table.getColumnModel()); + + table.setDefaultRenderer(Object.class, new DragCellRenderer()); + + scrollpane = new JScrollPane(table); + scrollpane.setPreferredSize(new Dimension(600, 200)); + + //// Drag characteristics and Drag characteristics tooltip + tabbedPane.addTab(trans.get("ComponentAnalysisGeneralTab.dragTabchar"), null, scrollpane, + trans.get("ComponentAnalysisGeneralTab.dragTabchar.ttip")); + + + + + // Create the roll data table + this.rollTableModel = new ColumnTableModel( + //// Component + new Column(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.component")) { + @Override + public Object getValueAt(int row) { + RocketComponent c = rollData.get(row).getComponent(); + if (c instanceof Rocket) { + return trans.get("ComponentAnalysisGeneralTab.TOTAL"); + } + return c.toString(); + } + }, + //// Roll forcing coefficient + new Column(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc")) { + @Override + public Object getValueAt(int row) { + return rollData.get(row).getCrollForce(); + } + }, + //// Roll damping coefficient + new Column(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp")) { + @Override + public Object getValueAt(int row) { + return rollData.get(row).getCrollDamp(); + } + }, + //// Total Cl + new Column(trans.get("ComponentAnalysisGeneralTab.rollTableModel.Col.total")) { + @Override + public Object getValueAt(int row) { + return rollData.get(row).getCroll(); + } + } + ) { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Override + public int getRowCount() { + return rollData.size(); + } + }; + + + table = new JTable(rollTableModel); + table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + table.setDefaultRenderer(Object.class, new RollDynamicsCellRenderer()); + + scrollpane = new JScrollPane(table); + scrollpane.setPreferredSize(new Dimension(600, 200)); + + //// Roll dynamics and Roll dynamics tooltip + tabbedPane.addTab(trans.get("ComponentAnalysisGeneralTab.rollTableModel"), null, scrollpane, + trans.get("ComponentAnalysisGeneralTab.rollTableModel.ttip")); + + + //// Reference length: + this.add(new StyledLabel(trans.get("ComponentAnalysisGeneralTab.lbl.reflenght"), -1), + "span, split, gapleft para, gapright rel"); + DoubleModel dm = new DoubleModel(conditions, "RefLength", UnitGroup.UNITS_LENGTH); + UnitSelector sel = new UnitSelector(dm, true); + sel.resizeFont(-1); + this.add(sel, "gapright para"); + + //// Reference area: + this.add(new StyledLabel(trans.get("ComponentAnalysisGeneralTab.lbl.refarea"), -1), "gapright rel"); + dm = new DoubleModel(conditions, "RefArea", UnitGroup.UNITS_AREA); + sel = new UnitSelector(dm, true); + sel.resizeFont(-1); + this.add(sel, "wrap"); + + + + // TODO: LOW: printing + // button = new JButton("Print"); + // button.addActionListener(new ActionListener() { + // public void actionPerformed(ActionEvent e) { + // try { + // table.print(); + // } catch (PrinterException e1) { + // JOptionPane.showMessageDialog(ComponentAnalysisDialog.this, + // "An error occurred while printing.", "Print error", + // JOptionPane.ERROR_MESSAGE); + // } + // } + // }); + // this.add(button,"tag ok"); + + + // Add the data updater to listen to changes + this.rocket.addChangeListener(this); + this.mach.addChangeListener(this); + this.theta.addChangeListener(this); + this.aoa.addChangeListener(this); + this.roll.addChangeListener(this); + this.stateChanged(null); + + // Remove listeners when closing window + parent.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + theta.setValue(parameters.getInitialTheta()); + + //System.out.println("Closing method called: " + this); + rocket.removeChangeListener(ComponentAnalysisGeneralPanel.this); + mach.removeChangeListener(ComponentAnalysisGeneralPanel.this); + theta.removeChangeListener(ComponentAnalysisGeneralPanel.this); + aoa.removeChangeListener(ComponentAnalysisGeneralPanel.this); + roll.removeChangeListener(ComponentAnalysisGeneralPanel.this); + //System.out.println("SETTING NAN VALUES"); + rocketPanel.setCPAOA(Double.NaN); + rocketPanel.setCPTheta(Double.NaN); + rocketPanel.setCPMach(Double.NaN); + rocketPanel.setCPRoll(Double.NaN); + } + }); + } + + + public CAParameters getParameters() { + return parameters; + } + + public AerodynamicCalculator getAerodynamicCalculator() { + return aerodynamicCalculator; + } + + public Rocket getRocket() { + return rocket; + } + + /** + * Updates the data in the table and fires a table data change event. + */ + @Override + public void stateChanged(EventObject e) { + final FlightConfiguration configuration = rocket.getSelectedConfiguration(); + AerodynamicForces forces; + WarningSet set = new WarningSet(); + conditions.setAOA(aoa.getValue()); + conditions.setTheta(theta.getValue()); + conditions.setMach(mach.getValue()); + conditions.setRollRate(roll.getValue()); + conditions.setReference(configuration); + + if (worstToggle.isSelected()) { + aerodynamicCalculator.getWorstCP(configuration, conditions, null); + if (!MathUtil.equals(conditions.getTheta(), theta.getValue())) { + fakeChange = true; + theta.setValue(conditions.getTheta()); // Fires a stateChanged event + fakeChange = false; + return; + } + } + + // key is the comp.hashCode() or motor.getDesignation().hashCode() + Map cmMap= MassCalculator.getCMAnalysis(configuration); + + Map aeroData = aerodynamicCalculator.getForceAnalysis(configuration, conditions, set); + + stabData.clear(); + dragData.clear(); + rollData.clear(); + + for (final RocketComponent comp: configuration.getAllComponents()) { + CMAnalysisEntry cmEntry = cmMap.get(comp.hashCode()); + if (null == cmEntry) { + log.warn("Could not find massData entry for component: " + comp.getName()); + continue; + } + + if ((comp instanceof ComponentAssembly) && !(comp instanceof Rocket)){ + continue; + } + + String name = cmEntry.name; + if (cmEntry.source instanceof Rocket) { + name = trans.get("ComponentAnalysisGeneralTab.TOTAL"); + } + LongitudinalStabilityRow row = new LongitudinalStabilityRow(name, cmEntry.source); + stabData.add(row); + + row.source = cmEntry.source; + row.eachMass = cmEntry.eachMass; + row.cm = cmEntry.totalCM; + + forces = aeroData.get(comp); + if (forces == null) { + row.cpx = 0.0; + row.cna = 0.0; + continue; + } + + if (forces.getCP() != null) { + if ((comp instanceof Rocket) && + (forces.getCP().weight < MathUtil.EPSILON)) { + row.cpx = Double.NaN; + } else { + row.cpx = forces.getCP().x; + } + row.cna = forces.getCNa(); + } + + if (!Double.isNaN(forces.getCD())) { + dragData.add(forces); + } + + if (comp instanceof FinSet) { + rollData.add(forces); + } + // // We _would_ check this, except TubeFinSet doesn't implement cant angles... so they can't impart any roll torque + // // If this is ever implemented, uncomment this block: + // else if(comp instanceof TubeFinSet){ + // rollData.add(forces) + // } + } + + for (final MotorConfiguration config: configuration.getActiveMotors()) { + CMAnalysisEntry cmEntry = cmMap.get(config.getMotor().getDesignation().hashCode()); + if (null == cmEntry) { + continue; + } + + LongitudinalStabilityRow row = new LongitudinalStabilityRow(cmEntry.name, cmEntry.source); + stabData.add(row); + + row.source = cmEntry.source; + row.eachMass = cmEntry.eachMass; + row.cm = cmEntry.totalCM; + row.cpx = 0.0; + row.cna = 0.0; + } + + // Set warnings + if (set.isEmpty()) { + warningList.setListData(new String[] {trans.get("ComponentAnalysisGeneralTab.noWarnings") + }); + } else { + warningList.setListData(new Vector<>(set)); + } + + longitudeStabilityTableModel.fireTableDataChanged(); + dragTableModel.fireTableDataChanged(); + rollTableModel.fireTableDataChanged(); + } + + /** + * Default cell renderer for the tables. + */ + private class CustomCellRenderer extends DefaultTableCellRenderer { + private static final long serialVersionUID = 1L; + protected final Font normalFont; + protected final Font boldFont; + + private final List data; + protected final int decimalPlaces; + + private static Color backgroundColor; + + static { + initColors(); + } + + public CustomCellRenderer(List data, int decimalPlaces) { + super(); + this.decimalPlaces = decimalPlaces; + this.data = data; + this.normalFont = getFont(); + this.boldFont = normalFont.deriveFont(Font.BOLD); + } + + private static void initColors() { + updateColors(); + UITheme.Theme.addUIThemeChangeListener(CustomCellRenderer::updateColors); + } + + private static void updateColors() { + backgroundColor = GUIUtil.getUITheme().getBackgroundColor(); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + if (value instanceof Double) { + label.setText(formatDouble((Double) value)); + } else { + // Other + label.setText(value != null ? value.toString() : null); + } + + label.setOpaque(true); + label.setBackground(backgroundColor); + label.setHorizontalAlignment(SwingConstants.LEFT); + + if ((row < 0) || (row >= data.size())) + return label; + + // Set selected color + if (isSelected) { + label.setBackground(table.getSelectionBackground()); + label.setForeground((Color) UIManager.get("Table.selectionForeground")); + } else { + label.setForeground(table.getForeground()); + } + + return label; + } + + protected String formatDouble(Double value) { + DecimalFormat df = new DecimalFormat("0." + "#".repeat(Math.max(0, decimalPlaces))); + return df.format(value); + } + } + + + private class StabilityCellRenderer extends CustomCellRenderer { + public StabilityCellRenderer() { + super(stabData, 3); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + if (row == 0) { + this.setFont(boldFont); + } else { + this.setFont(normalFont); + } + + return label; + } + } + + private class DragCellRenderer extends CustomCellRenderer { + private static final long serialVersionUID = 1L; + + public DragCellRenderer() { + super(dragData, 3); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, int row, int column) { + JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + + if (!isSelected && (value instanceof Double)) { + double cd = (Double) value; + float r = (float) (cd / 1.5); + + float hue = MathUtil.clamp(0.3333f * (1 - 2.0f * r), 0, 0.3333f); + float sat = MathUtil.clamp(0.8f * r + 0.1f * (1 - r), 0, 1); + float val = 1.0f; + + label.setBackground(Color.getHSBColor(hue, sat, val)); + label.setForeground(Color.BLACK); + } + + if ((row < 0) || (row >= dragData.size())) + return label; + + if ((dragData.get(row).getComponent() instanceof Rocket) || (column == 4)) { + label.setFont(boldFont); + } else { + label.setFont(normalFont); + } + + return label; + } + + @Override + protected String formatDouble(Double cd) { + final double totalCD = dragData.get(0).getCD(); + + DecimalFormat df = new DecimalFormat("0." + "#".repeat(Math.max(0, decimalPlaces))); + String cdFormatted = df.format(cd); + return String.format(cdFormatted + " (%.0f%%)", 100 * cd / totalCD); + } + } + + private class RollDynamicsCellRenderer extends CustomCellRenderer { + public RollDynamicsCellRenderer() { + super(rollData, 3); + } + } + + private class LongitudinalStabilityRow { + + public String name; + public Object source; + public double eachMass; + public Coordinate cm; + public double cpx; + public double cna; + + public LongitudinalStabilityRow(final String _name, final Object _source){ + name = _name; + source = _source; + eachMass = Double.NaN; + cm = Coordinate.NaN; + cpx = Double.NaN; + cna = Double.NaN; + } + + } +} diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisPlotExportDialog.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisPlotExportPanel.java similarity index 86% rename from swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisPlotExportDialog.java rename to swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisPlotExportPanel.java index 6dbcce8f5..b5039e359 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisPlotExportDialog.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/componentanalysis/ComponentAnalysisPlotExportPanel.java @@ -8,7 +8,6 @@ import info.openrocket.core.startup.Application; import info.openrocket.swing.gui.adaptors.DoubleModel; import info.openrocket.swing.gui.components.EditableSpinner; import info.openrocket.swing.gui.components.UnitSelector; -import info.openrocket.swing.gui.util.GUIUtil; import net.miginfocom.swing.MigLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,10 +30,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class ComponentAnalysisPlotExportDialog extends JDialog { +public class ComponentAnalysisPlotExportPanel extends JPanel { private static final Translator trans = Application.getTranslator(); - private static final Logger log = LoggerFactory.getLogger(ComponentAnalysisPlotExportDialog.class); + private static final Logger log = LoggerFactory.getLogger(ComponentAnalysisPlotExportPanel.class); + private final Window parent; private final JTabbedPane tabbedPane; JComboBox parameterSelector; private JButton okButton; @@ -56,12 +56,11 @@ public class ComponentAnalysisPlotExportDialog extends JDialog { private final Map> componentCache; private boolean isCacheValid; - public ComponentAnalysisPlotExportDialog(Window parent, CAParameters parameters, - AerodynamicCalculator aerodynamicCalculator, Rocket rocket) { - super(parent, trans.get("CAPlotExportDialog.title"), JDialog.ModalityType.DOCUMENT_MODAL); - - final JPanel contentPanel = new JPanel(new MigLayout("fill, height 500px")); + public ComponentAnalysisPlotExportPanel(ComponentAnalysisDialog parent, CAParameters parameters, + AerodynamicCalculator aerodynamicCalculator, Rocket rocket) { + super(new MigLayout("fill, height 500px")); + this.parent = parent; this.parameters = parameters; this.parameterSweep = new CAParameterSweep(parameters, aerodynamicCalculator, rocket); this.componentCache = new HashMap<>(); @@ -70,23 +69,22 @@ public class ComponentAnalysisPlotExportDialog extends JDialog { this.types = getValidTypes(); // ======== Top panel ======== - addTopPanel(contentPanel); + addTopPanel(); // ======== Tabbed pane ======== this.tabbedPane = new JTabbedPane(); + this.add(tabbedPane, "spanx, growx, growy, pushy, wrap"); //// Plot data this.plotTab = CAPlotPanel.create(this, types); - this.tabbedPane.addTab(trans.get("CAPlotExportDialog.tab.Plot"), this.plotTab); + this.tabbedPane.addTab(trans.get("CAPlotExportDialog.tab.Plot"), null, this.plotTab); //// Export data this.exportTab = CAExportPanel.create(types); - this.tabbedPane.addTab(trans.get("CAPlotExportDialog.tab.Export"), this.exportTab); + this.tabbedPane.addTab(trans.get("CAPlotExportDialog.tab.Export"), null, this.exportTab); - contentPanel.add(tabbedPane, "grow, wrap"); - - // ======== Bottom panel ======== - addBottomPanel(contentPanel); + // Create the OK button + createOkButton(); // Update the OK button text based on the selected tab tabbedPane.addChangeListener(new ChangeListener() { @@ -107,18 +105,13 @@ public class ComponentAnalysisPlotExportDialog extends JDialog { } }); - this.add(contentPanel); - this.validate(); - this.pack(); + validate(); // Add listeners for events that would invalidate the cache rocket.addComponentChangeListener(e -> invalidateCache()); - - this.setLocationByPlatform(true); - GUIUtil.setDisposableDialogOptions(this, null); } - private void addTopPanel(JPanel contentPanel) { + private void addTopPanel() { JPanel topPanel = new JPanel(new MigLayout("fill")); TitledBorder border = BorderFactory.createTitledBorder(trans.get("CAPlotExportDialog.XAxisConfiguration")); topPanel.setBorder(border); @@ -195,40 +188,25 @@ public class ComponentAnalysisPlotExportDialog extends JDialog { } }); - contentPanel.add(topPanel, "growx, wrap"); + this.add(topPanel, "growx, wrap"); } - private void addBottomPanel(JPanel contentPanel) { - JPanel bottomPanel = new JPanel(new MigLayout("fill, ins 0")); - - // Close button - JButton closeButton = new JButton(trans.get("dlg.but.close")); - closeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - ComponentAnalysisPlotExportDialog.this.dispose(); - } - }); - bottomPanel.add(closeButton, "gapbefore push, split 2, right"); - + private void createOkButton() { // OK button this.okButton = new JButton(trans.get("SimulationConfigDialog.btn.plot")); okButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (tabbedPane.getSelectedIndex() == PLOT_IDX) { - JDialog dialog = ComponentAnalysisPlotExportDialog.this.plotTab.doPlot(ComponentAnalysisPlotExportDialog.this); + JDialog dialog = ComponentAnalysisPlotExportPanel.this.plotTab.doPlot(parent); if (dialog != null) { dialog.setVisible(true); } } else if (tabbedPane.getSelectedIndex() == EXPORT_IDX) { - ComponentAnalysisPlotExportDialog.this.exportTab.doExport(); + ComponentAnalysisPlotExportPanel.this.exportTab.doExport(); } } }); - bottomPanel.add(okButton, "wrap"); - - contentPanel.add(bottomPanel, "growx, wrap"); } public CADomainDataType getSelectedParameter() { @@ -311,6 +289,14 @@ public class ComponentAnalysisPlotExportDialog extends JDialog { return dataBranch; } + public Window getParentWindow() { + return parent; + } + + public JButton getOkButton() { + return okButton; + } + private double getParameterValue(CADomainDataType parameterType) { if (parameterType.equals(CADomainDataType.MACH)) { return parameters.getMach();