Released 29 June 2015
This is a first release with python extension module included.
You can find it in lib/wrap.so. Extension compiled with Python 2.7 on CentOS 6 and provided with all required libraries, so it must work on all modern Linux distributions. To use module just add its path to sys.path variable:
>> import sys
>> import wrap
>> print wrap.version
One limitation of current extension is that it not implements wrap.extrapolate() function. In the next update we will fix that.
Since WrapX Python extension currently builds with GCC, then it’s incompatible with Python interpreters that are embedded in programs like Autodesk Maya. We are working on this. Write us a letter if you need it.
Released 29 June 2015
This is a minor fix with some enchancements of usability.
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 causing wrap.nonRigidRegistration() to run infinitely. Now this situation will raise exception. Proper way to exclude disconnected regions is to use wrap.subset().
Earlier point selection dialog was requiring two geometries and also generated two sets of corresponding 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)
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.
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.
Released 20 May 2015
While automating polygon selection you may want to set polygroup name not just from dialog wrap.selectPolygons() but also from command line. So we added function wrap.Geom.selectPolygonsByPolygroup(). You can get list of polygroups using attribute wrap.Geom.polyGroups.
# load model g = wrap.Geom(wrap.demoModelsPath + "HeadPolygroups_MakeHuman.obj") # show polygroups print g.polygroups ['Back', 'EarsOuter', 'Face', 'MouthOuter', 'Mouth', 'Ears', 'EarsInner', 'Eyes', 'EyesOuter', 'Nostrils', 'BackBottom'] # select polygroups eyePolygons = g.selectPolygonsByPolygroup('Eyes') # just show already selected polygons in viewport wrap.selectPolygons(g,eyePolygons)
We updated function wrap.Geom.pointToPointOnTriangle(). Previous version was returning point correspondig to closest vertex. Now function does accurate projection onto closest triangle.
We fixed crash when importing some OBJ-files made by ZBrush.
Released 28 April 2015
Sometimes you don’t want to pick control points by hand. For example it’s often a case when basemesh’s control points must correspond to its vertices. Or it may be that you have 3d landmarks on your scan generated by another software.
Now you can automate step of selecting control points.
Another feature of this release is that we have now a first working version of python extension module. It’s not included yet in WrapX distribution, but if you want to get a beta, please contact us.
We fixed memory leak that was related to blendshapes preview generation with textures.