Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Lipko last won the day on April 3

Lipko had the most liked content!

1 Follower

About Lipko

  • Birthday 06/13/1985

Profile Information

  • Gender
  • Location

LabVIEW Information

  • Version
    LabVIEW 2015
  • Since

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Lipko's Achievements


Contributor (5/14)

  • Dedicated Rare
  • Reacting Well Rare
  • Conversation Starter Rare
  • First Post Rare
  • Collaborator Rare

Recent Badges



  1. I managed to solve it with some thinkering. I used 3rd order Bézier curves to interpolate between neighbour points. The tangents in the points (which are the other two control points of the Bézier curve besides the end points) is calculated by the angle bisector of the two adjacent segments. The length of these control tangents are calculated from the length of the corresponding segment multiplied by a fix value ("strength"). Though it could be easily changed to have a separate strength value for each point. Implemented closed and open version of the curve. Note, that for some reason I havent looked into yet, the curve or some sections of it can suddenly snap into a seemingly opposite winding after a certain amount of deformity. The curve looks okay for my needs so I don't think I will fix that any time soon. Attached a small quick demo. curve_through_points_demo.vi The Bézier functio is also my "work" (copied the code into a formula node), I'm surprised that these basic geometry stuff are not implemented in Labview. by default 2D_curve_through_points.vi 2D_3rd_order_Bezier_curve.vi 2D_ccw_angle.vi 2D_3rd_order_Bezier_point.vi
  2. I solved it by having multiple dialogs, so the user can only change a single thing or a few closely related things at once. There is still a god dialog but users find it hard to "feel" that all its elements will be applied on all selected "sections". In my usecase the settings mean properties of a section in a sequence (an array of clusters is a sequence and the dialog shows all elements of that cluster or section). In most cases only a few things will be the same in multiple sections, for example the comment, or section length, but the god dialog was a hystorical thing (the only way to set up a section in the first release) that I left there because many users are so used to it. I never got back to the problem, the best idea I could come up with is to change the background of an element if it was changed by the user, but didn't implement it. I still feel the multiple single-property dialogs are more intuitive and also quite simple to implement, and maybe it would be the best just to get rid of the god dialog. But this doesn't apply to the original post, I don't fully understand that usecase.
  3. Sorry to chime in, maybe I had a similar problem some time ago and I'm interested in the GUI design part of the problem. So basically you have a config window and you only want to apply changes to elements that were changed by the user? And the changes should affect more things (all changed cluster elements in an array of clusters)? How the users know what was changed besides their memory? How would a user apply an elements current (default) value to the other clusters apart from changing the value than changing back to the default? If I'm totally off, then sorry. I kind of gave up on this feature because I coudn't think of a proper solution that would be evident to use for the users apart from the two workarounds I mentioned or having a "changed?" or "apply value?" bool control next to every single control.
  4. Hi all! I want to create a smooth curve through given points in 2D and I'm having trouble with using the built in interpolation functions in Labview. I need something like this: I found this thread from more than 10 years ago and I can't find the interpolation vi it's using, and I don't really understand what the other similar vis are doing. It's only for a drawing application so it's not really important in details how the interpolation works (nurbs/bézier/whatever), it only needs to look okay. Thanks for any hints in advance!
  5. I don't fully understand your post. Does the problem also occur if you don't have the front panel of "Three Button Dialog.vi" oneped? Does it occur if only the caller vi is open? I often make dialogs from a "promt user input" express vi by opening it's front panel thus converting it. If I forget to close its front panel, all sorts of similar race condition things occur if I run the main vi. Never cared enough to have this sorted out though...
  6. Whenever I had to rewrite stuff and restarted from scratch, the result (GUI, bugs, code quality) was much better. Okay, I'm learning continuously and I jump into real projects when I have the absolute minimum required language knowledge, so even in the course of one project my coding style can change a lot, so I have some really bad code mixing methods like crazy (LV small data storage example in non-speed-critical aplications: local varaibles (I dropped that very early)->shift registers->hidden indicators). In my uneducated opinion the biggest obstackle of making clean code and fine architecture (thus less bugs, better improvability) is that it's impossible to fully flesh out the specifications when starting a new project (and refractoring can be a real pain). On the other hand if you port (especially if you are also an active user of the program), then you have a solid specification and a working "prototype" (the original project) mapped out to the last detail. Of course, you have to be ready with a very detailed test plan.
  7. Hi All! Little background: I was searching for an implementation (or at least a full explanation) of constructing an ellipse from 5 points. 5 points exactly define an ellipse, so it's not a data fitting problem. To my surprise, I couldn't find any solutions that can be used as it is or any full explanations. All I could find was pointers into the proper direction (matrix math) but my math is so rusty that I could not implement anything from those information ("just calculate the determinant with some symbolic math library or do it on paper haha and goodness comes"). I was a bit upset because I wasn't doing homework, I actually needed that function. Anyhow, after finding a small hint in one of the threads, I could go through the thing and implementet the algorithm. Maybe it will be useful for anyone who is looking for exactly that thing. It's not that nice, not optimised, I guess many of the math could be optimized/simplified, but it's working at least. Precision: I'm not sure. For my needs, it's precise enough, I'm not an expert in condition of the matrix or other calculations. I think the names are self explaining, but If you have questions, don't hesitate to ask. The formulas and the thread I found most usable are included on the block diagram. Input: array of coordinates (x,y in a cluster). Output: ellipse parameters: center, two radii and angle of the first axis the coordinates of the axis endpoints the five t parameter values of the input points (t parameter for the parametric equation of the ellipse), so for example you can draw ellipse arc between two of the points If the ellipse cannot be constructed, it results in some NaNs here and there... No extra checks added 2 subvis are also implemented, but maybe they are already in the LV base package and just missed them: parametric equation for arbitrary ellipses (or polar equation, my math is that rusty I can't even express properly what I mean) CCW angle between two vectors (result in 0....2 PI range), it's used to calculate the t parameters for the points. This is where I feel there's some redundancy or redundant trigonometric calculations. Thank's for any feedback! EDIT: I added a small demo program. You can move the 5 points on a graph. 2D_ellipse_parametric_equation.vi 2D_ellipse_from_5pts.vi 2D_ccw_angle.vi Ellipse_Demo.vi
  8. Why don't you use a control instead? You can write its contents from the program through value property.
  9. I haven't looked into the thread in detail, but for debouncing I usually use an "off delay". It works with a one-cycle spike in the raw measured data too. I haven't implemented it in Labview, I use these off-delay blocks in Siemens Logosoft (PLC).
  10. Maybe I misunderstood, and what you posted is just an example. Anyway, that example shows that the different calculations and sub Vis are run serially, because of data dependency, so I would "streamline" the VIs and use "in place element" structures if possible (and of course for loops with auto-indexing/deindexing). In your example there would be no large data copies at all: "Calc DZPV" (modified so data in passes through) then "Cal S and wa" (modified so data in passes through) then "in place element" structure to index the data, and inside the structure anotheer "in place element" structure to adress the cluster elements you want to change. If the subVIs can be inlined theres no data copy of the whole data in array. Maybe you don't even have to inline the subVIs because the optimizer can optimize away the data copies when passing data to the subVIs, I have no knowledge about these stuff.
  11. If you are not a programmer, then I would not jump into OOP. I'm not a real programmer myself either, but did programming for years, did some medium complex data aquisition and processing applications but never dared to try OOP. Anyways, I don't know "how big of a data package to carry on the shift register on every iteration is acceptable", I think you are okay with shift registers, but you have to be careful about the amount whatever way you do it. For example save new data to a file (append) regularly and throw away what you saved (or down sample, or whatever you need). For copying data a lot, I'm not sure, the code looks rather messy. I don't know the full picture, but based on the snippet you posted, maybe you should separate raw data from calculated data (because raw data is not modified by your snippet, only read). You could also try to "streamline" your VIs. I don't know the proper term, when the data on the input terminal comes out unaffected on the output terminal (like a reference). This will ruin parallelization of the calculations but can save a few copies (if the VIs can be inlined).
  12. Hi all, Are you aware of any Labveiw module (non 3rd party) that is affeced by the Log4j issue? Web services, or other? Out head IT is in panic, we don't have much time to collect the softwares that may be affected, sorry for not looking up it myself. Thanks in advance!
  13. Another idea is to combine regular graphs with pictures via the plotimages property of the graph. So the lines are graps and the dots are pictures.
  14. Graphs + plotimages of graphs also has pretty good contomization potential. Horizontal fill: A failed project with some flat controls, all my design, though I don't quite like it, I'm not good at visual design. Note, that it's meant to be a tablet application, but it has no exit button The room is a 2D picture and slots can be selected by clicking.
  15. I use splitters all the time, but making a tab control responsive, I failed miserably with that. Positioning and grouping of widgets on one page screws widgets on another one... Especially if there are graphs which are clumps of widgets by themselves. A test sequence editor (this has no problems with responsivity) which has a ribbon bar and some other splitters. The comment of some selected sectios are being edited at the moment (double click on the time line invokes a positioned text control)
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.