A software system has been developed that can analyze three-dimensional (3D) human body scan data. A neutral 3D model data structure as well as a data conversion software were designed to input and output various 3D data. An integrated development environment (IDE) was made for interactive as well as intuitive measurement process. Users can define custom landmarks and measurement items using a simple script language without having to modify the software. In addition to the general 3D geometry analysis functions, some special functions have also been developed to find some important landmarks such as crotch or axilla points accurately. Measured results were visualized in many ways to facilitate the analysis process.
1. Script Editor: This area is where you edit the script language.
2. Compiler Message: This area displays various execution and compile messages.
3. 2D/3D View: Human body model
is displayed in 3D/various cross-section is displayed in 2D.
4. Section/Landmark/Size List: This is the area where various cross-section/landmark/size measurement result is displayed as a list after executing
the script.
When the script execution is normally completed, the human body model, the landmark, and the measurement path are displayed in a 3D shape, and the measured section/landmark/size is provided as a list. Various functions are visually provided for landmark, size measurement and analysis.
Command | Parameter | Explanation |
---|---|---|
// | Single line comment processing. | |
Exit | Stop at current location. | |
Execute | file_name | Run the script file. |
Set | variable,equation | Assign an equation to a variable. |
Command | Parameter | Explanation |
---|---|---|
Centering | X or YZ or XYZ etc. | Move the center of the model to the center of the coordinate axis. |
Move | x,y,z(value) | Move the model by the value along the x,y,z axis. |
RotateX/Y/Z | angle(degree) | Rotate model by angle about X/Y/Z axis. |
Scale | ratio | Zoom in or out of model by ratio. |
GetSize | After measuring the size of the model, save it in Width, Height, Depth, Top, Bottom internal variables. | |
GetDistance | variable,p1,p2 | Calculate the distance between p1 and p2, and save the result in a variable |
point.x/y/z | Refer to x/y/z coordinates of the point. | |
SetHeightRange | variable,min ratio, max ratio |
Specify the y-axis range (Height * minimum ratio ~ Height * maximum ratio) based on height. |
variable.min/max | Refer to min/max value of variable specified by range | |
SetRegion | region_name,center1,normal_vector1, center2,normal_vector2,... |
Set Region with intersection of upper planes defined by center and normal vector. |
SetSearchRange | range_name,upper_point,lower_point FULL |
Specify a hexahedral search range between two points. FULL specifies all range. |
UnionRegion | region_name,region1,region2,... | Specify a new region with the union of several regions. |
DeleteRegion | region1,region2,... | Delete the specified region. |
RemoveRegion | region1,region2,... | Actually remove the element in the specified region. |
SetSearchRegion | region1,region2,... | Limit search range to specified region. |
SetPoint | point_name,[x y z] point_name,point |
Create point in x,y,z coordinates(recognized as a landmark if * is prefixed to the point_name). |
SetPointDivide | point_name,p1,p2,m,n | Create a point internally dividing between two points by m:n. |
GetDirection | point_name,p1,p2 | Create a point with the coordinates of the direction vector from p1 to p2 |
SetPointInverse | point_name,point | Create a new point with the opposite vector of points. |
RotatePoint | point,x_angle,y_angle,z_angle | Rotate the specified point by an angle relative to the x,y,z axes. |
MovePoint | point,dx,dy,dz | Moves the specified point by dx, dy, dz. |
GetNormal | point_name,point,X/Y/Z | Create a new point with the specified point rotated 90 degrees counterclockwise with relative to the X/Y/Z axis. |
GetSection | section_name,point,normal_vector | Create a cross section where the plane consisting of point and normal vector intersects the model. |
GetSectionRegion | section_name,point,normal_vector, region |
Create a cross section where the plane consisting of point and normal vector intersects the model within the specified region. |
GetSection3P | section_name,p1,p2,p3 | Create a cross section where the plane consisting of 3 points intersects the model. |
section.width/height/girth | Refer to the width/height/girth of the section. | |
SetPlane | plane_name,point,normal_vector | Create a plane consisting of point and normal vector. |
DivideSection | section,plane,section_name1, section_name2 |
Section is divided into a plane to save the section in the normal vector direction to 1 and the opposite direction to 2. |
GetFarthestPoint | point_name,section,p1,p2 | Obtain the point farthest from the line segment with two points as end points among the points on the section. |
GetFarthestPointSil | point_name,Front/Side,p1,p2 | Obtain the point farthest from the line segment with two points as end points among the points on the front/side silhouette. |
GetSectionIntersection | point_name,section1,section2, MaxX/Y/Z or MinX/Y/Z |
Find the point that matches the condition from the intersections of sections 1 and 2. |
GetSectionDividePoint | point_name,section,p1,p2,m,n, MaxX/Y/Z or MinX/Y/Z |
Internalize the point between points 1 and 2 in m: n and obtain a point that matches the condition. |
GetSectionCenter | point_name,section_name | Adds the center of the specified section as a point name. |
GetSectionByGirth | section_name,region_name, MAX/MIN,HeightRange section_name,region_name, MAX/MIN,landmark1,landmark2 |
Find the longest/shortest circumference in the HeightRange range (or between two landmarks relative to the y axis) within the specified region and save it as a section name. |
GetConvexHull | section1,Section2,... | Create a convex hull enclosing each section. |
GetMaxPeak2D | point_name,section,X/Y | Find the point with the largest X/Y coordinate in the plane projected on the plane. |
GetMinPeak2D | point_name,section,X/Y | Find the point with the smallest X/Y coordinate in the plane projected on the plane. |
SortSection2D | section_name,X/Y | Align points on 2D section based on X/Y coordinates. |
SetPeakSearchThreshold | equation | When searching for a peak, if the X/Y coordinate value difference is larger than the equation, it is not regarded as a continuous point. |
SetClosedPathThreshold | equation | When searching for a closed path, points that are farther apart from the equation are not considered continuous points. |
SetSectionSearchStep | equation | Specify the interval to find the section of GetSectionByGirth. As the number increases, the search speed increases. |
Command | Parameter | Explanation |
---|---|---|
GetMaxX/Y/ZPoint |
point_name,section point_name,range_variable point_name,section,range_variable |
Save the point with the largest value of X/Y/Z coordinates within a section or Height Range. (If * is prefixed to the point name, it is recognized as a landmark.) |
GetMinX/Y/ZPoint |
point_name,section point_name,range_variable point_name,section,range_variable |
Save the point with the smallest value of X/Y/Z coordinates within a section or Height Range. (If * is prefixed to the point name, it is recognized as a landmark.) |
SetResult | result_name,equation | Add equation value to Result List. |
SetLandmark | landmark_name,point | Define a point as a new landmark. |
SetHeightResult | result_name,p1 result_name,p1,p2 |
Height from floor to p1. Height(Y coordinate difference) between p1 and p2. |
SetWidthResult | result_name,p1,p2 | Width(X coordinate difference) between p1 and p2. |
SetDepthResult | result_name,p1,p2 | Depth(Z coordinate difference) between p1 and p2. |
SetDistanceResult | result_name,p1,p2 | Line length between p1 and p2. |
SetSectionPath | result_name,section | Calculate the length of a convex hull of a section as a path. |
SetPathResult3 | result_name,p1,p2,p3,Max/Min | Save the long/short path of the convex hull passing through three points as a result and display it as a path. |
SetPathResult2 | result_name,p1,p2,Front/Side/Top, Max/Min/Front/Back/Left/Right/Up/Down |
Save a long/short path cut to a section connecting two points on the front/side/top and display the path. You can select whether to use the front, back, left, right, top, or bottom. |
SetSubPathResult | result_name,path_name,p1,p2 | Creates a new Path from p1 to p2 in the specified Path and adds it to the result. |
SubdividePath | path_name,segment_length | Smooth the path by dividing it into shorter lengths. |
SetAngleResult | result_name,p1,p2,p3,Front/Side/Top | Find angles and add paths when looking at the angles between points 1 and 2 and the point(vector) 3 in Front/Side/Top. |
SetSplinePathResult | result_name,p1,p2,p3,...,pn | If there are three or more points and p1 and pn are the same, calculate the length by considering closed path. |
SetPointByCompass | point_name,p1,p2,v1,CW/CCW | p2 is rotated perpendicular to v1 with respect to p1 to obtain a point where it meets the human body. Direction is clockwise/ counterclockwise. |
Command | Parameter | Explanation |
---|---|---|
FindVertex | point_name,section_name | Find Vertex landmark at the specified section. |
FindCrotch | point_name | Seeking Crotch landmark from front silhouette. |
FindArmpit | left_armpit,right_armpit | Seeking Armfit landmark from front silhouette. |
LoadLandmark | Load landmark coordinates of .txt file with the same name as the human body data file. | |
LoadCSVLandmark | Load landmark coordinates of .csv file with the same name as the human body data file. | |
MoveLandmark | landmark_name,dm | Move the landmark by dm and find the nearest human body surface point. |
SaveLandmark | Save the coordinates of the measured landmark as a .csv file with the same name as the human body data file. | |
SaveResult | Save the current measurement data as a .csv file with the same body file name. | |
LoadTable | table_name,file_name | Load table from file into script folder. |
GetSectionsFromTable | table_name,ID(CURR_BODY) | Create sections by loading the height information and section name from the specified ID of the table. |
SaveRegionAsMSH | region_name | Save region as body file_region name.msh. |
CalculateVolume | mesh_name | Calculate the volume of the mesh generated by SaveRegionAsMSH. |