1
package workcraft.cpog;
3
import java.awt.event.KeyEvent;
4
import java.awt.event.MouseEvent;
5
import java.util.HashMap;
6
import java.util.LinkedList;
10
import javax.media.opengl.GL;
12
import org.w3c.dom.Document;
13
import org.w3c.dom.Element;
14
import org.w3c.dom.NodeList;
16
import workcraft.DuplicateIdException;
17
import workcraft.Model;
18
import workcraft.UnsupportedComponentException;
19
import workcraft.common.DefaultConnection;
20
import workcraft.common.LabelledConnection;
21
import workcraft.editor.BasicEditable;
22
import workcraft.editor.EditableConnection;
23
import workcraft.logic.DNF;
24
import workcraft.logic.InvalidExpressionException;
25
import workcraft.util.Colorf;
26
import workcraft.util.Mat4x4;
27
import workcraft.util.Vec2;
28
import workcraft.visual.JOGLPainter;
29
import workcraft.visual.Painter;
30
import workcraft.visual.ShapeMode;
31
import workcraft.visual.TextAlign;
32
import workcraft.visual.VertexBuffer;
33
import workcraft.visual.GeometryUtil;
34
import workcraft.visual.VertexFormat;
35
import workcraft.visual.PrimitiveType;
36
import workcraft.visual.VertexFormatException;
38
public class Vertex extends BasicEditable {
39
public static final UUID _modeluuid = UUID.fromString("25787b48-9c3d-11dc-8314-0800200c9a66");
40
public static final String _displayname = "Vertex";
41
public static final String _hotkey = " v ";
42
public static final int _hotkeyvk = KeyEvent.VK_V;
44
private static Colorf vertexColor = new Colorf(1.0f, 1.0f, 1.0f, 1.0f);
45
private static Colorf selectedVertexColor = new Colorf(1.0f, 0.9f, 0.9f, 1.0f);
46
private static Colorf enabledVertexColor = new Colorf(0.8f, 0.8f, 1.0f, 1.0f);
47
private static Colorf vertexOutlineColor = new Colorf(0.0f, 0.0f, 0.0f, 1.0f);
48
private static Colorf passiveVertexOutlineColor = new Colorf(0.6f, 0.6f, 0.6f, 1.0f);
49
private static Colorf selectedVertexOutlineColor = new Colorf(0.5f, 0.0f, 0.0f, 1.0f);
50
private static Colorf userVertexOutlineColor = new Colorf(0.0f, 0.6f, 0.0f, 1.0f);
51
private static Colorf vertexFiredColor = new Colorf(0.3f, 0.3f, 0.5f, 1.0f);
53
private Condition condition;
55
boolean fired = false;
57
public boolean canFire = false;
58
public boolean canWork = false;
60
private LinkedList<Vertex> out;
61
private LinkedList<Vertex> in;
62
private LinkedList<ControlVariable> vars;
64
private String rho = null;
66
public String getRho() {
70
public void setRho(String rho) {
74
public LinkedList<Vertex> getOut()
76
return (LinkedList<Vertex>)out.clone();
79
public LinkedList<Vertex> getIn()
81
return (LinkedList<Vertex>)in.clone();
84
public LinkedList<ControlVariable> getVars()
86
return (LinkedList<ControlVariable>)vars.clone();
89
public void removeIn(Vertex t)
94
public void removeOut(Vertex t)
99
public void removeVar(ControlVariable t)
105
public Boolean isActive()
107
return condition.evaluate();
110
public boolean addIn(DefaultConnection con) {
111
Vertex t = (Vertex)con.getFirst();
115
connections.add(con);
119
public boolean addOut(DefaultConnection con) {
120
Vertex t = (Vertex)con.getSecond();
124
connections.add(con);
128
public boolean addVar(DefaultConnection con)
130
ControlVariable t = (ControlVariable)con.getSecond();
131
if (vars.contains(t))
134
connections.add(con);
139
public boolean hits(Vec2 pointInViewSpace)
141
Vec2 v = new Vec2(pointInViewSpace);
142
transform.getViewToLocalMatrix().transform(v);
143
return v.length() < 0.05f;
146
public String getCondition()
148
return condition.string;
151
public void setCondition(String condition)
153
if (!this.condition.setCondition(condition)) return;
155
String label = getLabel();
156
if (label.lastIndexOf(": ") != -1)
158
label = label.substring(0, label.lastIndexOf(": "));
160
if (!condition.equals("1")) label = label + ": " + condition;
164
public Vertex(BasicEditable parent) throws UnsupportedComponentException
167
boundingBox.setExtents(new Vec2(-0.05f, -0.05f), new Vec2(0.05f, 0.05f));
168
condition = new Condition("1", (CPOGModel) ownerDocument);
171
out = new LinkedList<Vertex>();
172
in = new LinkedList<Vertex>();
173
vars = new LinkedList<ControlVariable>();
176
public void refresh()
178
if (condition != null) condition.refresh();
181
public void draw(Painter p)
183
p.setTransform(transform.getLocalToViewMatrix());
184
p.setShapeMode(ShapeMode.FILL);
187
p.setFillColor(selectedVertexOutlineColor);
190
p.setFillColor(userVertexOutlineColor);
193
p.setFillColor(vertexOutlineColor);
195
p.setFillColor(passiveVertexOutlineColor);
197
p.drawCircle(0.05f, null);
200
p.setFillColor(selectedVertexColor);
203
p.setFillColor(enabledVertexColor);
206
p.setFillColor(vertexFiredColor);
208
p.setFillColor(vertexColor);
210
p.drawCircle(0.04f, null);
216
public BasicEditable getChildAt(Vec2 point) {
217
// TODO Auto-generated method stub
222
public void update(Mat4x4 matView) {
223
// TODO Auto-generated method stub
227
public String getControlledSet()
230
for(ControlVariable v : vars)
231
if (res.length() > 0) res = res + ", " + v.getId(); else res = v.getId();
235
public List<String> getEditableProperties() {
236
List<String> list = super.getEditableProperties();
237
list.add("str,Condition,getCondition,setCondition");
238
list.add("bool,Active,isActive,-");
239
list.add("str,Restriction function,getRho,setRho");
240
list.add("str,Controlled set,getControlledSet,-");
245
public void fromXmlDom(Element element) throws DuplicateIdException {
246
NodeList nl = element.getElementsByTagName("vertex");
247
Element ne = (Element) nl.item(0);
248
setCondition(ne.getAttribute("condition"));
249
setRho(ne.getAttribute("rho"));
250
super.fromXmlDom(element);
253
public Element toXmlDom(Element parent_element) {
254
Element ee = super.toXmlDom(parent_element);
255
Document d = ee.getOwnerDocument();
256
Element ppe = d.createElement("vertex");
257
ppe.setAttribute("condition", getCondition());
258
ppe.setAttribute("rho", getRho());
263
public void simAction(int flag)
265
if (flag == MouseEvent.BUTTON1 && !fired && isActive())
274
for(ControlVariable v : vars) v.setCurrentValue(v.getFinalValue());
b'\\ No newline at end of file'