meshlabxml/texture.py
def isometric(script, targetAbstractMinFaceNum=140, targetAbstractMaxFaceNum=180,
              stopCriteria=1, convergenceSpeed=1, DoubleStep=True):
    """Isometric parameterization

    """
    filter_xml = ''.join([
        '  <filter name="Iso Parametrization">\n',
        '    <Param name="targetAbstractMinFaceNum"',
        'value="%d"' % targetAbstractMinFaceNum,
        'description="Abstract Min Mesh Size"',
        'type="RichInt"',
        'tooltip="This number and the following one indicate the range face number of the abstract mesh that is used for the parametrization process. The algorithm will choose the best abstract mesh with the number of triangles within the specified interval. If the mesh has a very simple structure this range can be very low and strict; for a roughly spherical object if you can specify a range of [8,8] faces you get a octahedral abstract mesh, e.g. a geometry image. &lt;br>Large numbers (greater than 400) are usually not of practical use."',
        '/>\n',
        '    <Param name="targetAbstractMaxFaceNum"',
        'value="%d"' % targetAbstractMaxFaceNum,
        'description="Abstract Max Mesh Size"',
        'type="RichInt"',
        'tooltip="Please notice that a large interval requires huge amount of memory to be allocated, in order save the intermediate results. An interval of 40 should be fine."',
        '/>\n',
        '    <Param name="stopCriteria"',
        'value="%d"' % stopCriteria,
        'description="Optimization Criteria"',
        'enum_val0="Best Heuristic"',
        'enum_val1="Area + Angle"',
        'enum_val2="Regularity"',
        'enum_val3="L2"',
        'enum_cardinality="4"',
        'type="RichEnum"',
        'tooltip="Choose a metric to stop the parametrization within the interval. 1: Best Heuristic : stop considering both isometry and number of faces of base domain. 2: Area + Angle : stop at minimum area and angle distorsion. 3: Regularity : stop at minimum number of irregular vertices. 4: L2 : stop at minimum OneWay L2 Stretch Eff"',
        '/>\n',
        '    <Param name="convergenceSpeed"',
        'value="%d"' % convergenceSpeed,
        'description="Convergence Precision"',
        'type="RichInt"',
        'tooltip="This parameter controls the convergence speed/precision of the optimization of the texture coordinates. Larger the number slower the processing and, eventually, slightly better results"',
        '/>\n',
        '    <Param name="DoubleStep"',
        'value="%s"' % str(DoubleStep).lower(),
        'description="Double Step"',
        'type="RichBool"',
        'tooltip="Use this bool to divide the parameterization in 2 steps. Double step makes the overall process faster and robust. Consider to disable this bool in case the object has topologycal noise or small handles."',
        '/>\n',
        '  </filter>\n'])
    util.write_filter(script, filter_xml)
    return None
def isometric(script, targetAbstractMinFaceNum=140, targetAbstractMaxFaceNum=180,
              stopCriteria=1, convergenceSpeed=1, DoubleStep=True):
    """Isometric parameterization

    """
    filter_xml = ''.join([
        '  <filter name="Iso Parametrization">\n',
        '    <Param name="targetAbstractMinFaceNum"',
        'value="%d"' % targetAbstractMinFaceNum,
        'description="Abstract Min Mesh Size"',
        'type="RichInt"',
        'tooltip="This number and the following one indicate the range face number of the abstract mesh that is used for the parametrization process. The algorithm will choose the best abstract mesh with the number of triangles within the specified interval. If the mesh has a very simple structure this range can be very low and strict; for a roughly spherical object if you can specify a range of [8,8] faces you get a octahedral abstract mesh, e.g. a geometry image. &lt;br>Large numbers (greater than 400) are usually not of practical use."',
        '/>\n',
        '    <Param name="targetAbstractMaxFaceNum"',
        'value="%d"' % targetAbstractMaxFaceNum,
        'description="Abstract Max Mesh Size"',
        'type="RichInt"',
        'tooltip="Please notice that a large interval requires huge amount of memory to be allocated, in order save the intermediate results. An interval of 40 should be fine."',
        '/>\n',
        '    <Param name="stopCriteria"',
        'value="%d"' % stopCriteria,
        'description="Optimization Criteria"',
        'enum_val0="Best Heuristic"',
        'enum_val1="Area + Angle"',
        'enum_val2="Regularity"',
        'enum_val3="L2"',
        'enum_cardinality="4"',
        'type="RichEnum"',
        'tooltip="Choose a metric to stop the parametrization within the interval. 1: Best Heuristic : stop considering both isometry and number of faces of base domain. 2: Area + Angle : stop at minimum area and angle distorsion. 3: Regularity : stop at minimum number of irregular vertices. 4: L2 : stop at minimum OneWay L2 Stretch Eff"',
        '/>\n',
        '    <Param name="convergenceSpeed"',
        'value="%d"' % convergenceSpeed,
        'description="Convergence Precision"',
        'type="RichInt"',
        'tooltip="This parameter controls the convergence speed/precision of the optimization of the texture coordinates. Larger the number slower the processing and, eventually, slightly better results"',
        '/>\n',
        '    <Param name="DoubleStep"',
        'value="%s"' % str(DoubleStep).lower(),
        'description="Double Step"',
        'type="RichBool"',
        'tooltip="Use this bool to divide the parameterization in 2 steps. Double step makes the overall process faster and robust. Consider to disable this bool in case the object has topologycal noise or small handles."',
        '/>\n',
        '  </filter>\n'])
    util.write_filter(script, filter_xml)
    return None
Isometric parameterization