LabVIEW Idea Exchange

Community Browser
cancel
Showing results for 
Search instead for 
Did you mean: 
Post an idea

When a 1 Dimensional array of any type is showing only a single element, LabVIEW forces a horizontal scrollbar. I couldn't find any documentation or reasoning behind it. It's really annoying and ruins UI design that Vertical is the normal scrolling direction for just about everything else ever and LV messes that up for some seemingly arbitrary reason.

I very commonly use the Ctrl-Drag shortcut across empty block diagram space to create new space on the diagram. When I do this, it is almost ALWAYS intended to just create space in one dimension, horizontally or vertically. If you dare try to create space in both directions at once, this invariably disrupts the arrangement of the diagram. You end up with objects that were nicely aligned being a few pixels off, or worse.

 

To create space in one direction, I have to very carefully make sure when I Ctrl-Drag that I stay exactly in a straight line, making the process tedious and error-prone. I often have to undo the operation and start over because I'm one pixel off. (One pixel is a lot in LabVIEW!)

 

It would be very very beneficial to have a similar shortcut that only operates in one direction, or to be able to specify in Tools>>Options to modify the existing behavior, because the default is never what I want.

The web format wars are over, and the plug-ins have lost.  Microsoft has relented and will support HTML5 and SVG in IE9, and has admitted that Silverlight's role will change to that of a Windows phone development platform.  Silverlight support on iPhone/iPad/Andoid/Chrome OS will likely never be fully formed, and will wither on the vine. 

 

New javascript/ecmascript engines that are much faster, and make use of multicore environments have arrived and work well.  The addiition of WebSockets means your browser can now open a tcp/ip socket.  I have done this, as I am sure others have, as well.  Drop an old-fashioned tcp/ip listener into your diagram, return the WebSocket handshake, and presto: you can now stream data directly to/from your browser.  WebSockets provides an "onmessage" event handler function which you can define.  Combine this with the SVG DOM, and you can transform SVG elements until your heart is content.  Two-way streaming of data between your browser and plain-old tcp/ip?  Goodbye web services, we knew you well. Good riddance, plugins.

 

I have built my own SVG UI objects using Inkscape (free), and wrote a script (notepad/Inkscape script editor, also free) to handle WebSockets communication without a gateway.  I have a simple LV class built on the TCP/IP functions that will stream data to/from a browser which is pointing to an SVG "webpanel" that I also built using Inkscape.  So far I have a simple waveform graph, buttons, LED's, progress bars, etc.  I have tested my Inkscape webpanels in Firefox 4.0 Beta and Google Chrome 9 and it works like a champ, and is very fast.  The old-fashioned LV webserver will serve up SVG files with the addition of a mime type. 

 

Screenshot_5.png

 

 

An alternative to SVG is the HTML5 <canvas> tag, which allows the rendering of graphics drawn using java/ecma script.  There is a free-for-personal-use script library called RGraph Library that you can download with lots of example code.  Here is RGraph/LabVIEW in action in Chrome 9:

 

 

Screenshot_7.png

 

 

So what is my idea?  

 

0. Ditch Silverlight.

 

1. Convert all of the nice-looking UI panel objects in the Web UI Builder from Microsoft XAML to SVG and distribute them with the  LabVIEW professional development license.  I am programmer first, and I admit my web panel objects don't look too good.

 

2. Design a script library for handling WebSockets communcation (or add native support for WebSockets to the Shared Variable Engine) and manipulating/updating the SVG UI objects from streamed WebSockets data.  Make this library open source.

 

3. Create a standard open protocol for streaming LabVIEW data that sits on top of WebSockets and is free and open.

 

4. Publish documentation for the SVG UI elements so users and thrid parties can create new UI objects.  Make use of the creativity of the community at large!

 

5. Modernize the Web Publishing Tool so that it will optionally output an HTML5 and/or SVG document that accepts streaming I/O from WebSockets.  The user could choose from compatible SVG elements to use in place of front panel elements on the VI being published.

 

6. Create a Web UI SVG element exchange for registered NI users to upload/download elements for free.

 

7.  Work toward the long term goal of adding SVG Import/Export to the control editor (with better editing tools), or make the CTL format of custom controls SVG/XML.

 

I can't count the number of times I've seen this dialog :

 

remove.png

 

Of course I want to continue, that's why I right-clicked the structure and chose Remove [Structure]!  This dialog must be a holdover from pre-Undo days.  Do we pop-up a dialog when you select your whole diagram and press <Delete>?  What about when you press Ctrl-B?  These actions have the potential to remove just as much diagram content as Remove [Structure].

 

Please get rid of this dialog, and just let us Undo the operation if we need to, just like we do all the other potentially destructive diagram edit operations.

It would be nice if the Strip Path function had a recursive option rather than having to string Strip Paths together or use an external loop.

 

 eg change from this:

strip_path.png

 

 

to this:

 

recursive_strip.png

 

 

regards

Ray

Download All

The current implementation of Control References on the Block Diagram could be improved. This Idea was first conceived over a year ago in a discussion on Smaller Static Refs, in the comments here.

 

21816iB89689857FFA076E

Consider the following advantages:

 

  1. It's generally bad style to have Ctl Refs with hidden labels. New implementation always demonstrates the label to comply with inherent self-documentation of G (just like a Local)
  2. Smaller footprint combined with better visual distinction between Ctl Refs doubly improves information density
  3. In general, the Control Class does not need to be shown at all times on the BD. Rather, it could be shown in Context Help (currently, CH is not useful when hovering over Controls Refs, but this is another topic), or determined by browsing Properties/Methods.
  4. Eliminates the undesirable ability to rename/delete a Control Ref Label such that it no longer matches the Terminal Label.
  5. Creates a better distinction between a Control Ref and a Control Class Constant (NULL Ref). The color of the Static Refs denote a "live link" with a control, while the muted tones of a Class Constant indicate no such link (NULL)
  6. Complements the new LV2010 Local Variable upgrade (see image), yet remains distinct by having a different glyph, different background colors, and no directionality arrow
In summary, a Control Reference revamp could reduce the footprint, increase readability, and prevent obfuscation that decouples the Static Control Ref from the Control.

Unlike the scales of numeric controls, graph scales don't support text labels (wouldn't that be cool! :smileywink: ) *(see footnote)

 

It could be handled very similar to the way text labels are handled for the scales of numeric controls, so most of the code is already there.

 

This would come in very handy for e.g. histograms or bar graphs, where each bar needs a text label, or for cases where we have arbitrary units.

 

Examples for integer scales: 

  • "January", "February", ...
  • "LabVIEW users", "CVI Users" ...
  • "Europe", "Asia", ...

 

Examples for floating point scales (x, or y):

  • "Too cold", "cold", "warm", "hot", "too hot"...
  • "small", "medium", "large", ...
  • "min", "max"...
  • "high frequrency", "low frequency"...

 

*My quote from this old discussion . See also Ben's example further down.

 

 

Problem:

I faced to delete multiple elements form the array which is having 20 steps.

 

solution:

if able to select multiple elements by holding the shift key we can delete selected items 1 time and can insert 1 time.

 

 

Array element.png

 

 

When I use an event structure, the case I use about 99% of the time is "Value Changed".  This is a bit of a pain since it is alphabetically at the bottom of the list, so I have to scroll down the list every time to select the event.

 

Since I suspect most people use this event the most, I would like it to be the default value when defining an event.  This way, I could just select the control and be on my way!

 

Bruce

Almost every VI and Function in LabVIEW that uses error handling uses the 4-2-2-4 connector pane and has the error terminals perfectly line up.  However the Variant to data function (and perhaps others) has the terminals a few pixels up forcing bends in wire or the functions not to be lined up.  I think all VIs should be standardized to help make nicer looking block diagrams.
 
errorterm.jpg 

As mentioned here, "I lost count of the times where I have a cluster or enum constant that I want to make into a type def and have to first change it into a control, switch to the FP, and then select customize" - it'd be great to be able to right-click on a constand (like a cluster) on the block diagram and select Advanced -> Make Type Def (of course, you'd need to save the type def somewhere).

(Inspired by this discussion)

 

The Index & Bundle Cluster Array function currently discards any labels of the input data. I think it would be more useful if it would try to retain the names (i.e. copy the original array labels (if available) to the element labels of the output).

 

The picture illustrates the idea. On the left we see the current behavior and on the right what we would get after this idea is implemented.

 

The connectors hi(x) & lo(x) on the primitives for "Split Number" & "Join Numbers" do not line up with multi-connector primitives (Index Array, Build Array, Format, Format into String, Scan from String, etc). See below:

 

 Idea Exchange - JoinSplit Number Alignment.jpg

How many times have you found yourself entering items in an array, typing merrily along, only to have to switch back to a mouse to click on the next element and type it it.  I suggest that Alt-Enter complete the current entry and move to the next array element.

 

This idea proposed using the Tab key, which collides with manual tool changes.  Shift-Enter was also proposed, but it collides with the ability to move to a new line in strings and to add another element to a enum/ring.

 

I propose using Alt-Enter to advance to the next array element:

AltEnter.png

Compared to plain terminals and references (for example), local and global variables are too big. They waste way too much space on a bulky frame.

 

In my applications, local variables often come in large groups (e.g. if I need to write values from a file to a group of controls inside a case to load a different default set for the controls) and I tend to partially overlap the locals to save diagram space. I would prefer a more economical design, e.g. as shown on the right.

 

Globals could have that little globe (not shown).

 

I am not sure if we really need to encode read vs. write in the frame thickness like for terminals, but it could easily be done by making the frame of the "write" versions thinner (same outer dimensions). I think the little triangle is enough to show the direction.

 

Message Edited by altenbach on 08-15-2009 09:31 AM

Provide a growable merge errors.

 

Replace This:

MergeError.png

By This:

 

MergeErrorGrowable.png

 

Note : I have already done this with XNODE. But since XNODE are not available, I can't use it in my project.

I am probably not alone in my trepidation in using the Block Diagram Cleanup tool, but I can not help but recognize its power to be a tremendous help.   We already have tools (Grids, Align and Distribute, Ctrl-T QD shortcut, etc.) to get Nodes and terminals positioned nicely.  Even with this idea in Beta, wiring can still be a tedious chore.  The BDCT does a reasonable job routing wires, but also moves things around including control/indicator labels, and is often unsatisfying.

 

What I want is to be able to lay out the BD, wire things while only worrying about beginning and end, and then have the BDCT only adjust the wire routing.

 

Despite numerous RCF shortcuts and new behavior in LV10, this is not the same as cleaning wiresThe solution is not to methodically select only wires and Ctrl+U.  The reason:  the process should be a global optimization, not a serial process where each wire route is chosen based on the current state of the BD.  The BDCT uses a global optimization, 'Cleaning wires' does not.  What I want is the optimization of the BDCT limited to only wires, leave my nodes and terminals and labels alone!

 

For example see the following:

 

RouteWires.PNG

The venerable Array Size function should just resize itself for the number of dimensions on the input array and have each dimension's size emitted with a separate scalar output.

It has been mentioned before (here, and here, and here) that there are some problems with the connector pane. Let me add my suggestions. Does the image below ring a bell? WHAT GOOD ARE ALL THOSE CONNECTOR PANES FOR?

 

WhatPaneAreYou.png

 

I suggest the following view:

 

ProposedConnectorPane.png

 

The "Define New Connector Pane" will allow you to contrive custom panes to suit your fancy. It could have templates of the current connector pane collection. Below is a pane you could create with the new editor (I would suggest combining the Icon Editor with the Connector Pane Editor!!!!). The only constraints that need to be imposed on a connector is that it is rectangular and touches the edge of the icon. Otherwise, you can make it however big you want it (for all the myopics out there like me!), and wherever you want it.

 

DefineNewConnectorPane.png

 

Two new concepts are introduced above: empty space, and the ability to land a wire NOT directly in the center of the connector. Placing the landing as close to the center as possible would alleviate the current problem of the "gapped wire" that does not touch slim icons (look at gap on top input and the output).

ConnectorPaneProblem.png

Right now, if you happen to use the right colors, LabVIEW will change the text color on a Boolean.  But, if you don't pick the right colors, LabVIEW keeps a single text color.

 

Boolean Text.png

 

 

This would probably be fine IF LabVIEW allowed you to have multiple text colors, but you can only choose one:

 

Boolean Properties.png

 

But, as you can see, LV only supports one text color.  I propose that LV support two text colors (ON and OFF).  Obviously LabVIEW has the ability to change the color already since it will do it in the right circumstances, but it would be nice if LV gave us control over it.

 

In my use case at the moment, I am trying to make a custom illuminated button which the text on the button should be grey went off, and yellow when on.