Refactor ComponentAnalysisPlotExportDialog to a tabbed pane in ComponentAnalysisDialog
This commit is contained in:
parent
cb7b6ae8d0
commit
88f7c7e18d
@ -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
|
||||
|
@ -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 = إتجاه الريح
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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();
|
Loading…
x
Reference in New Issue
Block a user