#=============================================== # TkWIEN2k #=============================================== package TkWIEN2k; use Crystal::WIEN2k; use MyTk::TkCommon; @ISA = qw(WIEN2k TkCommon); #公開したいサブルーチン #@EXPORT = qw(DelSpace Reduce01 MakePath RegExpQuote); use strict; use Utils; BEGIN { } sub new { my ($module, $app, $canvas) = @_; my $this = {}; bless $this; $this->SetApplication($app); $this->SetCanvas($canvas); return $this; } sub DESTROY { my $this = shift; $this->SUPER::DESTROY(@_); } sub SetCanvas { my($this,$can)=@_; return $this->{'Canvas'} = $can; } sub Canvas { return shift->{'Canvas'}; } sub GetGraphFrameArray { return shift->{'GraphFrameArray'}; } sub CreateGraphFrame { my ($this, $canvas) = @_; $this->SetCanvas($canvas) if($canvas); $canvas = $this->Canvas() unless($canvas); my $App = $this->App(); my $font = $App->{'GraphFrameFont'}; my @font = split(/,/, $font) if($font); my $w = $canvas->width(); my $h = $canvas->height(); # Canvas, GraphFrameの初期化 my $GraphFrameArray = $this->{'GraphFrameArray'} = new GraphFrameArray($this->mw(), $canvas); $GraphFrameArray->SetFont(\@font) if($font); $GraphFrameArray->SetCanvasSize($w, $h); $GraphFrameArray->AddGraphFrame(); my $GraphFrame0 = $GraphFrameArray->GetGraphFrame(0); my $FramePosStr0 = $App->{"GraphFrame0Position"}; my $XScale0 = $GraphFrame0->GetXScale(0); my $YScale0 = $GraphFrame0->GetYScale(0); $GraphFrame0->SetPositionByStr($FramePosStr0); my $EnergyUnit = $this->{'EnergyUnit'}; $GraphFrame0->SetXCaption("Energy / $EnergyUnit"); $GraphFrame0->SetYCaption('PDOS'); $GraphFrame0->SetViewRange(0, 0, 1, 1); my $FileType = $this->FileType(); if($FileType eq "WIEN2k PDOS files") { } } sub AssignGraphData { my ($this) = @_; my $GraphFrameArray = $this->GetGraphFrameArray(); my $GraphFrame0 = $GraphFrameArray->GetGraphFrame(0); my $pDataArray = $this->DataArray(); my $Data = $pDataArray->GetGraphData(0); my $nData = $Data->nData(); my $title = $Data->Title(); my $pX0 = $Data->GetDataArray('x0'); for(my $i = 0 ; ; $i++) { my $pY = $Data->GetDataArray("y$i"); last unless($pY); my $nData = $GraphFrame0->AddGraphData($pX0, $pY, 1, "auto", "", 6, "red", 0, "red", "XAutoSkip"); my $data = $GraphFrame0->GetPlotData($nData-1); $data->SetXName("Energy"); $data->SetYName($Data->{"y${i}_Name"}); } $GraphFrame0->CalMinMax(); $GraphFrame0->AdjustViewRange(0.05, 0.05, 0.05, 0.05); $this->AdjustViewRange(); } sub AdjustViewRange { my ($this) = @_; my $GraphFrameArray = $this->GetGraphFrameArray(); my $pGraphFrame = $GraphFrameArray->GetpGraphFrameArray(); my ($xmin, $xmax) = $pGraphFrame->[0]->GetViewXRange(); } sub Draw { my ($this, $canvas) = @_; my $mw = $this->mw(); my $GraphFrameArray = $this->GetGraphFrameArray(); my $pGraphFrame = $GraphFrameArray->GetpGraphFrameArray(); my @GraphFrame = @$pGraphFrame; $canvas = $this->Canvas() unless($canvas); my $App = $this->App(); my $font = $App->{'GraphFrameFont'}; my @font = split(/,/, $font) if($font); my $w = $canvas->width(); my $h = $canvas->height(); $canvas->SetFont(\@font) if($font); $GraphFrameArray->SetCanvasSize($w, $h); $GraphFrameArray->Draw($canvas); } 1;