I would like to know which algorithm use Femap to calculate mesh size positions by Mesh Control / Size Along Curve command. I found that in many case when I set Equal length mesh sizing, in fact mesh sizing isn't equal. There are in the attached model this values by following formulas (by all curve the "dist" value must be the same):
Curve ID19 (quarter circle):
i=1 dist=0,1948 nBias=-0,0154 nGeomBias=0,9267
i=2 dist=0,19 nBias=-0,0048 nGeomBias=0,9754
i=3 dist=0,1948 nBias=0,0048 nGeomBias=1,0252
i=4 dist=0,2102 nBias=0,0154 nGeomBias=1,0791
Curve ID21 (half circle):
i=1 dist=0,1169 nBias=-0,0329 nGeomBias=0,7802
i=2 dist=0,0992 nBias=-0,0178 nGeomBias=0,848
i=3 dist=0,0902 nBias=-0,0089 nGeomBias=0,9098
i=4 dist=0,0875 nBias=-0,0027 nGeomBias=0,9696
i=5 dist=0,0902 nBias=0,0027 nGeomBias=1,0313
i=6 dist=0,0992 nBias=0,0089 nGeomBias=1,0992
i=7 dist=0,117 nBias=0,0178 nGeomBias=1,1792
i=8 dist=0,1499 nBias=0,0329 nGeomBias=1,2817
Curve ID10 (straight line):
i=1 dist=0,25 nBias=0 nGeomBias=1
i=2 dist=0,25 nBias=0 nGeomBias=1
i=3 dist=0,25 nBias=0 nGeomBias=1
It's interesting thing is that, when I mesh arcs (generate nodes only), the really distance between nodes will be same, and the positions of the nodes will in fact not match with mesh size positions.
I need to know this algorithm, because I wrote an API to copy mesh size (Mesh Size Along Curve - Match to Curve on Solid). Here I must recognize the mesh size settings, because Femap change mesh size now below 325 elements to custom mesh size, and now it isn't any properties or methods in Femap API to read this mesh size parameters of curves (number of elements; equal node spacing, bias or geometry bias; bias factor; length spacing or parametric spacing, small elements at start of curve, at end, at center or at both ends). All this parameters must I recognize now in my macro.
My macro is working now, but all time I recognize a biased curve, I must ask a question, that current curve is biased or not.
When you wish, I can send my macro too.
here is my macro Mesh Size Along Curve - Match to Curve on Solid. It use an .ini file, in my case "D:\Home\Femap\KadP_Femap.ini" (filename with path written in the procedure InitializeVariables, can be modified). This variables are:
CustomSizeLimet - this is the number of element on curve, under this value Femap modify mesh size to custom mesh size. This value in current Femap v11.2 version is 325.
Skip_NonCoincident - when True, API skip curves with noncoincident endpoints.
Tolerance - this is the tolerance to checking the endpoints of the curves.
First of all you must select the master solid (master curve must be on this solid), after that the muster curve (from where you want to copy mesh size) and one or more curves (where you want to copy mesh size). After copying mesh size you can select again master curve and other curve(s) until you click Cancel.
I haven't had time to fully review your API, however here is some additional information that might be helpful.
* Ultimately mesh sizes are always defined in the parametric coordinate of the curves/surfaces. This results in much better performance during meshing. If you choose length-based sizing, FEMAP simply computes the desired number of parametric locations along the curves that are equidistant from each other. If you are looking in the Custom Mesh size dialog, or listing a curve, the mesh locations you see are always parameter locations, not distances along the curve. Depending on the type of curve, the parametric coordinates may also be uniformly spaced. For example, normally straight lines and arcs have parameterizations that result in parametric and length spacing being the same thing. For any type of NURB/spline curve however this is normally not the case... and in some cases the parametric coordinates can be dramatically different. Be aware however, simply because a curve looks like a line or arc or circle, the mathematical representation may not be and its parameter space can still be "non-equal length".
* There are a number of API methods on the Curve object that can help in dealing with the distinctions between parametric coordinates and equal length.
- XYZtoParam( ) will take a coordinate location and give you back the parametric location along the curve -- might be helpful if you are dealing with an already meshed curve where you have nodal locations
- ParamAtLength( ) will return the parametric location at a distance/curve length along a curve. So if you know you want to divide a curve at some fixed length interval, this can give you the correct parameter locations
- PartialLength( ) returns the curve length between two parametic locations. Again possibly helpful if you are dealing with already specified parametric mesh locations and need to find the curve length between them. For a custom mesh size, checking these could let you know if there is a bias or constant length spacing.