Search in sources :

Example 6 with Jack

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);
        }
    }
}
Also used : GasPort(com.cas.gas.vo.GasPort) Spatial(com.jme3.scene.Spatial) ArrayList(java.util.ArrayList) Jack(com.cas.circuit.vo.Jack) Terminal(com.cas.circuit.vo.Terminal)

Example 7 with Jack

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;
}
Also used : TransducersHandler(com.cas.circuit.event.TransducersHandler) ElecCompDef(com.cas.circuit.vo.ElecCompDef) TransducersAdapter(com.cas.circuit.event.TransducersAdapter) Node(com.jme3.scene.Node) ElecComp(com.cas.circuit.vo.ElecComp) Jack(com.cas.circuit.vo.Jack)

Example 8 with Jack

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;
    }
}
Also used : Cable(com.cas.circuit.vo.Cable) GasPort(com.cas.gas.vo.GasPort) ArrayList(java.util.ArrayList) Pipe(com.cas.gas.vo.Pipe) Wire(com.cas.circuit.vo.Wire) Terminal(com.cas.circuit.vo.Terminal) Comparator(java.util.Comparator) Spatial(com.jme3.scene.Spatial) Jack(com.cas.circuit.vo.Jack)

Example 9 with Jack

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;
}
Also used : Cable(com.cas.circuit.vo.Cable) GasPort(com.cas.gas.vo.GasPort) ColorRGBA(com.jme3.math.ColorRGBA) Spatial(com.jme3.scene.Spatial) Node(com.jme3.scene.Node) ArrayList(java.util.ArrayList) Wire(com.cas.circuit.vo.Wire) Jack(com.cas.circuit.vo.Jack) Terminal(com.cas.circuit.vo.Terminal) Callable(java.util.concurrent.Callable) FileNotFoundException(java.io.FileNotFoundException)

Example 10 with Jack

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);
    }
}
Also used : GasPort(com.cas.gas.vo.GasPort) ElecCompDef(com.cas.circuit.vo.ElecCompDef) ControlIO(com.cas.circuit.vo.ControlIO) Terminal(com.cas.circuit.vo.Terminal) Spatial(com.jme3.scene.Spatial) Magnetism(com.cas.circuit.vo.Magnetism) Jack(com.cas.circuit.vo.Jack) LightIO(com.cas.circuit.vo.LightIO)

Aggregations

Jack (com.cas.circuit.vo.Jack)27 Terminal (com.cas.circuit.vo.Terminal)11 GasPort (com.cas.gas.vo.GasPort)5 Cable (com.cas.circuit.vo.Cable)4 Wire (com.cas.circuit.vo.Wire)4 Spatial (com.jme3.scene.Spatial)4 ElecCompDef (com.cas.circuit.vo.ElecCompDef)3 Pipe (com.cas.gas.vo.Pipe)3 ArrayList (java.util.ArrayList)3 MesureResult (com.cas.circuit.util.MesureResult)2 R (com.cas.circuit.util.R)2 ResisRelation (com.cas.circuit.vo.ResisRelation)2 Node (com.jme3.scene.Node)2 SignalVolt (com.cas.circuit.SignalVolt)1 TransducersAdapter (com.cas.circuit.event.TransducersAdapter)1 TransducersHandler (com.cas.circuit.event.TransducersHandler)1 LinkerMsg (com.cas.circuit.msg.LinkerMsg)1 ControlIO (com.cas.circuit.vo.ControlIO)1 ElecComp (com.cas.circuit.vo.ElecComp)1 Format (com.cas.circuit.vo.Format)1