OpenVSP 3.26.0 Released

Happy New OpenVSP! A new version for the New Year.

This version is long overdue. First expected to contain a small number of minor features — the fixes are what really stand out in this release. 2022 looks like a good year for OpenVSP, expect more frequent releases on a variety of fronts.

There will be an OpenVSP overview paper presented (virtually) at SciTech, unfortunately I will not be there in person. Have a safe conference and look for the new paper.

There are no significant VSPAERO updates here — but I know Dave has some in the pipeline that we will try to get out soon.

There are a few significant geometry changes.

First, XSec Curves (think super-ellipse, rounded rectangle, etc) can now be parameterized by any combination of Width, Height, Area, and Height/Width ratio (pick two). It takes some magic under the hood, but it should ‘just work’ for the user. Next time you’re designing an internal flow passage, set your area and adjust other parameters as needed.

Second, Propeller section curves can now be lofted onto the cylindrical surface they are on instead of a flat plane. This will be useful for anyone designing ducted propulsors with finite tip-gaps, or if you think a curved foil will better match your blade-element theory design.

Third, Rounded Rectangle corner rounding has been fixed for non-orthogonal corners. It astounds me that nobody has noticed and complained about this before — it has been broken for years. Sometimes I wonder if anybody uses this stuff. Tap tap tap… Is this mic on? The radii are correct now and the corners should be much more circular in extreme cases.

There are a few analysis improvements – open meshes are allowed for planar slice, and single slicing is now allowed (useful for FitModel workflows).

Two changes should greatly improve the performance of the GUI.

First, the Faster Update changes from a few versions back were extended to prevent a full Update when changing the active XSec or Airfoil (clicking arrows at the top of the XSec, Skin, Modify, Airfoil, or Blend tabs). This should be nearly instant now.

Second, the GUI update was doing something foolish that really slowed things down in some cases (mostly complex propellers). General interaction should be much faster now.

One particular bug fought dirty and made it personal. I feel like it is one of the most challenging bugs I’ve ever fixed. I’m fairly sure that it only affected me on my development machine — but it may have been the source of random seeming problems for other users too. The symptoms looked like memory corruption (it wasn’t). You may know that OpenVSP uses unique identifier strings extensively. The bug caused us to sometimes generate non-unique identifiers — this is bad. One of the libraries we use was resetting the random number generator seed without our knowledge. Sometimes it would get reset to the start of the identical sequence of random numbers we were using. Other times it would start on a fresh sequence. When reset to the same sequence, collisions would occur. Changing to a new RNG with a private seed cleared this right up.

Chasing this bug provided motivation to perform lots of cleanups across the code base. While none were critical or likely substantial, they represent good progress to prevent future problems and improve the signal to noise ratio when using various diagnostic tools.

Justin Gravett helped out with this release in a number of ways. Announcement of his departure in the last release was slightly premature. Jason Welstead make a handful of improvements to the CHARM automation framework. Luz Paz corrected typos throughout the source code. Julius Quitter and anwarmou both contributed tweaks to how VSPAERO presents results or how OpenVSP reads them in. Thanks also to everyone who reported bugs and made other suggestions.

There are lots more updates and fixes in here, but the performance improvements and bug fixes should provide enough motivation for everyone to update.


  • Area parameterization of 2D body-type curves
  • Cylindrical projection of propeller sections
  • Allow slicing of open meshes
  • Allow planar slicing to do just one slice
  • Increase sig-figs in Prop Edit Curve GUI
  • Add Approximate All button for Prop Curves
  • Add Reset thickness button for Prop Curves
  • Improve behavior for deleted variables with Advanced Links
  • Optimize ScreenBase update — much faster now
  • Improvements to CHARM Automation from Jason Welstead
  • Add missing Body of Revolution API Calls
  • Add GetVehicleID() to API
  • Draw arrow icons for symmetrical props and disk-mode props
  • Allow Wedge airfoils to be inverted (GUI addition)
  • Scroll wheel to zoom
  • Calculate T/C for CST and VKT airfoils
  • Remove remnants of v2 drag TSV file output from CompGeom

Bug Fixes:

  • Fix RNG problem that could result in ID collisions
  • Don’t trigger full update when changing active XSec or Airfoil
  • Fix rounded rectangle for non-orthogonal corners
  • Improve accuracy of circle approximations
  • Fix crash in FEA GUI when attempting to delete OML skin
  • Make 2D View screen work with Body of Revolution
  • Call ToBinaryCubic before interpolating airfoils, prevents crashes
  • Limit ToBinaryCubic recursion level
  • Improved support for reversed props and disks


  • Make curve editing GUI code common across users
  • Various typos in source thanks to Luz Paz
  • Move Util.cpp/h to VspUtil.cpp/h to avoid name collisions
  • Myriad general source cleanups suggested by static analysis and Valgrind
  • Make sure all Parms have a non-null ParmContainer
  • Move non-Vehicle Parms registered to Vehicle to be Vehicle Parms
  • Make LightMgr proper singleton, eliminate VehicleGuiDraw

Comments are closed.