Refactor ComponentAnalysisPlotExportDialog to a tabbed pane in ComponentAnalysisDialog

This commit is contained in:
SiboVG 2024-08-24 03:41:38 +02:00
parent cb7b6ae8d0
commit 88f7c7e18d
20 changed files with 1310 additions and 1260 deletions

View File

@ -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 = <html>Pressure C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Friction C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html>Total C<sub>l</sub>
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 = <html>Pressure C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Friction C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html>Total C<sub>l</sub>
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 = <html><i><font color=\"gray\">No warnings.</font></i>
ComponentAnalysisGeneralTab.TabStability.Col.Component = Component
ComponentAnalysisGeneralTab.TOTAL = Total (Rocket)
ComponentAnalysisGeneralTab.noWarnings = <html><i><font color=\"gray\">No warnings.</font></i>
! CAPlotExportDialog
CAPlotExportDialog.title = Plot / Export Component Analysis

View File

@ -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 = <html>مركز الضغط</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>معامل السحب الأساسي</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>معامل مقاومة الإحتكاك</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>معامل السحب الكلي</sub>
componentanalysisdlg.dragTabchar = خصائص السحب
componentanalysisdlg.dragTabchar.ttip = خصائص السحب
componentanalysisdlg.rollTableModel.Col.component = المكون
componentanalysisdlg.rollTableModel.Col.rollforc = معامل تأثير الإلتفاف
componentanalysisdlg.rollTableModel.Col.rolldamp = معامل تخميد الإلتفاف
componentanalysisdlg.rollTableModel.Col.total = <html>إجمالي معامل الإلتفاف
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 = <html>مركز الضغط</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>معامل السحب الأساسي</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>معامل مقاومة الإحتكاك</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>معامل السحب الكلي</sub>
ComponentAnalysisGeneralTab.dragTabchar = خصائص السحب
ComponentAnalysisGeneralTab.dragTabchar.ttip = خصائص السحب
ComponentAnalysisGeneralTab.rollTableModel.Col.component = المكون
ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = معامل تأثير الإلتفاف
ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = معامل تخميد الإلتفاف
ComponentAnalysisGeneralTab.rollTableModel.Col.total = <html>إجمالي معامل الإلتفاف
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 = <html><i><font color=\"gray\">لا تحذيرات</font></i>
ComponentAnalysisGeneralTab.TabStability.Col.Component = المكون
ComponentAnalysisGeneralTab.TOTAL = الكلي
ComponentAnalysisGeneralTab.noWarnings = <html><i><font color=\"gray\">لا تحذيرات</font></i>
! CADomainDataType
CADomainDataType.lbl.winddir = إتجاه الريح

View File

@ -508,37 +508,37 @@ compaddbuttons.askPosition.Addtotheend = Pridej na konec
compaddbuttons.askPosition.Cancel = Zru\u0161it
! Component Analysis Dialog
componentanalysisdlg.componentanalysis = Analýza soucástky
componentanalysisdlg.lbl.winddir = Smer vetru:
componentanalysisdlg.TitledBorder.warnings = Varování:
componentanalysisdlg.ToggleBut.worst = Nejhor\u0161í
componentanalysisdlg.lbl.angleofattack = Úhel nábehu:
componentanalysisdlg.lbl.machnumber = Machovo císlo:
componentanalysisdlg.lbl.rollrate = Rychlost otácení:
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 = <html>Tlak C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Základní C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Trení C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Celkem C<sub>D</sub>
componentanalysisdlg.dragTabchar = Vlastnosti trupu
componentanalysisdlg.dragTabchar.ttip = Drag characteristics
componentanalysisdlg.rollTableModel.Col.component = Komponenta
componentanalysisdlg.rollTableModel.Col.rollforc = Otácecí koefficient
componentanalysisdlg.rollTableModel.Col.rolldamp = Otácecí tlumící coefficient
componentanalysisdlg.rollTableModel.Col.total = <html>Celkem C<sub>l</sub>
componentanalysisdlg.rollTableModel = Otácecí dynamika
componentanalysisdlg.rollTableModel.ttip = Otácecí dynamika
componentanalysisdlg.println.closingmethod = Jméno uzavírací metody:
componentanalysisdlg.println.settingnam = Nastavení NAN hodnot
componentanalysisdlg.lbl.reflenght = Doporucená délka:
componentanalysisdlg.lbl.refarea = Doporucená plocha:
ComponentAnalysisDialog.componentanalysis = Analýza soucástky
ComponentAnalysisGeneralTab.lbl.winddir = Smer vetru:
ComponentAnalysisGeneralTab.TitledBorder.warnings = Varování:
ComponentAnalysisGeneralTab.ToggleBut.worst = Nejhor\u0161í
ComponentAnalysisGeneralTab.lbl.angleofattack = Úhel nábehu:
ComponentAnalysisGeneralTab.lbl.machnumber = Machovo císlo:
ComponentAnalysisGeneralTab.lbl.rollrate = Rychlost otácení:
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 = <html>Tlak C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Základní C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Trení C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Celkem C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTabchar = Vlastnosti trupu
ComponentAnalysisGeneralTab.dragTabchar.ttip = Drag characteristics
ComponentAnalysisGeneralTab.rollTableModel.Col.component = Komponenta
ComponentAnalysisGeneralTab.rollTableModel.Col.rollforc = Otácecí koefficient
ComponentAnalysisGeneralTab.rollTableModel.Col.rolldamp = Otácecí tlumící coefficient
ComponentAnalysisGeneralTab.rollTableModel.Col.total = <html>Celkem C<sub>l</sub>
ComponentAnalysisGeneralTab.rollTableModel = Otácecí dynamika
ComponentAnalysisGeneralTab.rollTableModel.ttip = Otácecí dynamika
ComponentAnalysisGeneralTab.println.closingmethod = Jméno uzavírací metody:
ComponentAnalysisGeneralTab.println.settingnam = Nastavení NAN hodnot
ComponentAnalysisGeneralTab.lbl.reflenght = Doporucená délka:
ComponentAnalysisGeneralTab.lbl.refarea = Doporucená plocha:
!componentanalysisdlg.But.close = Zavrít
componentanalysisdlg.TabStability.Col.Component = Komponenta
ComponentAnalysisGeneralTab.TabStability.Col.Component = Komponenta
! CADomainDataType
CADomainDataType.lbl.winddir = Smer vetru

View File

@ -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 = Stabilität
componentanalysisdlg.TabStability.ttip = Stabilitätsinformationen
componentanalysisdlg.dragTableModel.Col.Component = Komponente
componentanalysisdlg.dragTableModel.Col.Pressure = <html>Druck C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Reibung C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Gesamt C<sub>D</sub>
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 = <html>Gesamt C<sub>l</sub>
componentanalysisdlg.rollTableModel = Rolldynamik
componentanalysisdlg.rollTableModel.ttip = Rolldynamik
componentanalysisdlg.println.closingmethod = Closing method called:
componentanalysisdlg.println.settingnam = SETTING NAN VALUES
componentanalysisdlg.lbl.reflenght = Referenzlänge:
componentanalysisdlg.lbl.refarea = Referenzfläche:
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 = Stabilität
ComponentAnalysisGeneralTab.TabStability.ttip = Stabilitätsinformationen
ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Komponente
ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = <html>Druck C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Reibung C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Gesamt C<sub>D</sub>
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 = <html>Gesamt C<sub>l</sub>
ComponentAnalysisGeneralTab.rollTableModel = Rolldynamik
ComponentAnalysisGeneralTab.rollTableModel.ttip = Rolldynamik
ComponentAnalysisGeneralTab.println.closingmethod = Closing method called:
ComponentAnalysisGeneralTab.println.settingnam = SETTING NAN VALUES
ComponentAnalysisGeneralTab.lbl.reflenght = Referenzlänge:
ComponentAnalysisGeneralTab.lbl.refarea = Referenzfläche:
!componentanalysisdlg.But.close =Close
componentanalysisdlg.TabStability.Col.Component = Komponente
ComponentAnalysisGeneralTab.TabStability.Col.Component = Komponente
! CADomainDataType
CADomainDataType.lbl.winddir = Windrichtung

View File

@ -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 = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Component = Componente
componentanalysisdlg.dragTableModel.Col.Pressure = <html>Presi\u00f3n C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Rozamiento C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html><i><font color="gray">Sin advertencias.</font></i>
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 = <html>Total C<sub>l</sub>
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 = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Componente
ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = <html>Presi\u00f3n C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Rozamiento C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html><i><font color="gray">Sin advertencias.</font></i>
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 = <html>Total C<sub>l</sub>
ComponentAnalysisGeneralTab.rollTableModel.ttip = Din\u00e1mica del movimiento de rotaci\u00f3n del cohete (spin)
! CADomainDataType
CADomainDataType.lbl.winddir = Direcci\u00f3n del viento

View File

@ -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 = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Component = Pi\u00E8ce
componentanalysisdlg.dragTableModel.Col.Pressure = <html>Pression C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Friction C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html><i><font color="gray">Pas d'alertes.</font></i>
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 = <html>Total C<sub>l</sub>
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 = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Pi\u00E8ce
ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = <html>Pression C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Friction C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html><i><font color="gray">Pas d'alertes.</font></i>
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 = <html>Total C<sub>l</sub>
ComponentAnalysisGeneralTab.rollTableModel.ttip = Dynamique du roulis
! CADomainDataType
CADomainDataType.lbl.winddir = Direction du vent

View File

@ -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 = <html>Pressione C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Attrito C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Totale C<sub>D</sub>
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 = <html>Totale C<sub>l</sub>
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 = <html>Pressione C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Attrito C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Totale C<sub>D</sub>
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 = <html>Totale C<sub>l</sub>
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

View File

@ -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 = <html>\u5727\u529B C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>\u6469\u64E6 C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html>Total C<sub>l</sub>
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 = <html>\u5727\u529B C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>\u6469\u64E6 C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html>Total C<sub>l</sub>
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 = <html><i><font color
ComponentAnalysisGeneralTab.TabStability.Col.Component = \u90E8\u54C1
ComponentAnalysisGeneralTab.TOTAL = Total
ComponentAnalysisGeneralTab.noWarnings = <html><i><font color
! CADomainDataType
CADomainDataType.lbl.winddir = \u98A8\u5411\u304D\uFF1A

View File

@ -720,43 +720,43 @@ compaddbuttons.askPosition.Addtotheend = Aan het eind toevoegen
compaddbuttons.askPosition.Cancel = Annuleer
! Component Analysis Dialog
componentanalysisdlg.componentanalysis = Onderdeelanalyses
componentanalysisdlg.lbl.winddir = Windrichting:
componentanalysisdlg.TitledBorder.warnings = Waarschuwingen:
componentanalysisdlg.ToggleBut.worst = Ergste
componentanalysisdlg.lbl.angleofattack = Invalshoek:
componentanalysisdlg.lbl.machnumber = Machgetal:
componentanalysisdlg.lbl.rollrate = Rolpercentage:
componentanalysisdlg.lbl.activestages = Actieve trappen:
componentanalysisdlg.lbl.motorconf = Motorconfiguratie:
componentanalysisdlg.TabStability.Col = Onderdeelnaam
componentanalysisdlg.TabStability.Col.EachMass = Massa Instantie
componentanalysisdlg.TabStability.Col.AllMass = Massa Geheel
componentanalysisdlg.TabStability.Col.CG = ZP Locatie Geheel
componentanalysisdlg.TabStability.Col.CP = DP
componentanalysisdlg.TabStability = Stabiliteit
componentanalysisdlg.TabStability.ttip = Stabiliteitsinformatie
componentanalysisdlg.dragTableModel.Col.Component = Onderdeel
componentanalysisdlg.dragTableModel.Col.Pressure = <html>Druk C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Basis C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Wrijving C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Totaal C<sub>D</sub>
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 = <html>Totaal C<sub>l</sub>
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 = <html>Druk C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Basis C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Wrijving C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Totaal C<sub>D</sub>
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 = <html>Totaal C<sub>l</sub>
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 = <html><i><font color=\"gray\">Geen waarschuwingen.</font></i>
ComponentAnalysisGeneralTab.TabStability.Col.Component = Onderdeel
ComponentAnalysisGeneralTab.TOTAL = Totaal
ComponentAnalysisGeneralTab.noWarnings = <html><i><font color=\"gray\">Geen waarschuwingen.</font></i>
! CADomainDataType
CADomainDataType.lbl.winddir = Windrichting

View File

@ -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 = <html>Ci\u015Bnienie C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>Baza C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Tarcie C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Razem C<sub>D</sub>
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 = <html>Razem C<sub>I</sub>
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 = <html>Ci\u015Bnienie C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>Baza C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Tarcie C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Razem C<sub>D</sub>
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 = <html>Razem C<sub>I</sub>
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

View File

@ -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 = <html>Base C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Component = Componente
componentanalysisdlg.dragTableModel.Col.Pressure = <html>Press\u00e3o C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>Atrito C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html><i><font color="gray">Nenhuma advert\u00eancia.</font></i>
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 = <html>Total C<sub>l</sub>
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 = <html>Base C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Component = Componente
ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = <html>Press\u00e3o C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>Atrito C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>Total C<sub>D</sub>
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 = <html><i><font color="gray">Nenhuma advert\u00eancia.</font></i>
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 = <html>Total C<sub>l</sub>
ComponentAnalysisGeneralTab.rollTableModel.ttip = Rota\u00e7\u00e3o din\u00e2mica
! CADomainDataType
CADomainDataType.lbl.winddir = Dire\u00e7\u00e3o do vento

View File

@ -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 = <html>\u0414\u0430\u0432\u043B\u0435\u043D\u0438\u044F C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>\u0411\u0430\u0437\u043E\u0432\u044B\u0439 C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>\u0422\u0440\u0435\u043D\u0438\u044F C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>\u041E\u0431\u0449\u0438\u0439 C<sub>D</sub>
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 = <html>\u041E\u0431\u0449\u0438\u0439 C<sub>l</sub>
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 = <html>\u0414\u0430\u0432\u043B\u0435\u043D\u0438\u044F C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>\u0411\u0430\u0437\u043E\u0432\u044B\u0439 C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>\u0422\u0440\u0435\u043D\u0438\u044F C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>\u041E\u0431\u0449\u0438\u0439 C<sub>D</sub>
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 = <html>\u041E\u0431\u0449\u0438\u0439 C<sub>l</sub>
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 = <html><i><font color=\"gray\">\u0417\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u0439 \u043D\u0435\u0442.</font></i>
ComponentAnalysisGeneralTab.TabStability.Col.Component = \u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442
ComponentAnalysisGeneralTab.TOTAL = \u0412\u0441\u0435\u0433\u043E
ComponentAnalysisGeneralTab.noWarnings = <html><i><font color=\"gray\">\u0417\u0430\u043C\u0435\u0447\u0430\u043D\u0438\u0439 \u043D\u0435\u0442.</font></i>
! CADomainDataType
CADomainDataType.lbl.winddir = \u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0442\u0440\u0430

View File

@ -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 = <html>\u0422\u0438\u0441\u043a C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Base = <html>\u0411\u0430\u0437\u043e\u0432\u0438\u0439 C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>\u0422\u0435\u0440\u0442\u044f C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 C<sub>D</sub>
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 = <html>\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 C<sub>l</sub>
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 = <html>\u0422\u0438\u0441\u043a C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Base = <html>\u0411\u0430\u0437\u043e\u0432\u0438\u0439 C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>\u0422\u0435\u0440\u0442\u044f C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 C<sub>D</sub>
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 = <html>\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 C<sub>l</sub>
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 = <html><i><font color=\"gray\">\u041d\u0435\u043c\u0430\u0454 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u044c.</font></i>
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 = <html><i><font color=\"gray\">\u041d\u0435\u043c\u0430\u0454 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u044c.</font></i>
! CADomainDataType
CADomainDataType.lbl.winddir = \u041d\u0430\u043f\u0440\u044f\u043c \u0432\u0456\u0442\u0440\u0443

View File

@ -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 = <html>\u57FA\u51C6 C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.Component = \u7EC4\u4EF6
componentanalysisdlg.dragTableModel.Col.Pressure = <html>\u538B\u529B C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.friction = <html>\u6469\u64E6 C<sub>D</sub>
componentanalysisdlg.dragTableModel.Col.total = <html>\u603B C<sub>D</sub>
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 = <html><i><font color="gray">\u6CA1\u6709\u8B66\u544A.</font></i>
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 = <html>\u603B C<sub>l</sub>
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 = <html>\u57FA\u51C6 C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.Component = \u7EC4\u4EF6
ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure = <html>\u538B\u529B C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.friction = <html>\u6469\u64E6 C<sub>D</sub>
ComponentAnalysisGeneralTab.dragTableModel.Col.total = <html>\u603B C<sub>D</sub>
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 = <html><i><font color="gray">\u6CA1\u6709\u8B66\u544A.</font></i>
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 = <html>\u603B C<sub>l</sub>
ComponentAnalysisGeneralTab.rollTableModel.ttip = \u6EDA\u8F6C\u52A8\u529B\u5B66
! CADomainDataType
CADomainDataType.lbl.winddir = \u98CE\u5411

View File

@ -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<CADataType>, Groupable<CADataTypeG
private final int hashCode;
//// Stability
public static final CADataType CP_X = new CADataType(trans.get("componentanalysisdlg.TabStability.Col.CP"),
public static final CADataType CP_X = new CADataType(trans.get("ComponentAnalysisGeneralTab.TabStability.Col.CP"),
"CP", UnitGroup.UNITS_LENGTH, CADataTypeGroup.STABILITY, 10);
public static final CADataType CNa = new CADataType("<html>C<sub>N<sub>" + ALPHA + "</sub></sub>",
"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);

View File

@ -24,7 +24,7 @@ public class CAPlotPanel extends PlotPanel<CADataType, CADataBranch, CADataTypeG
private static CAPlotConfiguration DEFAULT_CONFIGURATION =
CAPlotConfiguration.DEFAULT_CONFIGURATIONS[0].resetUnits();
private final ComponentAnalysisPlotExportDialog parent;
private final ComponentAnalysisPlotExportPanel parent;
static {
CUSTOM_CONFIGURATION = new CAPlotConfiguration(CUSTOM);
@ -34,7 +34,7 @@ public class CAPlotPanel extends PlotPanel<CADataType, CADataBranch, CADataTypeG
PRESET_ARRAY[PRESET_ARRAY.length - 1] = CUSTOM_CONFIGURATION;
}
private CAPlotPanel(ComponentAnalysisPlotExportDialog parent,
private CAPlotPanel(ComponentAnalysisPlotExportPanel parent,
CADomainDataType[] typesX, CADataType[] typesY) {
super(typesX, typesY, CUSTOM_CONFIGURATION, PRESET_ARRAY, DEFAULT_CONFIGURATION, null, null);
@ -42,7 +42,7 @@ public class CAPlotPanel extends PlotPanel<CADataType, CADataBranch, CADataTypeG
updatePlots();
}
public static CAPlotPanel create(ComponentAnalysisPlotExportDialog parent, CADataType[] typesY) {
public static CAPlotPanel create(ComponentAnalysisPlotExportPanel parent, CADataType[] typesY) {
CADomainDataType[] typesX = new CADomainDataType[] { parent.getSelectedParameter() };
return new CAPlotPanel(parent, typesX, typesY);
@ -50,7 +50,7 @@ public class CAPlotPanel extends PlotPanel<CADataType, CADataBranch, CADataTypeG
@Override
protected void addXAxisSelector(CADataType[] typesX, Component[] extraWidgetsX) {
// Don't add the X axis selector (this is added in the ComponentAnalysisPlotExportDialog)
// Don't add the X axis selector (this is added in the ComponentAnalysisPlotExportPanel)
}
@Override
@ -87,6 +87,7 @@ public class CAPlotPanel extends PlotPanel<CADataType, CADataBranch, CADataTypeG
public JDialog doPlot(Window parentWindow) {
CADataBranch branch = this.parent.runParameterSweep();
CAPlotConfiguration config = this.getConfiguration();
return CAPlotDialog.create(parent, trans.get("CAPlotPanel.lbl.PlotTitle"), config, Collections.singletonList(branch));
return CAPlotDialog.create(parent.getParentWindow(), trans.get("CAPlotPanel.lbl.PlotTitle"), config,
Collections.singletonList(branch));
}
}

View File

@ -14,7 +14,7 @@ import java.util.List;
public class CAPlotTypeSelector extends PlotTypeSelector<CADataType, CADataTypeGroup> {
private final JComboBox<RocketComponent> componentSelector;
public CAPlotTypeSelector(final ComponentAnalysisPlotExportDialog parent, int plotIndex,
public CAPlotTypeSelector(final ComponentAnalysisPlotExportPanel parent, int plotIndex,
CADataType type, Unit unit, int position, List<CADataType> availableTypes,
List<RocketComponent> componentsForType, CAPlotConfiguration configuration) {
super(plotIndex, type, unit, position, availableTypes, false);

View File

@ -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<Object> warningList;
private final List<LongitudinalStabilityRow> stabData = new ArrayList<>();
private final List<AerodynamicForces> dragData = new ArrayList<>();
private final List<AerodynamicForces> 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("<html>C<sub>N<sub>" + ALPHA + "</sub></sub>") {
@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;
}
},
//// <html>Pressure C<sub>D</sub>
new Column(trans.get("componentanalysisdlg.dragTableModel.Col.Pressure")) {
@Override
public Object getValueAt(int row) {
return dragData.get(row).getPressureCD();
}
},
//// <html>Base C<sub>D</sub>
new Column(trans.get("componentanalysisdlg.dragTableModel.Col.Base")) {
@Override
public Object getValueAt(int row) {
return dragData.get(row).getBaseCD();
}
},
//// <html>Friction C<sub>D</sub>
new Column(trans.get("componentanalysisdlg.dragTableModel.Col.friction")) {
@Override
public Object getValueAt(int row) {
return dragData.get(row).getFrictionCD();
}
},
//// <html>Total C<sub>D</sub>
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();
}
},
//// <html>Total C<sub>l</sub>
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<Integer, CMAnalysisEntry> cmMap= MassCalculator.getCMAnalysis(configuration);
Map<RocketComponent, AerodynamicForces> 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();
}
}

View File

@ -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<Object> warningList;
private final List<LongitudinalStabilityRow> stabData = new ArrayList<>();
private final List<AerodynamicForces> dragData = new ArrayList<>();
private final List<AerodynamicForces> 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("<html>C<sub>N<sub>" + ALPHA + "</sub></sub>") {
@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;
}
},
//// <html>Pressure C<sub>D</sub>
new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Pressure")) {
@Override
public Object getValueAt(int row) {
return dragData.get(row).getPressureCD();
}
},
//// <html>Base C<sub>D</sub>
new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.Base")) {
@Override
public Object getValueAt(int row) {
return dragData.get(row).getBaseCD();
}
},
//// <html>Friction C<sub>D</sub>
new Column(trans.get("ComponentAnalysisGeneralTab.dragTableModel.Col.friction")) {
@Override
public Object getValueAt(int row) {
return dragData.get(row).getFrictionCD();
}
},
//// <html>Total C<sub>D</sub>
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();
}
},
//// <html>Total C<sub>l</sub>
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<Integer, CMAnalysisEntry> cmMap= MassCalculator.getCMAnalysis(configuration);
Map<RocketComponent, AerodynamicForces> 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;
}
}
}

View File

@ -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<CADomainDataType> parameterSelector;
private JButton okButton;
@ -56,12 +56,11 @@ public class ComponentAnalysisPlotExportDialog extends JDialog {
private final Map<CADataType, List<RocketComponent>> 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();