use of com.cas.circuit.vo.Jack 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.circuit.vo.Jack in project TeachingInSimulation by ScOrPiOzzy.
the class ConnectionHandler method bindSaveTransEvent.
private Cable bindSaveTransEvent(String elecCompKey, Cable cable, boolean modifiable) {
ElecComp elecComp = eleCompMap.get(elecCompKey);
if (elecComp == null) {
System.err.println("找不到elecCompKey : " + elecCompKey);
return null;
// throw new RuntimeException("找不到elecCompKey : " + elecCompKey);
}
ElecCompDef def = elecComp.getDef();
def.buildCompLogic();
Node elecCompMdl = (Node) parent.getChild(elecComp.getPO().getMdlName());
JmeUtil.setSpatialHighLight(elecCompMdl, ColorRGBA.BlackNoAlpha);
// MouseEventState.cleanEvent(elecCompMdl);
elecCompMdl.setUserData("MouseEvent", null);
Jack jack = def.getJackMap().values().iterator().next();
TransducersHandler handler = new TransducersHandler(this, elecComp, jack, modifiable);
cable.bind(jack);
cable.setElecComp(true);
cable.getModels().put(elecCompMdl, jack);
if (modifiable) {
linkerData.addLinker(cable, jack, null);
}
handler.setCable(cable);
addMouseEvent(elecCompMdl, new TransducersAdapter(handler));
return cable;
}
use of com.cas.circuit.vo.Jack 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.circuit.vo.Jack 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;
}
use of com.cas.circuit.vo.Jack in project TeachingInSimulation by ScOrPiOzzy.
the class BaseElectricCompLogic method initialize.
public void initialize(Node elecCompMdl) {
// XXX for test
// System.out.println("BaseElectricCompLogic.initialize()" + Thread.currentThread().getName());
// log.log(Level.INFO, "加载元器件{0},用时{1}", new Object[] { elecComp.getPO().getTagName(), System.currentTimeMillis() });
this.elecCompMdl = elecCompMdl;
// 读取元器件铭牌信息
readNameplateInfo();
// elecCompMdl = (Node) MdlMapUtil.loadMdlWithAbbr(getElecComp().getDef().getPO().getMdlRef(), app.getAssetManager());
// elecCompMdl = (Node) parentMdl.getChild(getElecComp().getDef().getPO().getMdlRef());
// elecCompMdl = (Node) parentMdl.getChild(getElecComp().getPO().getMdlName());
// elecCompMdl = parentMdl;
// registerEvent();
// elecCompMdl.setLocalTranslation(getElecComp().getLocation());
// elecCompMdl.rotate(getElecComp().getRotation()[0], getElecComp().getRotation()[1], getElecComp().getRotation()[2]);
// elecCompMdl.setUserData(BaseElectricCompLogic.ELECCOMP_STATE, BaseElectricCompLogic.this);
Spatial tempSpatial = null;
// 遍历元气件中所有插座
Collection<Jack> jacks = getElecComp().getDef().getJackMap().values();
for (Jack jack : jacks) {
tempSpatial = getChild(elecCompMdl, jack.getPO().getMdlName(), jack);
jack.setModel(tempSpatial);
}
// 遍历元气件中所有连接头
Collection<Terminal> terminals = getElecComp().getDef().getTerminalMap().values();
for (Terminal terminal : terminals) {
tempSpatial = getChild(elecCompMdl, terminal.getPO().getMdlName(), terminal);
if (tempSpatial == null) {
log.warn(elecComp.getDef().getPO().getName() + "未找到模型名为" + terminal.getPO().getMdlName() + "的端子模型!");
continue;
}
terminal.setModel(tempSpatial);
// FIXME 端子连接数量的标签
String numStr = ((Node) tempSpatial).getChild(0).getUserData("num");
if (Util.isNumeric(numStr)) {
terminal.setNum(Integer.parseInt(numStr));
} else {
terminal.setNum(1);
}
}
// 遍历元器件中所有气口
Collection<GasPort> gasPorts = getElecComp().getDef().getGasPortMap().values();
for (GasPort gasPort : gasPorts) {
tempSpatial = getChild(elecCompMdl, gasPort.getPO().getMdlName(), gasPort);
gasPort.setModel(tempSpatial);
}
// TODO 加入元气件按钮开关...
ElecCompDef compDef = getElecComp().getDef();
List<Magnetism> magnetisms = compDef.getMagnetisms();
for (Magnetism magnetism : magnetisms) {
// 遍历磁环静中所有按钮
for (ControlIO controlIO : magnetism.getControlIOs()) {
tempSpatial = getChild(elecCompMdl, controlIO.getPO().getMdlName(), controlIO);
controlIO.setModel(tempSpatial);
}
// 遍历磁环静中所有指示灯
for (LightIO lightIO : magnetism.getLightIOs()) {
tempSpatial = getChild(elecCompMdl, lightIO.getPO().getMdlName(), lightIO);
lightIO.setModel(tempSpatial);
}
}
// 遍历元气件中所有指示灯
for (LightIO lightIO : compDef.getLightIOs()) {
tempSpatial = getChild(elecCompMdl, lightIO.getPO().getMdlName(), lightIO);
lightIO.setModel(tempSpatial);
}
}
Aggregations