What’s new in 1.3.3

This is a minor fix with some enchancements of usability.

Checking of disconnected basemesh polygons in non-rigid registration

Non-rigid registration requires that all polygons of basemesh must be connected. There is possibility that basemesh created for example in DAZ Studio may contain eyes and lashes which are not connected to the body. In previous versions it was causign wrap.nonRigidRegistration() to run infinitely. Now this situation will raise exception. Proper way to exclude disconnected regions is to use wrap.subset()

Simplified version of wrap.selectPoints() with one viewport

Earlier point selection dialog was requiring two geometries and also generated two sets of correspoding points. We found that there are cases when you may want to work with points independently, like in situations with one marked basemesh and many different scans. So we modified function wrap.selectPoints(). It may also be run with one geometry object now:

geom = wrap.Geom(wrap.demoModelsPath + '/HeadPolygroups_MakeHuman.obj')

# Show dialog with just one geom and no predefined points
wrap.selectPoints(geom)

# Predefined points from left side of the head
points = [
   wrap.PointOnTriangle(3640,0.5,0.0),
   wrap.PointOnTriangle(3753,0.3,0.0),
   wrap.PointOnTriangle(4399,0.19,0.0),
   wrap.PointOnTriangle(3132,0.0,0.6)]

# Show dialog with just one geom and predefined points
points = wrap.selectPoints(geom,None,points)

Added maxDistance parameter to wrap.Geom.pointToPointOnTriangle()

While projecting 3D point onto mesh surface one may want to set limit on the distance between point and the surface. If length of projection is bigger than this distance then exception raised.

Bugfixes

We fixed situation of incorrect loading of previously saved barycentric points (wrap.loadPoints()) when u or v is negative due to floating point precision errors.