⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beepanel.java

📁 图像检索的代码b
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                            tgt = tgt.substring(1);
                            for (Iterator it = objects.iterator(); it.hasNext();) {
                                SemanticObjectRepresentation rep = (SemanticObjectRepresentation) it.next();
                                String oID = rep.getNode().getAttributeValue("id");
                                if (oID.equals(tgt)) {
                                    sort = rep;
                                }
                                if (oID.equals(src)) {
                                    sors = rep;
                                }
                            }
                        } else {
                            // logger.error("Import: no source or target found");
                        }
                        if (sort != null && sors != null && rel != null) {
                            SemanticRelationRepresentation srr = new SemanticRelationRepresentation(sors, sort, rel);
                            relations.add(srr);
                        } else {
                            // logger.error("Import: Could not import: " + e.toString());
                        }
                    }
                }
            }
            distributeElements();
            repaint();
            embedElements();
        } else { // no description found
            // logger.error("Import: No MPEG-7 description available in given node ...");
        }
    }

    private void addObjectFromDND(Point p, String label) {
        if (label.indexOf('\n') == -1) {
            Vector a = parent.getPossibleObjects();
            for (Iterator i = a.iterator(); i.hasNext();) {
                Element e = (Element) i.next();
                if (e.getChild("Label", e.getNamespace()).getChildText("Name", e.getNamespace()).equals(label))
                    addObject(p, e);
            }
        }
        TextChangesListener.getInstance().fireDataChanged();
    }

    private void showAbout() {
        JOptionPane.showMessageDialog(this,
                "<html><h1>IMBee</h1>creating semantic descriptions<hr>&copy; 2002 by Know Center<br>author: Mathias Lux, mathias@juggle.at<br>Inffeldgasse 16c<br>8010 Graz<br>Telefon: +43 (316) 873-5669</html>",
                "About", JOptionPane.PLAIN_MESSAGE, new ImageIcon(BeePanel.class.getResource("bee.png")));
    }

    public void distributeElements() {
        int number = objects.size();
        int width = this.getWidth();
        int height = this.getHeight();
        double max = 0.0;

        if (width > height)
            max = (double) ((height >> 1) - SemanticObjectRepresentation.HEIGHT) - 10.0;
        else
            max = (double) ((width >> 1) - SemanticObjectRepresentation.WIDTH) - 10.0;
        int step = 0;
        double split = 2.0 * Math.PI / (double) number;
        for (Iterator i = objects.iterator(); i.hasNext();) {
            SemanticObjectRepresentation r = (SemanticObjectRepresentation) i.next();
            Point p = new Point((width >> 1) + ((int) (max * Math.cos(((double) step) * split))) - (SemanticObjectRepresentation.WIDTH >> 1),
                    (height >> 1) + ((int) (max * Math.sin(((double) step) * split))) - (SemanticObjectRepresentation.HEIGHT >> 1));
            r.setP(p);
            step++;
        }
    }

    public void embedElements() {
        // getting maximum for scaling to [0,1]^2:
        double maxX = 1.0, minX = 0.0, maxY = 1.0, minY = 0.0;
        for (Iterator itObj = objects.iterator(); itObj.hasNext();) {
            SemanticObjectRepresentation sor = (SemanticObjectRepresentation) itObj.next();
            double x = sor.getP().getX();
            double y = sor.getP().getY();
            if (x < minX) minX = x;
            if (y < minY) minY = y;
            if (x > maxX) maxX = x;
            if (y > maxY) maxY = y;
        }
        // creating nodelist
        List<Node> nodeList = new LinkedList<Node>();
        HashMap<SemanticObjectRepresentation, DefaultNode> lookupNodes = new HashMap<SemanticObjectRepresentation, DefaultNode>(objects.size());
        for (Iterator itObj = objects.iterator(); itObj.hasNext();) {
            SemanticObjectRepresentation sor = (SemanticObjectRepresentation) itObj.next();
            sor.getP().getX();
            double x = sor.getP().getX();
            double y = sor.getP().getY();
            x = (x - minX) / (maxX - minX);
            y = (y - minY) / (maxY - minY);
            DefaultNode d = new DefaultNode(x, y, sor);
            nodeList.add(d);
            lookupNodes.put(sor, d);
        }
        List<Edge> edges = new LinkedList<Edge>();
        for (Iterator itRel = relations.iterator(); itRel.hasNext();) {
            SemanticRelationRepresentation rel = (SemanticRelationRepresentation) itRel.next();
            DefaultEdge e = new DefaultEdge(lookupNodes.get(rel.getSource()), lookupNodes.get(rel.getTarget()));
            edges.add(e);
        }
        SpringEmbedder se = new SpringEmbedder(nodeList, edges);
        // todo: start thread
        EmbedderThread embedderThread = new EmbedderThread(this, se, running);
        Thread t = new Thread(embedderThread);

        t.start();
    }

    public void importFile() {
        JFileChooser jfc = new JFileChooser(".");
        FileFilter std = jfc.getFileFilter();
        jfc.setFileFilter(new Mpeg7FileFilter());
        jfc.addChoosableFileFilter(new XMLFileFilter());
        jfc.addChoosableFileFilter(std);
        if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
            SAXBuilder builder = new SAXBuilder();
            try {
                Document d = builder.build(jfc.getSelectedFile());
                java.util.List l = OCToolkit.xpathQuery(d, "//SemanticBase", Namespace.getNamespace("", "urn:mpeg:mpeg7:schema:2001"));
                if (l != null) {
                    Element node = (Element) ((Element) ((Element) l.get(0)).getParent()).detach();
                    importNode(node);
                } else {
                    // logger.error("Import: No matching node found in file");
                }
            } catch (JDOMException e) {
                // logger.error(e);
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void removeMarkedElements() {

        Vector remO = new Vector();
        for (Iterator iterator = objects.iterator(); iterator.hasNext();) {
            SemanticObjectRepresentation sem = (SemanticObjectRepresentation) iterator.next();
            if (sem.isMarked()) {
                remO.add(sem);
                Vector rem = new Vector();
                for (Iterator i2 = relations.iterator(); i2.hasNext();) {
                    SemanticRelationRepresentation rel = (SemanticRelationRepresentation) i2.next();
                    if (rel.getSource().equals(sem) || rel.getTarget().equals(sem)) {
                        rem.add(rel);
                    }
                }
//                objects.remove(sem);
                for (Iterator i3 = rem.iterator(); i3.hasNext();) {
                    relations.remove(i3.next());
                }
            }
        }
        for (Iterator iterator = remO.iterator(); iterator.hasNext();) {
            SemanticObjectRepresentation sem = (SemanticObjectRepresentation) iterator.next();
            objects.remove(sem);
        }
        TextChangesListener.getInstance().fireDataChanged();
    }

    private class BeePanelMouseAdapter extends MouseAdapter {
        public void mousePressed(MouseEvent e) {
//                int relation_mask = MouseEvent.SHIFT_DOWN_MASK | MouseEvent.BUTTON1_DOWN_MASK;
//                int move_mask = MouseEvent.BUTTON1_DOWN_MASK;
            if (e.getButton() == MouseEvent.BUTTON1 && !e.isAltDown()) {
                pressedAt = e.getPoint();
                checkIfPressedInObject(e.getPoint());
            }
            if (e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON1 && e.isAltDown()) {
                startRel = e.getPoint();
            }
            repaint();
        }

        public void mouseReleased(MouseEvent e) {
            checkIfIsInObject(e.getPoint());
            draggingObject = null;
            pressedAt = null;
            offset = null;
            repaint();
            if (e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON1 && e.isAltDown()) {
                endRel = e.getPoint();
                checkIfNewRelation();
                startRel = null;
                endRel = null;
            }
        }

        public void mouseClicked(MouseEvent e) {
            clickedAt = e.getPoint();
            if (e.getButton() == MouseEvent.BUTTON3) {
                showMenu(e.getPoint().x, e.getPoint().y);
            }
            if (e.getButton() == MouseEvent.BUTTON1 && e.isControlDown()) {
                for (Iterator iterator = objects.iterator(); iterator.hasNext();) {
                    SemanticObjectRepresentation sem = (SemanticObjectRepresentation) iterator.next();
                    if (sem.checkIfInside(e.getPoint())) {
                        // Toggle Markierung ... :)
                        sem.setMarked(!sem.isMarked());
                    }
                }
            }
            repaint();
        }
    }
}

class EmbedderThread implements Runnable {
    BeePanel panel;
    SpringEmbedder se;
    double x, y;
    boolean running = true;
    LinkedList<EmbedderThread> currentlyRunning = null;

    public EmbedderThread(BeePanel panel, SpringEmbedder se, LinkedList<EmbedderThread> running) {
        for (Iterator<EmbedderThread> iterator = running.iterator(); iterator.hasNext();) {
            iterator.next().endEmbedding();
        }
        currentlyRunning = running;
        running.add(this);
        this.panel = panel;
        this.se = se;
        x = panel.getSize().getWidth() - (SemanticObjectRepresentation.WIDTH << 1);
        y = panel.getSize().getHeight() - SemanticObjectRepresentation.HEIGHT * 3;
    }

    public void run() {
        while (se.step() > 0 && running) {
            List<Node> list = se.getNodeList();

            double xMin = 1.0, xMax = 0.0, yMin = 1.0, yMax = 0.0;
            for (Iterator<Node> iterator = list.iterator(); iterator.hasNext();) {
                Node node = iterator.next();
                if (node.getX() < xMin) xMin = node.getX();
                if (node.getX() > xMax) xMax = node.getX();
                if (node.getY() < yMin) yMin = node.getY();
                if (node.getY() > yMax) yMax = node.getY();
            }


            for (Iterator<Node> it = list.iterator(); it.hasNext();) {
                Node node = it.next();
                double nx = (node.getX() - xMin) / (xMax - xMin);
                double ny = (node.getY() - yMin) / (yMax - yMin);

                SemanticObjectRepresentation sor = (SemanticObjectRepresentation) ((DefaultNode) node).getNodeObject();
//                sor.getP().setLocation(x * nx , y * ny );
                sor.getP().setLocation(x * nx + (SemanticObjectRepresentation.WIDTH >> 1), y * ny + (SemanticObjectRepresentation.HEIGHT >> 1));
            }
            panel.repaint();
            try {
                sleep(15);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (currentlyRunning.contains(this)) {
            currentlyRunning.remove(this);
        }
    }

    public void endEmbedding() {
        running = false;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -