Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
SlipSystemTab.cpp
Go to the documentation of this file.
1/* This file is part of MODEL, the Mechanics Of Defect Evolution Library.
2 *
3 * Copyright (C) 2011 by Giacomo Po <gpo@ucla.edu>.
4 *
5 * model is distributed without any warranty under the
6 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
7 */
8
9#ifndef model_SlipSystemTab_cpp_
10#define model_SlipSystemTab_cpp_
11
12#include <QColorDialog>
13#include <QPalette>
14#include <QColor>
15
16#include <vtkLookupTable.h>
17
18#include <SlipSystemTab.h>
19#include <Vector2Color.h>
20
21#include <DDqtControls.h>
22
23namespace model
24{
25
26 SlipSystemButton::SlipSystemButton(const int& gID_in, const int& sID_in,const QString &text, QWidget *parent = nullptr):
27 /* init */ QPushButton(text,parent)
28 /* init */,gID(gID_in)
29 /* init */,sID(sID_in)
30 {
31
32 }
33
38
39Eigen::Matrix<int,3,1> SlipSystemButton::rgb() const
40{
41 QColor backgroundColor(qColor());
42 return (Eigen::Matrix<int,3,1>()<<backgroundColor.red(), backgroundColor.green(), backgroundColor.blue()).finished();
43}
44
46{
47 return this->palette().color(QPalette::Window);
48}
49
50
51
52
54/* init */ numCols(4)
55/* init */,mainLayout(new QGridLayout(this))
56 {
57
58 auto *presetsBox =
59 controls::box("Palette presets", this, "Assign colors to all slip systems using a shared rule.");
60 auto *colorsBox = controls::box("Slip-system colors", this,
61 "Choose an individual color for each grain and slip-system ID.");
62 mainLayout->addWidget(presetsBox, 0, 0);
63 mainLayout->addWidget(colorsBox, 1, 0);
64 mainLayout->setRowStretch(2, 1);
65 QPushButton* burgersButton(new QPushButton("slipSystem Burgers"));
66 connect( burgersButton, SIGNAL(clicked()), this, SLOT(setBurgersColor()) );
67 controls::grid(presetsBox)->addWidget(burgersButton, 0, 0, 1, numCols);
68 burgersButton->setToolTip("Color all slip systems by their Burgers-vector direction.");
69
70 QPushButton* normalButton(new QPushButton("slipSystem normal"));
71 connect( normalButton, SIGNAL(clicked()), this, SLOT(setNormalColor()) );
72 controls::grid(presetsBox)->addWidget(normalButton, 1, 0, 1, numCols);
73 normalButton->setToolTip("Color all slip systems by their plane-normal direction.");
74
75 QPushButton* familyButton(new QPushButton("slipSystem family"));
76 connect( familyButton, SIGNAL(clicked()), this, SLOT(setFamilyColor()) );
77 controls::grid(presetsBox)->addWidget(familyButton, 2, 0, 1, numCols);
78 familyButton->setToolTip("Assign one color to each slip-system family.");
79
80 size_t ssCount(0);
81 for(const auto& grain : defectiveCrystal.ddBase.poly.grains)
82 {
83 for(const auto& slipSystem : grain.second->slipSystems())
84 {
85// const std::pair<int,int> key(std::make_pair(grain.first,slipSystem.second->sID));
86
87const int i = ssCount / numCols;
88const int j = ssCount % numCols;
89
91 grain.first, slipSystem.second->sID,
92 QString::fromStdString("g" + std::to_string(grain.first) + ",s" + std::to_string(slipSystem.second->sID))));
93connect(ssb, SIGNAL(clicked()), this, SLOT(changeColor()));
94slipSystemColorMap.emplace(slipSystem.second.get(), ssb);
95controls::grid(colorsBox)->addWidget(ssb, i, j, 1, 1);
96ssb->setToolTip(
97 QString("Choose the color for grain %1, slip system %2. Actors using Slip system coloring inherit this palette.")
98 .arg(grain.first)
99 .arg(slipSystem.second->sID));
100ssCount++;
101 }
102 }
103 this->setLayout(mainLayout);
104 }
105
106void SlipSystemTab::changeColor()
107{
108 SlipSystemButton* clickedButton(qobject_cast<SlipSystemButton*>(sender()));
109 if(clickedButton)
110 {
111 QColor newColor = QColorDialog::getColor(clickedButton->qColor());
112 if(!newColor.isValid())
113 {
114 return;
115 }
116 clickedButton->setStyleSheet(QString::fromStdString("background-color: rgb("+std::to_string(newColor.red())+","
117 /* */+std::to_string(newColor.green())+","
118 /* */+std::to_string(newColor.blue())+");"));
119
120 }
121
122// std::cout<< key.first<<" "<< key.second<<std::endl;
123// if ( newColor != color )
124// {
125// setColor( newColor );
126// }
127 emit colorsChanged();
128}
129
130void SlipSystemTab::setBurgersColor()
131{
132 for(auto& pair : slipSystemColorMap)
133 {
134 //const auto clr(Vector2Color::v2c(pair.first->unitSlip));
135 const auto clr(Vector2Color::v2c(pair.first->s.dir.base().cast<double>()));
136 pair.second->setStyleSheet(QString::fromStdString("background-color: rgb("+std::to_string(clr(0))+","
137 /* */+std::to_string(clr(1))+","
138 /* */+std::to_string(clr(2))+");"));
139
140 }
141 emit colorsChanged();
142}
143
144void SlipSystemTab::setNormalColor()
145{
146 for(auto& pair : slipSystemColorMap)
147 {
148// const auto clr(Vector2Color::v2c(pair.first->unitNormal));
149 const auto clr(Vector2Color::v2c(pair.first->n.base().cast<double>()));
150 pair.second->setStyleSheet(QString::fromStdString("background-color: rgb("+std::to_string(clr(0))+","
151 /* */+std::to_string(clr(1))+","
152 /* */+std::to_string(clr(2))+");"));
153
154 }
155 emit colorsChanged();
156}
157
158void SlipSystemTab::setFamilyColor()
159{
160
161 std::map<std::pair<float,float>,std::set<const SlipSystem*>> ssFamilyMap;
162
163 for(auto& pair : slipSystemColorMap)
164 {
165 const std::pair<float,float> key(pair.first->s.cartesian().squaredNorm(),pair.first->n.cartesian().squaredNorm());
166 ssFamilyMap[key].insert(pair.first);
167 }
168
169 vtkSmartPointer<vtkLookupTable> familyLut(vtkSmartPointer<vtkLookupTable>::New());
170// familyLut->SetHueRange(0.66667, 0.0);
171 familyLut->SetTableRange(0, ssFamilyMap.size());
172 familyLut->Build();
173
174 int fID(0);
175 for(const auto& pair : ssFamilyMap)
176 {
177 for(const auto& ss : pair.second)
178 {
179 const auto ssIter(slipSystemColorMap.find(ss));
180 if(ssIter!=slipSystemColorMap.end())
181 {
182 double dclr[3];
183 familyLut->GetColor(fID, dclr);
184 ssIter->second->setStyleSheet(QString::fromStdString("background-color: rgb("+std::to_string(int(dclr[0]*255))+","
185 /* */+std::to_string(int(dclr[1]*255))+","
186 /* */+std::to_string(int(dclr[2]*255))+");"));
187 }
188 }
189 fID++;
190 }
191 emit colorsChanged();
192}
193
194
195} // namespace model
196#endif
197
198
199
200
201
202
203
SlipSystemButton(const int &gID_in, const int &sID_in, const QString &text, QWidget *parent)
Eigen::Matrix< int, 3, 1 > rgb() const
QGridLayout * grid(QGroupBox *group)
QGroupBox * box(const QString &title, QWidget *parent, const QString &description, QCheckBox *toggle=nullptr)
QGridLayout * mainLayout
SlipSystemTab(const DefectiveCrystal< 3 > &)
SlipSystemColorMapType slipSystemColorMap
static Eigen::Matrix< int, 3, 1 > v2c(Eigen::Matrix< double, 3, 1 > clrVector)
std::string text(Config &config)
int j
int parent
newsubseg ss[0]
int i
newbad key