use of com.cas.gas.vo.GasPort in project TeachingInSimulation by ScOrPiOzzy.
the class ElecCompDef method blockRelationAdded.
public void blockRelationAdded(BlockRelation relation) {
relation.setActivated(true);
GasPort port1 = relation.getPort1();
GasPort port2 = relation.getPort2();
port1.getBlockRelationMap().put(port2, relation);
port2.getBlockRelationMap().put(port1, relation);
}
use of com.cas.gas.vo.GasPort in project TeachingInSimulation by ScOrPiOzzy.
the class ElecCompDef method addChild.
@Override
protected void addChild(BaseVO<?> child) {
super.addChild(child);
if (child instanceof Jack) {
Jack jack = (Jack) child;
jackMap.put(jack.getPO().getId(), jack);
} else if (child instanceof Terminal) {
Terminal terminal = (Terminal) child;
terminal.setElecComp(this);
terminalMap.put(terminal.getLocalKey(), terminal);
} else if (child instanceof Magnetism) {
magnetisms.add((Magnetism) child);
} else if (child instanceof ResisState) {
ResisState resisState = (ResisState) child;
resisStates.add(resisState);
resisStatesMap.put(resisState.getId(), resisState);
} else if (child instanceof LightIO) {
lightIOs.add((LightIO) child);
} else if (child instanceof GasPort) {
GasPort port = (GasPort) child;
port.setElecComp(this);
gasPortMap.put(port.getPO().getId(), port);
} else if (child instanceof BlockState) {
BlockState blockState = (BlockState) child;
blockStates.add(blockState);
blockStatesMap.put(blockState.getId(), blockState);
}
}
use of com.cas.gas.vo.GasPort in project TeachingInSimulation by ScOrPiOzzy.
the class ConnectionHandler method resetLinks.
private void resetLinks(ILinkTarget termOrPort) {
if (termOrPort == null) /* || termOrPort.getPO() == null */
{
return;
}
// 获得当前端子/气口的接入轴方向
List<ILinker> linkers = termOrPort.getLinkers();
List<Spatial> termMdls = new ArrayList<Spatial>();
for (ILinker linker : linkers) {
termMdls.addAll(linker.getLinkMdlByTarget(termOrPort));
if (termOrPort instanceof Jack) {
Jack jack = (Jack) termOrPort;
ConnectionUtil.rotateJack(termMdls, jack.getRotation(), jack.getPO().getJackDirection());
} else if (termOrPort instanceof Terminal) {
ConnectionUtil.moveTerms(termMdls, (Terminal) termOrPort);
} else if (termOrPort instanceof GasPort) {
ConnectionUtil.rotatePipe(termMdls, (GasPort) termOrPort);
}
}
}
use of com.cas.gas.vo.GasPort in project TeachingInSimulation by ScOrPiOzzy.
the class ConnectionHandler method bindWireOrPipe.
/**
* 绑定端点
* @param termOrPort 点击接线的端点信息对象,或者气口信息对象
*/
private void bindWireOrPipe(ILinkTarget termOrPort, Spatial mdl) {
setHighLightLinker(selected, false);
if (currLinker instanceof Cable && termOrPort instanceof Terminal) {
Cable cable = ((Cable) currLinker);
// 如果当前绑定为线缆上的导线
cable.bindTerm(termOrPort, mdl);
// 接完线 显示号码管对话框
ui.setNumDialogueVisible(true);
modifyLinker = currLinker;
List<Wire> wires = new ArrayList<Wire>(cable.getMark_wire().values());
// 线缆导线排序
for (Wire w : cable.getBindWires()) {
wires.remove(w);
}
Comparator<Wire> comparator = new Comparator<Wire>() {
@Override
public int compare(Wire wire1, Wire wire2) {
return wire1.getPO().getStitch1().compareTo(wire2.getPO().getStitch1());
}
};
Collections.sort(wires, comparator);
if (wires.size() == 0) {
cable.setNowConnectingWire(null);
} else {
cable.setNowConnectingWire(wires.get(0).getPO().getMark());
}
} else {
// 其他普通情况绑定
currLinker.bind(termOrPort);
if (currLinker.isBothBinded() && currLinker instanceof Wire) {
// 接完线 显示号码管对话框
ui.setNumDialogueVisible(true);
modifyLinker = currLinker;
}
}
currLinker.getModels().put(mdl, termOrPort);
// 显示或隐藏与鼠标连接的直线
setLineVisible(true);
if (!currLinker.isBothBinded()) {
return;
}
setLineVisible(false);
ui.initXianLanPanel(null, false);
// 取消接线完成的元器件高亮
if (currLinker instanceof Cable && ((Cable) currLinker).isElecComp()) {
Map<Spatial, ILinkTarget> models = currLinker.getModels();
for (Spatial spatial : models.keySet()) {
// JmeUtil.setMaterialEffect(Dispatcher.getIns().getMainApp(), HightLightType.GLOW, spatial, ColorConsts.TRANSDUCERS, false);
JmeUtil.setSpatialHighLight(spatial, ColorRGBA.BlackNoAlpha);
}
}
if (termOrPort instanceof Terminal) {
if (currLinker instanceof Cable) {
Cable cable = new Cable();
currLinker = cable;
} else {
Wire wire = new Wire(1, color);
currLinker = wire;
}
} else if (termOrPort instanceof GasPort) {
Pipe pipe = new Pipe(1, color);
currLinker = pipe;
} else if (termOrPort instanceof Jack) {
Cable cable = new Cable();
currLinker = cable;
}
}
use of com.cas.gas.vo.GasPort in project TeachingInSimulation by ScOrPiOzzy.
the class ConnectionHandler method connect.
/**
* 接线处理
* @param wireOrPipe 导线、气管
* @param termOrPort 端子、气口
*/
private Spatial connect(ILinker wireOrPipe, ILinkTarget termOrPort, boolean readSav) {
// 旋转端子上包括新增接线头在内的若干个接线头
Spatial model = null;
ColorRGBA color = null;
if (termOrPort instanceof Terminal) {
model = ConnectionUtil.getWireTerm();
if (wireOrPipe instanceof Cable) {
Cable cable = (Cable) wireOrPipe;
Wire wire = cable.getNowConnectingWire();
model.setUserData("WireMark", wire.getPO().getMark());
// 添加已经接上端子的导线
cable.getBindWires().add(wire);
// 除去已经连接的导线
if (!readSav) {
List<Wire> wires = new ArrayList<Wire>(cable.getMark_wire().values());
for (Wire w : cable.getBindWires()) {
wires.remove(w);
}
ui.initXianLanPanel(wires, true);
}
color = wire.getColor();
} else {
color = wireOrPipe.getColor();
currSaveLinker = null;
}
} else if (termOrPort instanceof GasPort) {
model = ConnectionUtil.getPipeTerm();
color = wireOrPipe.getColor();
currSaveLinker = null;
} else if (termOrPort instanceof Jack) {
Jack jack = (Jack) termOrPort;
model = ConnectionUtil.getJackTerm(jack.getFormat());
Cable cable = (Cable) jack.getLinkers().get(0);
cable = cable.clone();
if (readSav) {
cable = (Cable) wireOrPipe;
}
color = cable.getColor();
currSaveLinker = null;
// 通过jack获得当前的接线线缆
if (((Cable) wireOrPipe).getPlug1() == null && ((Cable) wireOrPipe).getPlug2() == null) {
if (readSav) {
wireOrPipe = cable;
currSaveLinker = wireOrPipe;
} else {
currLinker = cable;
}
}
// 如果是单连接头线缆,则显示导线面板
if (cable.isSinglePlug() && !readSav) {
List<Wire> wires = new ArrayList<Wire>(cable.getMark_wire().values());
ui.initXianLanPanel(wires, true);
cable.setNowConnectingWire(wires.get(0).getPO().getMark());
}
}
// 添加新的接线头到端子上
Node target = (Node) termOrPort.getModel();
final Node parent = target.getParent();
Spatial screw = target.getChild("screw");
if (screw != null) {
model.setLocalTranslation(JmeUtil.getTransLation(screw, parent));
} else {
model.setLocalTranslation(target.getLocalTranslation());
}
// 修改连接头颜色
JmeUtil.changeColor(((Node) model).getChild("model"), color);
model.setUserData("Color", color);
// 获得端子模型的父节点
if (JmeUtil.isJMEThread()) {
((Node) parent).attachChild(model);
} else {
final Spatial finalModel = model;
try {
app.enqueue(new Callable<Void>() {
@Override
public Void call() {
// 根据当前选中
((Node) parent).attachChild(finalModel);
return null;
}
}).get();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
// 绑定端子
if (readSav) {
if (wireOrPipe instanceof Cable && termOrPort instanceof Terminal) {
((Cable) wireOrPipe).bindTerm(termOrPort, model);
wireOrPipe.getModels().put(model, termOrPort);
Wire wire = ((Cable) wireOrPipe).getNowConnectingWire();
modifyWireNum(wire, wire.getWireNum());
} else {
wireOrPipe.bind(termOrPort);
wireOrPipe.getModels().put(model, termOrPort);
if (wireOrPipe.isBothBinded() && wireOrPipe instanceof Wire) {
modifyWireNum(wireOrPipe, wireOrPipe.getWireNum());
}
}
} else {
bindWireOrPipe(termOrPort, model);
}
resetLinks(termOrPort);
return model;
}
Aggregations