How to Outline Group of 2D points

Hi all, just wondering if anyone knows of a function already written (or easily edited ) to handle this problem.   I need to outline a group of 2d points (300,000+ points in most cases).  I need something similar to the convex hull algorithim, but in this case i need to be able to address concave points as well.  (So basically an outline of all the outermost points with some kind of tolerence.   (An example would be a 2d point cloud representing say the letter X.  What would be the best way to draw an outline of that point cloud X ?
Thanks!

It appears as though we do offer some modules that have convex hull algorithms and they are primarily associated with image processing. It could be possible, albeit awkward, to manipulate array data and supply it to the algorithms as image data. 
Jeff L
National Instruments

Similar Messages

  • How to outline selected cells during drag and drop in the jtable

    Hi,
    I have spent a lot of time to find out how to outline selected cells during drag in the jtable, but I did not find the answer.
    Can anybody give me a tip, where to read more about this problem or even better, give an example...
    I have the following situation:
    1.Table has 10 rows and 10 columns
    2.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) and setCellSelectionEnabled(true)
    3.user select 5 cells in 4th row (for example cell45,cell46,cell47,cell48 and cell49)
    4.user starts dragging. During dragging an outline should be drawn. Outline should be a rectangular with width of 5 cells and height of one cell. Outline should move according to the mouse position.
    5.rectangular disappears when dropped
    Regards,
    Primoz

    In "createTransferable" you can create a drag image
    which you can paint in "dragOver" and clear in "drop" method of DropTarget :
    package dnd;
    * DragDropJTableCellContents.java
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.awt.dnd.*;
    import java.awt.event.*;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    public class DragDropJTableCellContents extends JFrame {
        public DragDropJTableCellContents() {
            setTitle("Drag and Drop JTable");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            getContentPane().add(createTable("JTable"), BorderLayout.CENTER);
            setSize(400, 300);
            setLocationRelativeTo(null);
        private JPanel createTable(String tableId) {
            DefaultTableModel model = new DefaultTableModel();
            for (int i = 0; i < 10; i++) {
                model.addColumn("Column "+i);
            for (int i = 0; i < 10; i++) {
                String[] rowData = new String[10];
                for (int j = 0; j < 10; j++) {
                    rowData[j] = tableId + " " + i + j;
                model.addRow(rowData);
            JTable table = new JTable(model);
            table.getTableHeader().setReorderingAllowed(false);
            table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            table.setCellSelectionEnabled(true);
            JScrollPane scrollPane = new JScrollPane(table);
            table.setDragEnabled(true);
            TableTransferHandler th = new TableTransferHandler();
            table.setTransferHandler(th);
            table.setDropTarget(new TableDropTarget(th));
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            JPanel panel = new JPanel(new BorderLayout());
            panel.add(scrollPane);
            panel.setBorder(BorderFactory.createTitledBorder(tableId));
            return panel;
        public static void main(String[] args) {
            new DragDropJTableCellContents().setVisible(true);
        abstract class StringTransferHandler extends TransferHandler {
            public int dropAction;
            protected abstract String exportString(JComponent c);
            protected abstract void importString(JComponent c, String str);
            @Override
            protected Transferable createTransferable(JComponent c) {
                return new StringSelection(exportString(c));
            @Override
            public int getSourceActions(JComponent c) {
                return COPY;
            @Override
            public boolean importData(JComponent c, Transferable t) {
                if (canImport(c, t.getTransferDataFlavors())) {
                    try {
                        String str = (String) t.getTransferData(DataFlavor.stringFlavor);
                        importString(c, str);
                        return true;
                    } catch (UnsupportedFlavorException ufe) {
                    } catch (IOException ioe) {
                return false;
            @Override
            public boolean canImport(JComponent c, DataFlavor[] flavors) {
                for (int ndx = 0; ndx < flavors.length; ndx++) {
                    if (DataFlavor.stringFlavor.equals(flavors[ndx])) {
                        return true;
                return false;
        class TableTransferHandler extends StringTransferHandler {
            private int dragRow;
            private int[] dragColumns;
            private BufferedImage[] image;
            private int row;
            private int[] columns;
            public JTable target;
            @Override
            protected Transferable createTransferable(JComponent c) {
                JTable table = (JTable) c;
                dragRow = table.getSelectedRow();
                dragColumns = table.getSelectedColumns();
                createDragImage(table);
                return new StringSelection(exportString(c));
            protected String exportString(JComponent c) {
                JTable table = (JTable) c;
                row = table.getSelectedRow();
                columns = table.getSelectedColumns();
                StringBuffer buff = new StringBuffer();
                for (int j = 0; j < columns.length; j++) {
                    Object val = table.getValueAt(row, columns[j]);
                    buff.append(val == null ? "" : val.toString());
                    if (j != columns.length - 1) {
                        buff.append(",");
                return buff.toString();
            protected void importString(JComponent c, String str) {
                target = (JTable) c;
                DefaultTableModel model = (DefaultTableModel) target.getModel();
                String[] values = str.split("\n");
                int colCount = target.getSelectedColumn();
                int max = target.getColumnCount();
                for (int ndx = 0; ndx < values.length; ndx++) {
                    String[] data = values[ndx].split(",");
                    for (int i = 0; i < data.length; i++) {
                        String string = data;
    if(colCount < max){
    model.setValueAt(string, target.getSelectedRow(), colCount);
    colCount++;
    public BufferedImage[] getDragImage() {
    return image;
    private void createDragImage(JTable table) {
    if (dragColumns != null) {
    try {
    image = new BufferedImage[dragColumns.length];
    for (int i = 0; i < dragColumns.length; i++) {
    Rectangle cellBounds = table.getCellRect(dragRow, i, true);
    TableCellRenderer r = table.getCellRenderer(dragRow, i);
    DefaultTableModel m = (DefaultTableModel) table.getModel();
    JComponent lbl = (JComponent) r.getTableCellRendererComponent(table,
    table.getValueAt(dragRow, dragColumns[i]), false, false, dragRow, i);
    lbl.setBounds(cellBounds);
    BufferedImage img = new BufferedImage(lbl.getWidth(), lbl.getHeight(),
    BufferedImage.TYPE_INT_ARGB_PRE);
    Graphics2D graphics = img.createGraphics();
    graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
    lbl.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
    lbl.paint(graphics);
    graphics.dispose();
    image[i] = img;
    } catch (RuntimeException re) {
    class TableDropTarget extends DropTarget {
    private Insets autoscrollInsets = new Insets(20, 20, 20, 20);
    private Rectangle rect2D = new Rectangle();
    private TableTransferHandler handler;
    public TableDropTarget(TableTransferHandler h) {
    super();
    this.handler = h;
    @Override
    public void dragOver(DropTargetDragEvent dtde) {
    handler.dropAction = dtde.getDropAction();
    JTable table = (JTable) dtde.getDropTargetContext().getComponent();
    Point location = dtde.getLocation();
    int row = table.rowAtPoint(location);
    int column = table.columnAtPoint(location);
    table.changeSelection(row, column, false, false);
    paintImage(table, location);
    autoscroll(table, location);
    super.dragOver(dtde);
    public void dragExit(DropTargetDragEvent dtde) {
    clearImage((JTable) dtde.getDropTargetContext().getComponent());
    super.dragExit(dtde);
    @Override
    public void drop(DropTargetDropEvent dtde) {
    Transferable data = dtde.getTransferable();
    JTable table = (JTable) dtde.getDropTargetContext().getComponent();
    clearImage(table);
    handler.importData(table, data);
    super.drop(dtde);
    private final void paintImage(JTable table, Point location) {
    Point pt = new Point(location);
    BufferedImage[] image = handler.getDragImage();
    if (image != null) {
    table.paintImmediately(rect2D.getBounds());
    rect2D.setLocation(pt.x - 15, pt.y - 15);
    int wRect2D = 0;
    int hRect2D = 0;
    for (int i = 0; i < image.length; i++) {
    table.getGraphics().drawImage(image[i], pt.x - 15, pt.y - 15, table);
    pt.x += image[i].getWidth();
    if (hRect2D < image[i].getHeight()) {
    hRect2D = image[i].getHeight();
    wRect2D += image[i].getWidth();
    rect2D.setSize(wRect2D, hRect2D);
    private final void clearImage(JTable table) {
    table.paintImmediately(rect2D.getBounds());
    private Insets getAutoscrollInsets() {
    return autoscrollInsets;
    private void autoscroll(JTable table, Point cursorLocation) {
    Insets insets = getAutoscrollInsets();
    Rectangle outer = table.getVisibleRect();
    Rectangle inner = new Rectangle(outer.x + insets.left,
    outer.y + insets.top,
    outer.width - (insets.left + insets.right),
    outer.height - (insets.top + insets.bottom));
    if (!inner.contains(cursorLocation)) {
    Rectangle scrollRect = new Rectangle(cursorLocation.x - insets.left,
    cursorLocation.y - insets.top,
    insets.left + insets.right,
    insets.top + insets.bottom);
    table.scrollRectToVisible(scrollRect);
    Edited by: Andre_Uhres on Nov 18, 2007 10:03 PM

  • How do you determine transportation planning point

    Hi Gurus,
    Badly need your help.  How do you determine transportation planning point?
    Thanks,
    Paul

    Dear John
    It is based on routes and route schedules are determined based on the following conditions:-
    => Shipping point
         Where are the goods coming from?
    => Ship-to party and unloading point
         Where are the goods going to?
    => Shipping condition
         How are the goods being shipped?
    => Transportation group
         Which goods are shipped?
         --> For example, which type of goods?
    => Calendar week / year
          When are the goods to be shipped?
    If you do not explicitly enter the week and the year, the entry applies for each calendar week. If you enter a week and a year, the route schedule only applies for this week.
    You can only use route schedules if you have maintained the working times and therefore at least one of the following times in minutes:
           -> Transportation planning time
           -> Pick/pack time
           -> Loading time
           -> Transit time
    A route schedule can leave the warehouse exactly once in a week. If a route schedule runs several times, either on several days or several times a day, it must be copied to another route schedule.
    Thanks
    G. Lakshmipathi

  • IN Premiere Pro CC how can I group copy all files in time line to another part of the time line

    How can I group copy all files from one part of the timeline to another part

    From the Premiere Pro manual (I believe track targeting matters, too.  That is, the targeted tracks only are copied): 
    Copy command enhanced to operate on a range in a sequence
    The existing Copy command (Edit > Copy, Ctrl+C (Windows), Command+C (Mac OS)) is enhanced when used in the Timeline panel. If there are no clips or keyframes selected, and an In Point or Out Point is set, then the range of time between the In point and Out point is copied to the clipboard.

  • Components group for unloading point

    Hi,
    How to add components group to unloading point?
    How to add material to  components group for unloading point.
    With regards
    Lakki

    I got the answer

  • How can I group books together in iTunes?

    How can I group books together in iTunes? Some .pdf books will group but others won't even though they have the same Author, Album Name and are part of a Compilation. I have inserted a picture below to illustrate my point; as you can see, some issues of X-men have grouped together but others still show separately.

    I have tried to attach the image again to show what I mean.
    All the .pdf files I imported are tagged as Books and display properly in the books section. It is only the grouping that is not working. As can be seen in the picture, I don't want to actually merge the .pdfs to a single book, just group them into one 'Album' I suppose as turingtest2 says. However, I have set the Artist, Album Name and Grouping fields to be the same for all files, all are marked as part of a compilation but still only the first 3 X-men issues are grouping together. Any more ideas?

  • How to print the text in points wise in sap script

    hi friends,
    how to print the text in points wise in sap script.
    ex: if suppose paragraph consists of 15 lines. then according to one sentence or one fullstop (.) it should give point 1. like that...
    1. hai how ru.
    2. what r  u doing.
    3.where r u.
    like this i want numbering.. waiting for ur replys.
    thanks,
    kiran

    declare a counter
    data : cnt type char 4.
    print :
    cnt = cnt + 1.
    &cnt& &text&
    cnt = cnt + 1. and so on.
    or.
    if the data is in an internal table
    loop at internal_table.
    cnt = cnt + 1.
    write form.
    in script -&cnt& &text&
    endloop.
    Edited by: NIKHILKUMAR POOJARI on Nov 17, 2008 11:18 AM

  • Imported CD songs are each put into a separate album. How can I group them in one album?

    Imported CD songs are each put into a separate album. How can I group them in one album?

    Look at Steve MacGuire's helpful article:  http://samsoft.org.uk/iTunes/grouping.asp

  • How do I group the responses in a single cell...

    Hello,
    I have created a form in FormCentral.  The form is broken down into several groups of checkboxes.  Each group has a heading such as: 5 years old, 6 years old, 7 years old, etc...
    With the form created using FormsCentral, exported as a PDF (to add calculations) and then imported back into FormsCentral the grouping remain intact in the 'View Responses' area.  Example: The '6 years old' section displays the name of all of the 6 year old selected checkboxes.  The '7 years old' section displays the name of all of the 7 year old selected checkboxes, etc...
    Because the FormsCentral application doesn't provide a great deal of visual customization I am now trying to create my form using InDesign CC.  Now, the items take up their own spreadsheet column and don't group together inside the 'View Responses' area as before.  My question is: how do I group together item in the PDF so that they retain their grouping within FormsCentral as before? 
    My belief is that it has something to do with the naming conventions used on the various checkboxes.  Yet, I cannot quite figure out the pattern. 
    Any help is greatly appreciated.
    Thanks!
    -David

    Hi,
    >>My question is: how do I group together item in the PDF so that they retain their grouping within FormsCentral as before?
    Please try to rearrange your columns in FormsCentral View Responses table. You can select a column (or columns) and move it next to another column, then select the "T" icon which stands for "Text" formatting in Toolbar, here you can change the title of the Column or the text in each responses to a different color/background color.
    Hope this helps,
    Thanks,
    Lucia

  • How to remove group in XML Publisher template

    Hi All,
    How to remove group in XML Publisher template while desining as below is one example in that i want to remove the group no 2,3,4 or G Supp Seq,List G Audit,G Audit and want the output of line no 1 and 5 and then 1 or Batch / Entry/ Category/ List G Supp Seq/C Line No / C Transaction / C Document//C Credit/C Debit/C H Seq Name.
    Example:
    1) Batch / Entry/ Category/ List G Supp Seq                    /C Credit/C Debit/C H Seq Name                    
    2)          G Supp Seq
    3) List G Audit
    4) G Audit     
    5)     C Line No / C Transaction / C Document
    Kindly help how to generate the output without the line no 2,3,4.
    Regards,
    Sushant

    Sushant,
    you can try to design the RTF by Regrouping the XML data based on your requirement then you may get proper order.
    Please see the Regrouping XML concept in the user guide.
    Regards,
    Prasad Raju

  • I want to copy video, cutaways and audio combined and use in another project. So far I can only copy the video clip or one of the other elements at a time. How do I group all of them?

    I want to group my  video clip with its audio and cutaway clips so that I can copy the segment and move it to another project. So far I can only move one element at a time. How can I group all the elements?

    You can select multiple objects in the timeline in the usual Mac way - hold down the shift key while you click on the objects then copy, select other project, position playhead where you want to insert then paste.
    Geoff.

  • How to find out the calling point of a Badi

    Hi Experts,
    Say one Badi is getting called in a particular screen of a transaction.
    Can anyone please guide me how to find out the calling point for that Badi.
    I checked for transaction CC31 screen 2000, method IF_EX_ECM_EXIT~OMR_CHECK_01
    is getting called.
    But I could not find the calling point.
    Please help.
    Thanks,
    Sonali.

    Go in to the perticular method, and click on where used list.That may help.
    Or get into the method in debugging, and press F7. That will take you to the calling point.

  • How to set group contacts in nokia asha 305

    how to  set group contacts  in nokia asha 305....thank u......

    Can Some one Tell same group contact creation for ASHA 308 too?

  • HOW CAN I GROUP AND DELETE TEXT MESSAGES IN BULK

    HOW CAN I GROUP AND DELETE TEXT MESSAGES IN BULK

    message - edit - select each text message - delete.
    that is the only method to delete message on your iphone.

  • I can't seem to get rid of OR use Adobe Reader after I let it into Safari 7.  How do I get to the point where Reader is not my preferred anything, but can still be used if Preview won't open something?

    I can't seem to get rid of OR use Adobe Reader after I let it into Safari 7.  How do I get to the point where Reader is not my preferred anything, but can still be used if Preview won't open something?

    Back up all data before making any changes. Please take each of the following steps until the problem is resolved.
    Step 1
    If Adobe Reader or Acrobat is installed, and the problem is just that you can't print or save PDF's displayed in Safari, you may be able to do so by moving the cursor to the the bottom edge of the page, somewhere near the middle. A black toolbar should appear under the cursor. Click the printer or disk icon.
    Step 2
    There should be a setting in its preferences of the Adobe application such as Display PDF in Browser. I don't use those applications myself, so I can't be more precise. Deselect that setting, if it's selected.
    Step 3
    If you get a message such as ""Adobe Reader blocked for this website," then from the Safari menu bar, select
              Safari ▹ Preferences... ▹ Security
    and check the box marked
              Allow Plug-ins
    Then click
              Manage Website Settings...
    and make any required changes to the security settings for the Adobe PDF plugin.
    Step 4
    Triple-click anywhere in the line of text below on this page to select it, the copy the selected text to the Clipboard by pressing the key combination command-C:
    /Library/Internet Plug-ins
    In the Finder, select
              Go ▹ Go to Folder
    from the menu bar, or press the key combination shift-command-G. Paste into the text box that opens by pressing command-V, then press return.
    From the folder that opens, move to the Trash any items that have "Adobe" or “PDF” in the name. You may be prompted for your login password. Then quit and relaunch Safari.
    Step 5
    The "Silverlight" web plugin distributed by Microsoft can interfere with PDF display in Safari, so you may need to remove it, if it's present. The same goes for a plugin called "iGetter," and perhaps others—I don't have a complete list. Don't remove Silverlight if you use the "Netflix" video-streaming service.
    Step 6
    Do as in Step 4 with this line:
    ~/Library/Internet Plug-ins
    If you don’t like the results of this procedure, restore the items from the backup you made before you started. Relaunch Safari.

Maybe you are looking for

  • Payment document list of value is empty

    In R12.0.4,when i log in into account payable super user->payment entry:payments->and when trying to choose a value in payment document an error:"FRM-41830:List of Values contains no entries"

  • Can you only put one Field in a mailDoc subject line?

    Hi folks, Have set up a mailDoc submit button using the tutorial that has been linked to in a few different discussions on here (the "Benny" one, you know what I mean?). Anyway, trying to set up a custom subject line, all good until I try to pull inf

  • Not able to see more than one period in DRP Planning Book

    Hi Where do we set the no of periods( days, weeks etc) that should be visbile in the DRP planning book in the SAP SPP. Also we are getting invalid periodicity in this planning book, when we select one of the available timebucked profile ids. Any clue

  • I can't open iphoto v9.3.2

    I can't open iphoto v9.3.2 It says your photo library is either in use by another application or has become unreadable. I have an iMac 21.5-inch Mid 2011, OS X 10.8. This is a new brand iMac that I purchased from BestBuy a month ago. I have tried pre

  • How to display search results in a table or in different columns

    Hi              How can i display search results in multiple columns or in a table so that the user can sort the results based on a particular property displayed in the search results. Thanks in advance Regards, Vidya