Пример #1
0
    ## analytic metric
    metric = SingularMetric(sizeinf, point_metric_file)

## Remesh Skeleton
if options.skeleton:
    RemeshSkeleton(liaison, 1.66, sizeinf/100.0, metric).compute()

## Remesh
refineOptions = HashMap()
refineOptions.put("size", str(sizeinf))
refineOptions.put("coplanarity", str(coplanarity))
refineOptions.put("nearLengthRatio", str(options.nearLengthRatio))
refineOptions.put("project", "false")
if options.allowNearNodes:
    refineOptions.put("allowNearNodes", "true")
refineAlgo = Remesh(liaison, refineOptions)
refineAlgo.setAnalyticMetric(metric)
refineAlgo.compute();

## Swap
swapOptions = HashMap()
swapOptions.put("coplanarity", str(coplanarity))
swapOptions.put("minCosAfterSwap", "0.3")
SwapEdge(liaison, swapOptions).compute()

## Improve valence
valenceOptions = HashMap()
valenceOptions.put("coplanarity", str(coplanarity))
valenceOptions.put("checkNormals", "false")
ImproveVertexValence(liaison, valenceOptions).compute()
Пример #2
0
if options.decimateSize or options.decimateTarget:
	decimateOptions = HashMap()
	if options.decimateSize:
		decimateOptions.put("size", str(options.decimateSize))
	elif options.decimateTarget:
		decimateOptions.put("maxtriangles", str(options.decimateTarget))
	if options.coplanarity:
		decimateOptions.put("coplanarity", str(options.coplanarity))
	QEMDecimateHalfEdge(liaison, decimateOptions).compute()
	swapOptions = HashMap()
	if options.coplanarity:
		swapOptions.put("coplanarity", str(options.coplanarity))
	SwapEdge(liaison, swapOptions).compute()

algo = Remesh(liaison, opts)
class RemeshMetric(AnalyticMetric):
	def getTargetSize(self, x, y, z, groupId):
		return min(200.0, (x - 9000.0)*(x - 9000.0) / 2250.0)

if options.point_metric_file:
	if options.rho > 1.0:
		algo.setAnalyticMetric(DistanceMetric(options.size, options.point_metric_file, options.rho, options.mixed))
	else:
		algo.setAnalyticMetric(DistanceMetric(options.size, options.point_metric_file))
elif setAnalytic:
	algo.setAnalyticMetric(RemeshMetric());

algo.compute();
#MeshWriter.writeObject3D(algo.getOutputMesh(), outDir, String())
if options.recordFile:
Пример #3
0
if options.decimateSize or options.decimateTarget:
	decimateOptions = HashMap()
	if options.decimateSize:
		decimateOptions.put("size", str(options.decimateSize))
	elif options.decimateTarget:
		decimateOptions.put("maxtriangles", str(options.decimateTarget))
	if options.coplanarity:
		decimateOptions.put("coplanarity", str(options.coplanarity))
	QEMDecimateHalfEdge(liaison, decimateOptions).compute()
	swapOptions = HashMap()
	if options.coplanarity:
		swapOptions.put("coplanarity", str(options.coplanarity))
	SwapEdge(liaison, swapOptions).compute()

algo = Remesh(liaison, opts)
class RemeshMetric(Remesh.AnalyticMetricInterface):
	def getTargetSize(self, x, y, z):
		return min(200.0, (x - 9000.0)*(x - 9000.0) / 2250.0)

if options.point_metric_file:
    algo.setAnalyticMetric(PointMetric(options.size, options.point_metric_file))
elif setAnalytic:
	algo.setAnalyticMetric(RemeshMetric());

algo.compute();
#MeshWriter.writeObject3D(algo.getOutputMesh(), outDir, String())
if options.recordFile:
	liaison.getMesh().getTrace().finish()

# Now compute beams
Пример #4
0
def remesh(**kwargs):
    """
    Remesh an existing mesh with a singular analytical metric
    """
    # Process coplanarity options
    coplanarity = cos(kwargs["coplanarityAngle"] * pi / 180.0)
    if kwargs["coplanarity"]:
        coplanarity = kwargs["coplanarity"]

    safe_coplanarity = kwargs["safe_coplanarity"]
    if safe_coplanarity is None:
        safe_coplanarity = 0.8
    safe_coplanarity = max(coplanarity, safe_coplanarity)

    # Build background mesh
    try:
        liaison = kwargs["liaison"]
    except KeyError:
        mtb = MeshTraitsBuilder.getDefault3D()
        if kwargs["recordFile"]:
            mtb.addTraceRecord()
        mtb.addNodeSet()
        mesh = Mesh(mtb)
        if kwargs["recordFile"]:
            mesh.getTrace().setDisabled(True)

        MeshReader.readObject3D(mesh, kwargs["in_dir"])
        liaison = MeshLiaison.create(mesh, mtb)

    if kwargs["recordFile"]:
        liaison.getMesh().getTrace().setDisabled(False)
        liaison.getMesh().getTrace().setLogFile(kwargs["recordFile"])
        liaison.getMesh().getTrace().createMesh("mesh", liaison.getMesh())
    if kwargs["immutable_border"]:
        liaison.mesh.tagFreeEdges(AbstractHalfEdge.IMMUTABLE)
    liaison.getMesh().buildRidges(coplanarity)
    if kwargs["preserveGroups"]:
        liaison.getMesh().buildGroupBoundaries()

    immutable_groups = []
    if kwargs["immutable_groups_file"]:
        f = open(kwargs["immutable_groups_file"])
        immutable_groups = f.read().split()
        f.close()
        liaison.mesh.tagGroups(immutable_groups, AbstractHalfEdge.IMMUTABLE)

    if kwargs["recordFile"]:
        cmds = [
            String("assert self.m.checkNoDegeneratedTriangles()"),
            String("assert self.m.checkNoInvertedTriangles()"),
            String("assert self.m.checkVertexLinks()"),
            String("assert self.m.isValid()"),
        ]
        liaison.getMesh().getTrace().setHooks(cmds)

    # Decimate
    if kwargs["decimateSize"] or kwargs["decimateTarget"]:
        decimateOptions = HashMap()
        if kwargs["decimateSize"]:
            decimateOptions.put("size", str(kwargs["decimateSize"]))
        elif kwargs["decimateTarget"]:
            decimateOptions.put("maxtriangles", str(kwargs["decimateTarget"]))
        decimateOptions.put("coplanarity", str(safe_coplanarity))
        QEMDecimateHalfEdge(liaison, decimateOptions).compute()
        swapOptions = HashMap()
        swapOptions.put("coplanarity", str(safe_coplanarity))
        SwapEdge(liaison, swapOptions).compute()

    # Metric
    if kwargs["rho"] > 1.0:
        # mixed metric
        metric = SingularMetric(kwargs["sizeinf"], kwargs["point_metric_file"],
                                kwargs["rho"], True)
    else:
        # analytic metric
        metric = SingularMetric(kwargs["sizeinf"], kwargs["point_metric_file"])

    # Remesh Skeleton
    if kwargs["skeleton"]:
        RemeshSkeleton(liaison, 1.66, metric, 0.01).compute()

    # Remesh
    refineOptions = HashMap()
    refineOptions.put("size", str(kwargs["sizeinf"]))
    refineOptions.put("coplanarity", str(safe_coplanarity))
    refineOptions.put("nearLengthRatio", str(kwargs["nearLengthRatio"]))
    refineOptions.put("project", "false")
    if kwargs["allowNearNodes"]:
        refineOptions.put("allowNearNodes", "true")
    refineAlgo = Remesh(liaison, refineOptions)
    refineAlgo.setAnalyticMetric(metric)
    refineAlgo.compute()

    if not kwargs["noclean"]:
        # Swap
        swapOptions = HashMap()
        swapOptions.put("coplanarity", str(safe_coplanarity))
        swapOptions.put("minCosAfterSwap", "0.3")
        SwapEdge(liaison, swapOptions).compute()

        # Improve valence
        valenceOptions = HashMap()
        valenceOptions.put("coplanarity", str(safe_coplanarity))
        valenceOptions.put("checkNormals", "false")
        ImproveVertexValence(liaison, valenceOptions).compute()

        # Smooth
        smoothOptions = HashMap()
        smoothOptions.put("iterations", str(8))
        smoothOptions.put("check", "true")
        smoothOptions.put("boundaries", "true")
        smoothOptions.put("relaxation", str(0.6))
        if safe_coplanarity >= 0.0:
            smoothOptions.put("coplanarity", str(safe_coplanarity))
        SmoothNodes3DBg(liaison, smoothOptions).compute()

        # Remove Degenerated
        rdOptions = HashMap()
        rdOptions.put("rho", str(kwargs["eratio"]))
        RemoveDegeneratedTriangles(liaison, rdOptions).compute()

    # remesh beams
    if kwargs["wire_size"] > 0.0:
        liaison = remesh_beams(
            liaison=liaison,
            size=kwargs["wire_size"],
            rho=kwargs["rho"],
            immutable_groups=immutable_groups,
            point_metric_file=kwargs["wire_metric_file"],
        )

    # Output
    MeshWriter.writeObject3D(liaison.getMesh(), kwargs["out_dir"], "")
    if kwargs["recordFile"]:
        liaison.getMesh().getTrace().finish()
Пример #5
0
		decimateOptions.put("maxtriangles", str(options.decimateTarget))
	decimateOptions.put("coplanarity", str(coplanarity))
	QEMDecimateHalfEdge(liaison, decimateOptions).compute()
	swapOptions = HashMap()
	swapOptions.put("coplanarity", str(coplanarity))
	SwapEdge(liaison, swapOptions).compute()

## Remesh
refineOptions = HashMap()
refineOptions.put("size", str(sizeinf))
refineOptions.put("coplanarity", str(coplanarity))
refineOptions.put("nearLengthRatio", str(options.nearLengthRatio))
refineOptions.put("project", "false")
if options.allowNearNodes:
	refineOptions.put("allowNearNodes", "true")
refineAlgo = Remesh(liaison, refineOptions)

if options.rho > 1.0:
	## mixed metric
	refineAlgo.setAnalyticMetric(SingularMetric(sizeinf, point_metric_file, options.rho, True))
else:
	## analytic metric
	refineAlgo.setAnalyticMetric(SingularMetric(sizeinf, point_metric_file))
refineAlgo.compute();

## Swap
swapOptions = HashMap()
swapOptions.put("coplanarity", str(coplanarity))
swapOptions.put("minCosAfterSwap", "0.3")
SwapEdge(liaison, swapOptions).compute()
Пример #6
0
if options.recordFile:
    cmds = [ String("assert self.m.checkNoDegeneratedTriangles()"),
             String("assert self.m.checkNoInvertedTriangles()"),
             String("assert self.m.checkVertexLinks()"),
             String("assert self.m.isValid()") ]
    liaison.getMesh().getTrace().setHooks(cmds)

## Refine
if options.size is not None:
    RefineOpts = HashMap()
    RefineOpts.put("size", str(options.size))
    RefineOpts.put("coplanarity", str(coplanarity))
    if options.allowNearNodes:
        RefineOpts.put("allowNearNodes", "true")
    RefineOpts.put("nearLengthRatio", str(options.nearLengthRatio))
Remesh(liaison, RefineOpts).compute()

if options.recordFile:
    liaison.getMesh().getTrace().finish()

## Swap
swapOptions = HashMap()
swapOptions.put("coplanarity", str(coplanarity))
swapOptions.put("minCosAfterSwap", "0.3")
SwapEdge(liaison, swapOptions).compute()

## Improve valence
valenceOptions = HashMap()
valenceOptions.put("coplanarity", str(coplanarity))
valenceOptions.put("checkNormals", "false")
ImproveVertexValence(liaison, valenceOptions).compute()
Пример #7
0
if options.decimateSize or options.decimateTarget:
    decimateOptions = HashMap()
    if options.decimateSize:
        decimateOptions.put("size", str(options.decimateSize))
    elif options.decimateTarget:
        decimateOptions.put("maxtriangles", str(options.decimateTarget))
    if options.coplanarity:
        decimateOptions.put("coplanarity", str(options.coplanarity))
    QEMDecimateHalfEdge(liaison, decimateOptions).compute()
    swapOptions = HashMap()
    if options.coplanarity:
        swapOptions.put("coplanarity", str(options.coplanarity))
    SwapEdge(liaison, swapOptions).compute()

algo = Remesh(liaison, opts)


class RemeshMetric(Remesh.AnalyticMetricInterface):
    def getTargetSize(self, x, y, z):
        return min(200.0, (x - 9000.0) * (x - 9000.0) / 2250.0)


if options.point_metric_file:
    algo.setAnalyticMetric(PointMetric(options.size,
                                       options.point_metric_file))
elif setAnalytic:
    algo.setAnalyticMetric(RemeshMetric())

algo.compute()
#MeshWriter.writeObject3D(algo.getOutputMesh(), outDir, String())