00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 from ost import gui
00022 from ost import gfx
00023 from PyQt4 import QtCore, QtGui
00024 from render_mode_widget import RenderModeWidget
00025
00026
00027 class HSCWidget(RenderModeWidget):
00028 def __init__(self, parent=None):
00029 RenderModeWidget.__init__(self, parent)
00030
00031
00032 self.text_ = "Helix & Strand Cartoon"
00033
00034
00035 self.mode_ = gfx.RenderMode.HSC
00036
00037
00038 min_spline_detail = 1
00039 max_spline_detail = 20
00040
00041 min_arc_detail = 1
00042 max_arc_detail = 20
00043
00044 min_width = 0.1
00045 max_width = 2.5
00046 max_tube_width= 2.0
00047
00048 min_tube_ratio = 0.2
00049 max_tube_ratio = 4
00050 min_ratio = 0.1
00051 max_ratio = 2.5
00052
00053 min_ecc = 0.1
00054 max_ecc = 5
00055
00056 min_profile=0
00057 max_profile=4
00058
00059
00060
00061
00062 poly_mode_label = QtGui.QLabel("Poly Mode")
00063
00064 self.poly_mode_cb_ = QtGui.QComboBox()
00065 self.poly_mode_cb_.addItem("Points")
00066 self.poly_mode_cb_.addItem("Wireframe")
00067 self.poly_mode_cb_.addItem("Surface")
00068
00069
00070 spline_label = QtGui.QLabel("Spline Detail")
00071
00072 self.spline_spinbox_ = QtGui.QSpinBox()
00073 self.spline_spinbox_.setRange(min_spline_detail, max_spline_detail)
00074
00075
00076 arc_label = QtGui.QLabel("Arc Detail")
00077
00078 self.arc_spinbox_ = QtGui.QSpinBox()
00079 self.arc_spinbox_.setRange(min_arc_detail, max_arc_detail)
00080
00081
00082 tube_label = QtGui.QLabel("Tube")
00083 font = tube_label.font()
00084 font.setBold(True)
00085
00086
00087 radius_tube_label = QtGui.QLabel("Radius")
00088
00089 self.width_tube_spinbox_ = QtGui.QDoubleSpinBox()
00090 self.width_tube_spinbox_.setRange(min_width, max_tube_width)
00091 self.width_tube_spinbox_.setDecimals(1)
00092 self.width_tube_spinbox_.setSingleStep(0.1)
00093
00094 self.width_tube_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00095 self.width_tube_slider_.setRange(min_width*10.0, max_tube_width*10.0)
00096 self.width_tube_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00097 self.width_tube_slider_.setTickInterval(1)
00098
00099
00100 ratio_tube_label = QtGui.QLabel("Ratio")
00101
00102 self.thickness_tube_spinbox_ = QtGui.QDoubleSpinBox()
00103 self.thickness_tube_spinbox_.setRange(min_tube_ratio, max_tube_ratio)
00104 self.thickness_tube_spinbox_.setDecimals(1)
00105 self.thickness_tube_spinbox_.setSingleStep(0.1)
00106
00107 self.thickness_tube_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00108 self.thickness_tube_slider_.setRange(min_tube_ratio*10.0, max_tube_ratio*10)
00109 self.thickness_tube_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00110 self.thickness_tube_slider_.setTickInterval(1)
00111
00112
00113 tube_profile_label = QtGui.QLabel("Tube Profile Type")
00114 self.tube_profile_spinbox_ = QtGui.QSpinBox()
00115 self.tube_profile_spinbox_.setRange(min_profile, max_profile)
00116
00117
00118 helix_label = QtGui.QLabel("Helix")
00119 font = helix_label.font()
00120 font.setBold(True)
00121
00122
00123 radius_helix_label = QtGui.QLabel("Width")
00124
00125 self.width_helix_spinbox_ = QtGui.QDoubleSpinBox()
00126 self.width_helix_spinbox_.setRange(min_width, max_width)
00127 self.width_helix_spinbox_.setDecimals(1)
00128 self.width_helix_spinbox_.setSingleStep(0.1)
00129
00130 self.width_helix_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00131 self.width_helix_slider_.setRange(min_width*10.0, max_width*10.0)
00132 self.width_helix_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00133 self.width_helix_slider_.setTickInterval(1)
00134
00135
00136
00137 ratio_helix_label = QtGui.QLabel("Thickness")
00138
00139 self.thickness_helix_spinbox_ = QtGui.QDoubleSpinBox()
00140 self.thickness_helix_spinbox_.setRange(min_ratio,max_ratio)
00141 self.thickness_helix_spinbox_.setDecimals(1)
00142 self.thickness_helix_spinbox_.setSingleStep(0.1)
00143
00144 self.thickness_helix_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00145 self.thickness_helix_slider_.setRange(min_ratio*10.0,max_ratio*10.0)
00146 self.thickness_helix_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00147 self.thickness_helix_slider_.setTickInterval(1)
00148
00149
00150
00151 ecc_helix_label = QtGui.QLabel("ECC")
00152
00153 self.ecc_helix_spinbox_ = QtGui.QDoubleSpinBox()
00154 self.ecc_helix_spinbox_.setRange(min_ecc,max_ecc)
00155 self.ecc_helix_spinbox_.setDecimals(1)
00156 self.ecc_helix_spinbox_.setSingleStep(0.1)
00157
00158 self.ecc_helix_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00159 self.ecc_helix_slider_.setRange(min_ecc*10,max_ecc*10)
00160 self.ecc_helix_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00161 self.ecc_helix_slider_.setTickInterval(1)
00162
00163
00164 helix_profile_label = QtGui.QLabel("Helix Profile Type")
00165 self.helix_profile_spinbox_ = QtGui.QSpinBox()
00166 self.helix_profile_spinbox_.setRange(min_profile, max_profile)
00167
00168
00169 strand_label = QtGui.QLabel("Strand")
00170 font = strand_label.font()
00171 font.setBold(1)
00172
00173
00174 radius_strand_label = QtGui.QLabel("Width")
00175
00176 self.width_strand_spinbox_ = QtGui.QDoubleSpinBox()
00177 self.width_strand_spinbox_.setRange(min_width, max_width)
00178 self.width_strand_spinbox_.setDecimals(1)
00179 self.width_strand_spinbox_.setSingleStep(0.1)
00180
00181 self.width_strand_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00182 self.width_strand_slider_.setRange(min_width*10, max_width*10)
00183 self.width_strand_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00184 self.width_strand_slider_.setTickInterval(1)
00185
00186
00187
00188 ratio_strand_label = QtGui.QLabel("Thickness")
00189
00190 self.thickness_strand_spinbox_ = QtGui.QDoubleSpinBox()
00191 self.thickness_strand_spinbox_.setRange(min_ratio,max_ratio)
00192 self.thickness_strand_spinbox_.setDecimals(1)
00193 self.thickness_strand_spinbox_.setSingleStep(0.1)
00194
00195 self.thickness_strand_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00196 self.thickness_strand_slider_.setRange(min_ratio*10,max_ratio*10)
00197 self.thickness_strand_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00198 self.thickness_strand_slider_.setTickInterval(1)
00199
00200
00201
00202 ecc_strand_label = QtGui.QLabel("ECC")
00203
00204 self.ecc_strand_spinbox_ = QtGui.QDoubleSpinBox()
00205 self.ecc_strand_spinbox_.setRange(min_ecc,max_ecc)
00206 self.ecc_strand_spinbox_.setDecimals(1)
00207 self.ecc_strand_spinbox_.setSingleStep(0.1)
00208
00209 self.ecc_strand_slider_ = QtGui.QSlider(QtCore.Qt.Horizontal, self)
00210 self.ecc_strand_slider_.setRange(min_ecc*10,max_ecc*10)
00211 self.ecc_strand_slider_.setTickPosition(QtGui.QSlider.NoTicks)
00212 self.ecc_strand_slider_.setTickInterval(1)
00213
00214
00215 strand_profile_label = QtGui.QLabel("Strand Profile Type")
00216 self.strand_profile_spinbox_ = QtGui.QSpinBox()
00217 self.strand_profile_spinbox_.setRange(min_profile, max_profile)
00218
00219 row=1
00220 grid = QtGui.QGridLayout()
00221 grid.addWidget(poly_mode_label,row,0,1,1)
00222 grid.addWidget(self.poly_mode_cb_,row,3,1,2)
00223 row+=1
00224 grid.addWidget(spline_label, row, 0, 1, 3)
00225 grid.addWidget(self.spline_spinbox_, row, 4, 1, 1)
00226 row+=1
00227 grid.addWidget(arc_label,row,0,1,3)
00228 grid.addWidget(self.arc_spinbox_,row,4,1,1)
00229 row+=1
00230 grid.addWidget(tube_label, row, 0, 1, 3)
00231 row+=1
00232 grid.addWidget(radius_tube_label, row, 0, 1, 1)
00233 grid.addWidget(self.width_tube_slider_, row, 1, 1, 3)
00234 grid.addWidget(self.width_tube_spinbox_, row, 4, 1, 1)
00235 row+=1
00236 grid.addWidget(ratio_tube_label, row, 0, 1, 1)
00237 grid.addWidget(self.thickness_tube_slider_, row, 1, 1, 3)
00238 grid.addWidget(self.thickness_tube_spinbox_, row, 4, 1, 1)
00239 row+=1
00240 grid.addWidget(tube_profile_label, row, 0, 1, 3)
00241 grid.addWidget(self.tube_profile_spinbox_, row, 4, 1, 1)
00242 row+=1
00243 grid.addWidget(helix_label, row, 0, 1, 3)
00244 row+=1
00245 grid.addWidget(radius_helix_label, row, 0, 1, 1)
00246 grid.addWidget(self.width_helix_slider_, row, 1, 1, 3)
00247 grid.addWidget(self.width_helix_spinbox_, row, 4, 1, 1)
00248 row+=1
00249 grid.addWidget(ratio_helix_label, row, 0, 1, 1)
00250 grid.addWidget(self.thickness_helix_slider_, row, 1, 1, 3)
00251 grid.addWidget(self.thickness_helix_spinbox_, row, 4, 1, 1)
00252 row+=1
00253 grid.addWidget(ecc_helix_label, row, 0, 1, 1)
00254 grid.addWidget(self.ecc_helix_slider_, row, 1, 1, 3)
00255 grid.addWidget(self.ecc_helix_spinbox_, row, 4, 1, 1)
00256 row+=1
00257 grid.addWidget(helix_profile_label, row, 0, 1, 3)
00258 grid.addWidget(self.helix_profile_spinbox_, row, 4, 1, 1)
00259 row+=1
00260 grid.addWidget(strand_label, row, 0, 1, 3)
00261 row+=1
00262 grid.addWidget(radius_strand_label, row, 0, 1, 1)
00263 grid.addWidget(self.width_strand_slider_, row, 1, 1, 3)
00264 grid.addWidget(self.width_strand_spinbox_, row, 4, 1, 1)
00265 row+=1
00266 grid.addWidget(ratio_strand_label, row, 0, 1, 1)
00267 grid.addWidget(self.thickness_strand_slider_, row, 1, 1, 3)
00268 grid.addWidget(self.thickness_strand_spinbox_, row, 4, 1, 1)
00269 row+=1
00270 grid.addWidget(ecc_strand_label, row, 0, 1, 1)
00271 grid.addWidget(self.ecc_strand_slider_, row, 1, 1, 3)
00272 grid.addWidget(self.ecc_strand_spinbox_, row, 4, 1, 1)
00273 row+=1
00274 grid.addWidget(strand_profile_label, row, 0, 1, 3)
00275 grid.addWidget(self.strand_profile_spinbox_, row, 4, 1, 1)
00276
00277 grid.setRowStretch(row+1,1)
00278 self.setLayout(grid)
00279
00280 QtCore.QObject.connect(self.spline_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSplineDetail)
00281 QtCore.QObject.connect(self.arc_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateArcDetail)
00282 QtCore.QObject.connect(self.poly_mode_cb_, QtCore.SIGNAL("currentIndexChanged(int)"), self.UpdatePolyMode)
00283
00284 QtCore.QObject.connect(self.width_tube_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateTubeRadius)
00285 QtCore.QObject.connect(self.width_tube_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderTubeRadius)
00286 QtCore.QObject.connect(self.thickness_tube_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateTubeRatio)
00287 QtCore.QObject.connect(self.thickness_tube_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderTubeRatio)
00288 QtCore.QObject.connect(self.tube_profile_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateTubeProfileType)
00289
00290 QtCore.QObject.connect(self.width_helix_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateHelixWidth)
00291 QtCore.QObject.connect(self.width_helix_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderHelixWidth)
00292 QtCore.QObject.connect(self.thickness_helix_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateHelixThickness)
00293 QtCore.QObject.connect(self.thickness_helix_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderHelixThickness)
00294 QtCore.QObject.connect(self.ecc_helix_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateHelixEcc)
00295 QtCore.QObject.connect(self.ecc_helix_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderHelixEcc)
00296 QtCore.QObject.connect(self.helix_profile_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateHelixProfileType)
00297
00298 QtCore.QObject.connect(self.width_strand_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateStrandWidth)
00299 QtCore.QObject.connect(self.width_strand_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderStrandWidth)
00300 QtCore.QObject.connect(self.thickness_strand_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateStrandThickness)
00301 QtCore.QObject.connect(self.thickness_strand_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderStrandThickness)
00302 QtCore.QObject.connect(self.ecc_strand_spinbox_, QtCore.SIGNAL("valueChanged(double)"), self.UpdateStrandEcc)
00303 QtCore.QObject.connect(self.ecc_strand_slider_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateSliderStrandEcc)
00304 QtCore.QObject.connect(self.strand_profile_spinbox_, QtCore.SIGNAL("valueChanged(int)"), self.UpdateStrandProfileType)
00305
00306 self.setMinimumSize(250,420)
00307
00308
00309 def UpdateGui(self,options):
00310 self.poly_mode_cb_.setCurrentIndex(options.GetPolyMode())
00311 self.spline_spinbox_.setValue(options.GetSplineDetail())
00312 self.arc_spinbox_.setValue(options.GetArcDetail())
00313
00314 self.UpdateTubeRadiusGui(options.GetTubeRadius())
00315 self.UpdateTubeRatioGui(options.GetTubeRatio())
00316 self.tube_profile_spinbox_.setValue(options.GetTubeProfileType())
00317 self.UpdateHelixWidthGui(options.GetHelixWidth())
00318 self.UpdateHelixThicknessGui(options.GetHelixThickness())
00319 self.UpdateHelixEccGui(options.GetHelixEcc())
00320 self.helix_profile_spinbox_.setValue(options.GetHelixProfileType())
00321 self.UpdateStrandWidthGui(options.GetStrandWidth())
00322 self.UpdateStrandThicknessGui(options.GetStrandThickness())
00323 self.UpdateStrandEccGui(options.GetStrandEcc())
00324 self.strand_profile_spinbox_.setValue(options.GetStrandProfileType())
00325
00326 def UpdatePolyMode(self, value):
00327 self.GetOptions().SetPolyMode(value)
00328
00329 def UpdateSplineDetail(self, value):
00330 self.GetOptions().SetSplineDetail(value)
00331
00332 def UpdateArcDetail(self, value):
00333 self.GetOptions().SetArcDetail(value)
00334
00335 def UpdateTubeRadius(self, value):
00336 self.GetOptions().SetTubeRadius(value)
00337
00338 def UpdateSliderTubeRadius(self, value):
00339 self.GetOptions().SetTubeRadius(value/10.0)
00340
00341 def UpdateTubeRatio(self, value):
00342 self.GetOptions().SetTubeRatio(value)
00343
00344 def UpdateSliderTubeRatio(self, value):
00345 self.GetOptions().SetTubeRatio(value/10.0)
00346
00347 def UpdateTubeProfileType(self, value):
00348 self.GetOptions().SetTubeProfileType(value)
00349
00350 def UpdateHelixWidth(self, value):
00351 self.GetOptions().SetHelixWidth(value)
00352
00353 def UpdateSliderHelixWidth(self, value):
00354 self.GetOptions().SetHelixWidth(value/10.0)
00355
00356 def UpdateHelixThickness(self, value):
00357 self.GetOptions().SetHelixThickness(value)
00358
00359 def UpdateSliderHelixThickness(self, value):
00360 self.GetOptions().SetHelixThickness(value/10.0)
00361
00362 def UpdateHelixEcc(self, value):
00363 self.GetOptions().SetHelixEcc(value)
00364
00365 def UpdateHelixProfileType(self, value):
00366 self.GetOptions().SetHelixProfileType(value)
00367
00368 def UpdateSliderHelixEcc(self, value):
00369 self.GetOptions().SetHelixEcc(value/10.0)
00370
00371 def UpdateStrandWidth(self, value):
00372 self.GetOptions().SetStrandWidth(value)
00373
00374 def UpdateSliderStrandWidth(self, value):
00375 self.GetOptions().SetStrandWidth(value/10.0)
00376
00377 def UpdateStrandThickness(self, value):
00378 self.GetOptions().SetStrandThickness(value)
00379
00380 def UpdateSliderStrandThickness(self, value):
00381 self.GetOptions().SetStrandThickness(value/10.0)
00382
00383 def UpdateStrandEcc(self, value):
00384 self.GetOptions().SetStrandEcc(value)
00385
00386 def UpdateSliderStrandEcc(self, value):
00387 self.GetOptions().SetStrandEcc(value/10.0)
00388
00389 def UpdateStrandProfileType(self, value):
00390 self.GetOptions().SetStrandProfileType(value)
00391
00392 def UpdateTubeRadiusGui(self,value):
00393 if(abs(value*10.0 - self.width_tube_slider_.value())>=self.width_tube_spinbox_.singleStep()):
00394 self.width_tube_slider_.setValue(value*10.0)
00395 self.width_tube_spinbox_.setValue(value)
00396
00397 def UpdateTubeRatioGui(self,value):
00398 if(abs(value*10.0 - self.thickness_tube_slider_.value())>=self.thickness_tube_spinbox_.singleStep()):
00399 self.thickness_tube_slider_.setValue(value*10.0)
00400 self.thickness_tube_spinbox_.setValue(value)
00401
00402 def UpdateHelixWidthGui(self, value):
00403 if(abs(value*10.0 - self.width_helix_slider_.value())>=self.width_helix_spinbox_.singleStep()):
00404 self.width_helix_slider_.setValue(value*10.0)
00405 self.width_helix_spinbox_.setValue(value)
00406
00407 def UpdateHelixThicknessGui(self, value):
00408 if(abs(value*10.0 - self.thickness_helix_slider_.value())>=self.thickness_helix_spinbox_.singleStep()):
00409 self.thickness_helix_slider_.setValue(value*10.0)
00410 self.thickness_helix_spinbox_.setValue(value)
00411
00412 def UpdateHelixEccGui(self, value):
00413 if(abs(value*10.0 - self.ecc_helix_slider_.value())>=self.ecc_helix_spinbox_.singleStep()):
00414 self.ecc_helix_slider_.setValue(value*10.0)
00415 self.ecc_helix_spinbox_.setValue(value)
00416
00417 def UpdateStrandWidthGui(self, value):
00418 if(abs(value*10.0 - self.width_strand_slider_.value())>=self.width_strand_spinbox_.singleStep()):
00419 self.width_strand_slider_.setValue(value*10.0)
00420 self.width_strand_spinbox_.setValue(value)
00421
00422 def UpdateStrandThicknessGui(self, value):
00423 if(abs(value*10.0 - self.thickness_strand_slider_.value())>=self.thickness_strand_spinbox_.singleStep()):
00424 self.thickness_strand_slider_.setValue(value*10.0)
00425 self.thickness_strand_spinbox_.setValue(value)
00426
00427 def UpdateStrandEccGui(self, value):
00428 if(abs(value*10.0 - self.ecc_strand_slider_.value())>=self.ecc_strand_spinbox_.singleStep()):
00429 self.ecc_strand_slider_.setValue(value*10.0)
00430 self.ecc_strand_spinbox_.setValue(value)
00431
00432 def GetText(self):
00433 return self.text_
00434
00435 def GetRenderMode(self):
00436 return self.mode_