attempt to keep position and orientation of problem with no fixes closest to prototype
This commit is contained in:
parent
53d95d4a34
commit
a1d5cc0187
|
@ -12,7 +12,7 @@ from multimethod import MultiVariable, MultiMethod
|
|||
from cluster import *
|
||||
from configuration import Configuration
|
||||
from gmatch import gmatch
|
||||
from method import OrMethod
|
||||
from method import OrMethod,SetMethod
|
||||
from incremental import MutableSet,Union,Filter
|
||||
|
||||
# --------------------------------------------------
|
||||
|
@ -521,8 +521,10 @@ class ClusterSolver(Notifier):
|
|||
diag_print("keep top-level: "+str(cluster),"clsolver")
|
||||
|
||||
# add method to determine root-variable
|
||||
self._add_root_method(merge.input_clusters(),merge.outputs()[0])
|
||||
|
||||
if hasattr(merge,"noremove") and merge.noremove == True:
|
||||
self._add_root_false(merge.outputs()[0])
|
||||
else:
|
||||
self._add_root_method(merge.input_clusters(),merge.outputs()[0])
|
||||
# add solution selection methods, only if information increasing
|
||||
if infinc:
|
||||
output2 = self._add_prototype_selector(merge)
|
||||
|
@ -542,6 +544,14 @@ class ClusterSolver(Notifier):
|
|||
# make sure its deleted when cluster is deleted
|
||||
self._add_dependency(outcluster, method)
|
||||
|
||||
def _add_root_false(self,outcluster):
|
||||
outroot = rootname(outcluster)
|
||||
method = SetMethod(outroot, False)
|
||||
# add method
|
||||
self._add_method(method)
|
||||
# make sure its deleted when cluster is deleted
|
||||
self._add_dependency(outcluster, method)
|
||||
|
||||
|
||||
# -- removing objects
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ class GeometricProblem (Notifier, Listener):
|
|||
return self.has_variable(variable)
|
||||
|
||||
def set_point(self, variable, prototype):
|
||||
"""deprictaed - use set_prototype"""
|
||||
"""depricated - use set_prototype"""
|
||||
return self.set_prototype(variable, prototype)
|
||||
|
||||
def get_point(self, variable):
|
||||
|
@ -326,6 +326,12 @@ class GeometricSolver (Listener):
|
|||
# add constraints
|
||||
toadd = set(self.cg.constraints())
|
||||
|
||||
# add coincidences first. Prevents re-mapping of primitves and re-solving of problem
|
||||
for con in list(toadd):
|
||||
if isinstance(con, CoincidenceConstraint):
|
||||
self._add_constraint(con)
|
||||
toadd.remove(con)
|
||||
|
||||
# add selection constraints first. Prevents re-evaluation
|
||||
for con in list(toadd):
|
||||
if isinstance(con, SelectionConstraint):
|
||||
|
@ -649,11 +655,17 @@ class GeometricSolver (Listener):
|
|||
v0 = vars[0]
|
||||
v1 = vars[1]
|
||||
dist = con.get_parameter()
|
||||
p0 = vector.vector([0.0,0.0])
|
||||
p1 = vector.vector([dist,0.0])
|
||||
if self.dimension == 3:
|
||||
p0.append(0.0)
|
||||
p1.append(0.0)
|
||||
#p0 = vector.vector([0.0,0.0])
|
||||
#p1 = vector.vector([dist,0.0])
|
||||
# use prototype to orient rigid - minimize difference solution and prototype
|
||||
p0 = self.problem.get_prototype(v0)
|
||||
v = self.problem.get_prototype(v1) - p0
|
||||
if vector.norm(v) != 0:
|
||||
v = v / vector.norm(v)
|
||||
else:
|
||||
v = vector.vector([0.0 for i in range(self.dimension)])
|
||||
v[0] = 1.0
|
||||
p1 = p0+v*dist
|
||||
conf = Configuration({v0:p0,v1:p1})
|
||||
self.dr.set(rig, [conf])
|
||||
assert con.satisfied(conf.map)
|
||||
|
|
|
@ -357,19 +357,19 @@ def selection_problem():
|
|||
|
||||
def test3d():
|
||||
#diag_select("clsolver")
|
||||
test(double_tetrahedron_problem())
|
||||
test(ada_tetrahedron_problem())
|
||||
test(double_banana_problem())
|
||||
test(double_banana_plus_one_problem())
|
||||
test(random_triangular_problem_3D(10,10.0,0.0,0.5))
|
||||
test(random_distance_problem_3D(10,1.0,0.0))
|
||||
#test(double_tetrahedron_problem())
|
||||
#test(ada_tetrahedron_problem())
|
||||
#test(double_banana_problem())
|
||||
#test(double_banana_plus_one_problem())
|
||||
#test(random_triangular_problem_3D(10,10.0,0.0,0.5))
|
||||
#test(random_distance_problem_3D(10,1.0,0.0))
|
||||
test(fix1_problem_3d())
|
||||
test(fix2_problem_3d())
|
||||
test(fix3_problem_3d())
|
||||
test(selection_problem())
|
||||
selection_test()
|
||||
test(overconstrained_tetra())
|
||||
test(diamond_3d())
|
||||
#test(selection_problem())
|
||||
#selection_test()
|
||||
#test(overconstrained_tetra())
|
||||
#test(diamond_3d())
|
||||
|
||||
if __name__ == "__main__":
|
||||
test3d()
|
||||
|
|
Loading…
Reference in New Issue
Block a user