def create_cp(): # begin from oricreate.api import CreasePatternState import numpy as np x = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [2, 1, 0]], dtype='float_') L = np.array([[0, 1], [1, 2], [2, 0], [1, 3], [2, 3]], dtype='int_') F = np.array([ [0, 1, 2], [1, 3, 2], ], dtype='int_') cp = CreasePatternState(X=x, L=L, F=F) print('Initial configuration') print('Orthonormal base vectors of a first edge\n', cp.F_L_bases[:, 0, :, :]) return cp cp.u[1, 2] = 1.0 cp.u[2, 2] = 1.0 cp.u = cp.u print('Displaced configuration') print('Orthonormal base vectors of a first edge r\n', cp.F_L_bases[:, 0, :, :]) # end return cp
def create_cp_factory(): # begin import numpy as np from oricreate.api import CreasePatternState, CustomCPFactory x = np.array([[0, 0, 0], [1, 0, 0], [2, 0, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], ], dtype='float_') L = np.array([[0, 1], [1, 2], [3, 4], [4, 5], [0, 3], [1, 4], [2, 5]], dtype='int_') F = np.array([[0, 1, 4, 3], [1, 2, 5, 4], ], dtype='int_') x_mid = (x[F[:, 1]] + x[F[:, 3]]) / 2.0 x_mid[:, 2] -= 1.0 n_F = len(F) n_x = len(x) x_mid_i = np.arange(n_x, n_x + n_F) L_mid = np.array([[F[:, 0], x_mid_i[:]], [F[:, 1], x_mid_i[:]], [F[:, 2], x_mid_i[:]], [F[:, 3], x_mid_i[:]]]) L_mid = np.vstack([L_mid[0].T, L_mid[1].T, L_mid[2].T, L_mid[3].T]) x_derived = np.vstack([x, x_mid]) L_derived = np.vstack([L, F[:, (1, 3)], L_mid]) F_derived = np.vstack([F[:, (0, 1, 2)], F[:, (0, 2, 3)]]) cp = CreasePatternState(X=x_derived, L=L_derived, F=F_derived ) cp.u[5, 2] = 0.01 cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory
def create_hu(): cp = CreasePatternState(X=[ [0, 0.5, 0], [1, 0, 0], [1, 1, 0], [2, 0.5, 0], ], L=[[0, 1], [1, 2], [2, 0], [1, 3], [2, 3]], F=[[0, 1, 2], [1, 3, 2]]) cp_factory = CustomCPFactory(formed_object=cp) # begin from oricreate.fu import FuTargetPsiValue # Link the crease factory it with the constraint client fu_target_psi_value = \ FuTargetPsiValue(forming_task=cp_factory, psi_value=(1, lambda t: -0.5 * t) ) cp = cp_factory.formed_object print(cp.iL) print(cp.iL_psi) print('fu:', fu_target_psi_value.get_f(1.0)) print('f_du:\n', fu_target_psi_value.get_f_du(1.0)) # end return fu_target_psi_value
def create_gu(): cp = CreasePatternState(X=[[0, 0.5, -0.5], [1, 0, 0], [1, 1, 0], [2, 0.5, -0.5], ], L=[[0, 1], [1, 2], [2, 0], [1, 3], [2, 3]], F=[[0, 1, 2], [1, 3, 2]] ) cp_factory = CustomCPFactory(formed_object=cp) # begin from oricreate.gu import GuPsiConstraints # Link the crease factory it with the constraint client gu_dof_constraints = \ GuPsiConstraints(forming_task=cp_factory, psi_constraints=[([(0, 1.0)], 0), ]) cp = cp_factory.formed_object print(cp.iL) print(cp.iL_psi) print('gu:', gu_dof_constraints.get_G(1.0)) print('g_du:\n', gu_dof_constraints.get_G_du(1.0)) # end return gu_dof_constraints
def create_cp_factory(): # begin from oricreate.api import CreasePatternState, CustomCPFactory x = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [2, 1, 0] ], dtype='float_') L = np.array([[0, 1], [1, 2], [2, 0], [1, 3], [2, 3]], dtype='int_') F = np.array([[0, 1, 2], [1, 3, 2], ], dtype='int_') cp = CreasePatternState(X=x, L=L, F=F ) cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory
def create_cp_factory(): cp = CreasePatternState(X=[[0, 0, z_e], [1, 0, 0], [1, 1, 0], [2, 1, z_e]], L=[[0, 1], [1, 2], [2, 0], [1, 3], [3, 2]], F=[[0, 1, 2], [1, 3, 2]]) cp_factory = CustomCPFactory(formed_object=cp) return cp_factory
def create_hu(): cp = CreasePatternState(X=[ [0, 0.5, -0.5], [1, 0, 0], [1, 1, 0], [2, 0.5, -0.5], ], L=[[0, 1], [1, 2], [2, 0], [1, 3], [2, 3]], F=[[0, 1, 2], [1, 3, 2]]) cp_factory = CustomCPFactory(formed_object=cp) # begin from oricreate.hu import HuPsiConstraints # Link the crease factory it with the constraint client hu_psi_constraints = \ HuPsiConstraints(forming_task=cp_factory, psi_constraints=[(1, False), ] ) cp = cp_factory.formed_object print(cp.iL) print(cp.iL_psi) print('gu:', hu_psi_constraints.get_H(1.0)) print('g_du:\n', hu_psi_constraints.get_H_du(1.0)) # end return hu_psi_constraints
def create_cp_factory(): # begin import numpy as np from oricreate.api import CreasePatternState, CustomCPFactory x = np.array([ [0, 0, 0], [1, 0, 0], [2, 0, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0], ], dtype='float_') L = np.array([[0, 1], [1, 2], [3, 4], [4, 5], [0, 3], [1, 4], [2, 5]], dtype='int_') F = np.array([ [0, 1, 4, 3], [1, 2, 5, 4], ], dtype='int_') x_mid = (x[F[:, 1]] + x[F[:, 3]]) / 2.0 x_mid[:, 2] -= 1.0 n_F = len(F) n_x = len(x) x_mid_i = np.arange(n_x, n_x + n_F) L_mid = np.array([[F[:, 0], x_mid_i[:]], [F[:, 1], x_mid_i[:]], [F[:, 2], x_mid_i[:]], [F[:, 3], x_mid_i[:]]]) L_mid = np.vstack([L_mid[0].T, L_mid[1].T, L_mid[2].T, L_mid[3].T]) x_derived = np.vstack([x, x_mid]) L_derived = np.vstack([L, F[:, (1, 3)], L_mid]) F_derived = np.vstack([F[:, (0, 1, 2)], F[:, (0, 2, 3)]]) cp = CreasePatternState(X=x_derived, L=L_derived, F=F_derived) cp.u[5, 2] = 0.01 cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory
def create_cp_factory(): # begin from oricreate.api import CreasePatternState, CustomCPFactory x = np.array([ [-1, 0, 0], [0, 0, 0], [1, 1, 0], [2, 0, 0], [1, -1, 0], [-1, 1, 0], [-1, -1, 0], [2, 1, 0], [2, -1, 0], ], dtype='float_') L = np.array( [ [0, 1], [1, 2], [2, 0], [1, 3], [1, 7], [1, 4], [3, 4], #[1, 5], [6, 1], [0, 5], [2, 5], [0, 6], [4, 6], [3, 7], [2, 7], [3, 8], [4, 8] ], dtype='int_') F = np.array([ [0, 1, 2], [1, 7, 2], [1, 4, 3], [1, 4, 6], [0, 2, 5], [0, 1, 6], [3, 1, 7], [3, 4, 8], ], dtype='int_') cp = CreasePatternState(X=x, L=L, F=F) cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory
def create_cp_factory(): # begin from oricreate.api import CreasePatternState, CustomCPFactory cp = CreasePatternState(X=[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, 0]], L=[[0, 1], [1, 2], [2, 3], [3, 0], [0, 4], [1, 4], [2, 4], [3, 4]], F=[[0, 1, 4], [1, 2, 4], [4, 3, 2], [4, 3, 0]]) cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory
def create_cp_factory(R, H): # begin from oricreate.api import CreasePatternState, CustomCPFactory h2 = H / 2.0 c60 = math.cos(math.pi / 3.0) * R s60 = math.sin(math.pi / 3.0) * R x = np.array([ [R, 0, h2], [c60, s60, 0], [-c60, s60, h2], [-R, 0, 0], [-c60, -s60, h2], [c60, -s60, 0], [R, 0, -h2], [-c60, s60, -h2], [-c60, -s60, -h2], [0.0 * math.cos(math.pi / 3), -0.0 * math.sin(math.pi / 3), 0], [0.0 * math.cos(math.pi / 3), 0.0 * math.sin(math.pi / 3), 0], [-0.0, 0, 0], ], dtype='float_') L = np.array( [[0, 6], [2, 7], [4, 8], [0, 5], [0, 9], [0, 10], [0, 1], [6, 5], [6, 9], [6, 10], [6, 1], [2, 1], [2, 10], [2, 11], [2, 3], [7, 1], [7, 10], [7, 11], [7, 3], [4, 3], [4, 11], [4, 9], [4, 5], [8, 3], [8, 11], [8, 9], [8, 5], [5, 9], [1, 10], [3, 11]], dtype='int_') F = np.array( [[0, 6, 1], [0, 1, 10], [0, 10, 6], [6, 1, 10], [2, 10, 1], [2, 1, 7], [2, 7, 10], [7, 10, 1], [2, 3, 11], [2, 11, 7], [2, 7, 3], [7, 3, 11], [4, 11, 3], [4, 3, 8], [4, 8, 11], [8, 11, 3], [4, 5, 9], [4, 9, 8], [4, 8, 5], [8, 5, 9], [0, 9, 5], [0, 5, 6], [0, 6, 9], [6, 9, 5]], dtype='int_') cp = CreasePatternState(X=x, L=L, F=F) # cp.u[(9, 10, 11), 2] = -0.01 # cp.u[(5, 1, 3), 2] = 0.01 # cp.u[0, 0] = -0.01 # cp.u[3, 0] = -0.005 # cp.u[3, 1] = -0.005 # cp.u[5, 0] = 0.005 # cp.u[5, 1] = 0.005 cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory
def create_cp(): # begin from oricreate.api import CreasePatternState import numpy as np x = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [2, 1, 0] ], dtype='float_') L = np.array([[0, 1], [1, 2], [2, 0], [1, 3], [2, 3]], dtype='int_') F = np.array([[0, 1, 2], [1, 3, 2], ], dtype='int_') cp = CreasePatternState(X=x, L=L, F=F) print 'Initial configuration' print 'Orthonormal base vectors of a first edge\n', cp.F_L_bases[:, 0, :, :] return cp cp.u[1, 2] = 1.0 cp.u[2, 2] = 1.0 cp.u = cp.u print 'Displaced configuration' print 'Orthonormal base vectors of a first edge r\n', cp.F_L_bases[:, 0, :, :] # end return cp
def create_sim_step(): from oricreate.api import CreasePatternState, CustomCPFactory cp = CreasePatternState(X=[ [0, 0, 0], [1, 0, 0], [0.5, 0.5, 0], ], L=[ [0, 1], [1, 2], [2, 0], ], F=[[0, 1, 2]]) cp_factory = CustomCPFactory(formed_object=cp) # begin from oricreate.fu import FuTargetFaces, FuTF from oricreate.gu import GuConstantLength from oricreate.api import r_, s_, t_ # Link the pattern factory with the goal function client. do_something = FormingTask(previous_task=cp_factory) # configure the forming task so that it uses # the rigid folding kinematics optimization framework RFKOF target_face = FuTF([r_, s_, t_], [0, 1, 2]) fu_target_faces = FuTargetFaces(tf_lst=[target_face]) # Link the crease factory it with the constraint client gu_constant_length = GuConstantLength() sim_config = SimulationConfig(fu=fu_target_faces, gu={'cl': gu_constant_length}, acc=1e-6) sim_step = SimulationStep(forming_task=do_something, config=sim_config) sim_step.t = 0.4 print('goal function for t = 0.4:', sim_step.get_f()) sim_step.t = 0.8 print('goal function for t = 0.8:', sim_step.get_f()) print('goal function derivatives') print(sim_step.get_f_du()) print('constraints') print(sim_step.get_G()) print('constraint derivatives') print(sim_step.get_G_du()) sim_step._solve_fmin() print('target position:\n', sim_step.cp_state.x) # end return sim_step
def create_cp(): # begin from oricreate.api import CreasePatternState cp = CreasePatternState(X=[[0, 0, 0], [3, 0, 0], [0, 1, 0], [3, 1, 0], [0.5, 0.5, 0]], L=[[0, 1], [0, 2], [1, 3], [2, 3], [0, 4], [1, 4], [3, 4], [2, 4]], F=[[0, 1, 4], [1, 3, 4], [3, 2, 4], [0, 2, 4]]) print('Nodes of facets enumerated counter clock-wise\n', cp.F_N) print('Lines of facets enumerated counter clock-wise\n', cp.F_L) print('Facet areas\n', cp.F_area) print('Vector normal to a face\nt', cp.F_normals) # end return cp
def create_cp_factory(): cp = CreasePatternState(X=[ [0, 0, 0], [1, 0, 0], [.5, .5, 0], ], L=[ [0, 1], [1, 2], [2, 0], ], F=[ [0, 2, 1], ]) cp_factory = CustomCPFactory(formed_object=cp) return cp_factory
def _get_upper_plate(self): f = self.factory_task N_h = f.N_h x_1 = self.fold_angle_cntl.x_1 x_corners = x_1[N_h[(1, 1, -2, -2), (0, -1, 0, -1)]] x_corners[:, 2] += 0.008 + 0.4 ft = CustomCPFactory( formed_object=CreasePatternState( X=x_corners, L=[[0, 1], [1, 2], [2, 0], [1, 2], [2, 3], [3, 1]], F=[[0, 1, 2], [1, 2, 3]])) return ft
def create_cp_factory02(n=4): x, y = np.mgrid[0:n + 1, 0:2] z = np.zeros_like(x) X = np.c_[x.flatten(), y.flatten(), z.flatten()] N = np.arange((n) * 2).reshape(2, n) L1 = np.c_[N[0], N[1]] L2 = np.c_[N[0, :-1], N[0, 1:]] L3 = np.c_[N[1, :-1], N[1, 1:]] L4 = np.c_[N[0, :-1], N[1, 1:]] L = np.vstack([L1, L2, L3, L4]) F1 = np.c_[N[0, :-1], N[1, 1:], N[1, :-1]] F2 = np.c_[N[0, :-1], N[0, :-1], N[1, 1:]] F = np.vstack([F1, F2]) cp = CreasePatternState(X=X, L=L, F=F ) cp_factory = CustomCPFactory(formed_object=cp) return cp_factory
def _get_factory_task(self): l_length = self.L_green X = np.array([ [0, 0], [l_length / 2.0, 0], [l_length, 0], [0, l_length / 2.0], [0, l_length], [-l_length / 2.0, 0], [-l_length, 0], [0, -l_length / 2.0], [0, -l_length], [l_length / 2, l_length / 2], [-l_length / 2, l_length / 2], [-l_length / 2, -l_length / 2], [l_length / 2, -l_length / 2], ], dtype=np.float_) X = np.c_[X[:, 0], X[:, 1], X[:, 0] * 0] L = [[0, 1], [1, 2], [0, 3], [3, 4], [0, 5], [5, 6], [0, 7], [7, 8], [1, 3], [2, 4], [3, 5], [4, 6], [5, 7], [6, 8], [7, 1], [8, 2], [1, 9], [9, 3], [3, 10], [10, 5], [5, 11], [11, 7], [7, 12], [12, 1]] L = np.array(L, dtype=np.int_) F = [ [0, 1, 3], [0, 3, 5], [0, 5, 7], [0, 7, 1], [1, 9, 3], [3, 10, 5], [5, 11, 7], [7, 12, 1], [2, 9, 1], ] F = np.array(F, dtype=np.int_) cp = CreasePatternState(X=X, L=L, F=F) return CustomCPFactory(formed_object=cp)
def create_sim_step(): from oricreate.api import CreasePatternState, CustomCPFactory cp = CreasePatternState(X=[[0, 0, 0], [1, 0, 0], [0.5, 1, 0], [1.5, 1, 0], [2.0, 0.0, 0] ], L=[[0, 1], [1, 2], [2, 0], [1, 3], [2, 3], [3, 4], ], F=[[0, 1, 2], [1, 2, 3], [1, 3, 4]] ) cp_factory = CustomCPFactory(formed_object=cp) # begin from oricreate.fu import FuTF from oricreate.api import r_, s_, t_ target_face = FuTF([r_, s_, - 0.5 * (r_ - 1) * (r_ - 1) * t_ + 1.0], [0, 1, 2, 3, 4]) # fix all nodes in x and y direction - let the z direction free dof_constraints = \ [([(i, 0, 1.0)], 0.0) for i in range(0, 5)] +\ [([(i, 1, 1.0)], 0.0) for i in range(0, 5)] sim_step = MapToSurface(previous_task=cp_factory, target_faces=[target_face], dof_constraints=dof_constraints ) print('initial position\n', cp_factory.formed_object.x) print('target position:\n', sim_step.x_1) # end return sim_step
def _get_interlock_plate(self): f = self.factory_task N_h, N_i = f.N_h, f.N_i x_1 = self.fold_angle_cntl.x_1 N_h_F = N_h[::3, :] N_i_F = N_i[1::3, :] F_lower = np.array( [N_i_F, N_h_F[:-1, :-1], N_h_F[1:, :-1]], dtype=np.float_) F_upper = np.array( [N_i_F, N_h_F[:-1, 1:], N_h_F[1:, 1:]], dtype=np.float_) F_I = np.vstack([F_lower.reshape(3, -1).T, F_upper.reshape(3, -1).T]) L_F_I = F_I[:, [[0, 1], [1, 2], [2, 0]]] L_I = np.unique(L_F_I.reshape(-1, 2), axis=1) ft = CustomCPFactory( formed_object=CreasePatternState( X=x_1, L=L_I, F=F_I)) return ft
def create_cp_factory(): # begin from oricreate.api import CreasePatternState, CustomCPFactory x = np.array([[0, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [0, 1, 0], [2, 1, 0], [0, 2, 0], [1, 2, 0], [3, 2, 0], [4, 2, 0], [2, 3, 0], [4, 3, 0], [0, 4, 0], [1, 4, 0], [2, 4, 0], [4, 4, 0], ], dtype='float_') L = np.array([[0, 1], [1, 2], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [13, 14], [14, 15], [4, 6], [0, 4], [6, 12], [7, 13], [1, 5], [10, 14], [2, 8], [3, 9], [9, 11], [11, 15], [7, 5], [5, 8], [8, 10], [10, 7] ], dtype='int_') F = np.array([[0, 1, 5, 4], [1, 2, 8, 5], [3, 9, 8, 2], [9, 11, 10, 8], [15, 14, 10, 11], [14, 13, 7, 10], [12, 6, 7, 13], [6, 4, 5, 7], [7, 5, 8, 10] ], dtype='int_') L_range = np.arange(len(L)) x_mid = (x[F[:, 1]] + x[F[:, 3]]) / 2.0 x_mid[:, 2] -= 0.5 n_F = len(F) n_x = len(x) x_mid_i = np.arange(n_x, n_x + n_F) L_mid = np.array([[F[:, 0], x_mid_i[:]], [F[:, 1], x_mid_i[:]], [F[:, 2], x_mid_i[:]], [F[:, 3], x_mid_i[:]]]) L_mid = np.vstack([L_mid[0].T, L_mid[1].T, L_mid[2].T, L_mid[3].T]) x_derived = np.vstack([x, x_mid]) L_derived = np.vstack([L, F[:-1, (1, 3)], L_mid]) F_derived = np.vstack([F[:, (0, 1, 3)], F[:, (1, 2, 3)]]) cp = CreasePatternState(X=x_derived, L=L_derived, F=F_derived ) print cp.viz3d cp.viz3d['cp'].L_selection = L_range cp.u[(2, 3, 8, 9), 2] = 0.01 cp.u[(6, 7, 12, 13), 2] = -0.005 cp.u[(10, 11, 14, 15), 2] = 0.005 print 'n_N', cp.n_N print 'n_L', cp.n_L print 'n_free', cp.n_dofs - cp.n_L cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory, L_range
''' Created on 13.04.2016 @author: jvanderwoerd ''' from oricreate.api import CreasePatternState, CustomCPFactory import matplotlib.pyplot as plt cp = CreasePatternState(X=[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, 0] ], L=[[0, 1], [1, 2], [2, 3], [3, 0], [0, 4], [1, 4], [2, 4], [3, 4]], F=[[0, 1, 4], [1, 2, 4], [4, 3, 2], [4, 3, 0]] ) cp_factory = CustomCPFactory(formed_object=cp) fig, ax = plt.subplots() cp.plot_mpl(ax, facets=True, lines=True, linewidth=2, fontsize=30) plt.show()
G_du[l, j, :] += 2 * v_0 - 2 * u_i + 2 * u_j # reshape the 3D matrix to a 2D matrix # with rows for crease lines and columns representing # the derivatives with respect to the node displacements # in 3d. # G_du = G_du.reshape(cp.n_L, cp.n_N * cp.n_D) return G_du if __name__ == '__main__': from oricreate.api import CreasePatternState, CustomCPFactory cp = CreasePatternState(X=[[-4, -5, -3], [0, 0.0, 0], [1.0, 0.1, 0], ], L=[[0, 1], [1, 2], [2, 0]], ) forming_task = CustomCPFactory(formed_object=cp) constant_length = GuConstantLength(forming_task) U = np.zeros_like(cp.X) U[2] += 1.0 print([constant_length.get_G(U, 0)]) print([constant_length.get_G_du(U, 0)])
def _get_x(self): return self.x_t[self.time_step] u = Property '''Current displacement . ''' def _get_u(self): print('TIME STEP', self.time_step) return self.u_t[self.time_step] if __name__ == '__main__': # trivial example with a single triangle positioned from oricreate.api import CreasePatternState cp = CreasePatternState(x_0=[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0.667, 0.333, 0], [0.1, 0.05, 0]], L=[[0, 1], [1, 2], [2, 0]], F=[[0, 1, 2]]) print('vectors\n', cp.L_vectors) print('lengths\n', cp.L_lengths) cp.u = np.zeros_like(cp.x_0) cp.u[:, 2] = 1.0 print('x\n', cp.x)
def create_cp_factory(n=4, b=1): ''' define quantity of facets number of facets=2n-1 n = 4 ''' # create coordinates # number of coordinates num_coord = 2 * n + 1 # create array X = np.zeros((num_coord, 3)) X[n + 1:2 * n + 1, 1] = b i = 1 while i <= n: X[i, 0] = i X[n + i, 0] = i i = i + 1 print('X', X) # create lines # number of lines num_lines = 4 * n - 1 # create array L = np.zeros((num_lines, 2)) i = 0 while i <= n - 1: j = 3 * i L[j, 0] = i L[j, 1] = i + 1 i = i + 1 i = 0 while i + 1 <= n: j = 3 * i + 1 L[j, 0] = i + 1 L[j, 1] = i + n + 1 i = i + 1 i = 0 while i + 2 <= n + 1: j = 3 * i + 2 L[j, 0] = i + 1 + n L[j, 1] = i i = i + 1 i = 0 while i <= n - 2: j = i + n + 1 L[3 * n + i, 0] = j k = i + n + 2 L[3 * n + i, 1] = k i = i + 1 print('L', L) # create facets # number of facets num_facet = 2 * n - 1 # create array F = np.zeros((num_facet, 3)) i = 0 while i <= n - 1: F[i, 0] = i F[i, 1] = i + 1 F[i, 2] = i + n + 1 i = i + 1 i = 1 while i <= n - 1: F[n + i - 1, 0] = i F[n + i - 1, 1] = i + n + 1 F[n + i - 1, 2] = i + n i = i + 1 print('F', F) cp = CreasePatternState(X=X, L=L, F=F ) cp_factory = CustomCPFactory(formed_object=cp) return cp_factory
def _get_factory_task(self): X = np.array( [[0, 0], [3, 0], [-0.5, 1.936491673103709], [-3.5, 1.936491673103709], [-1.90625, -0.6051536478449089], [-1.7421875, -3.600664204677208], [0.1640625, -2.995510556832299], [-4, 3.872983346207417], [-1, 3.872983346207417], [1.625, 5.325352101035199], [-7, 3.872983346207417], [-6.5, 1.936491673103709], [-3.6484375, -4.205817852522117], [-3.8125, -1.210307295689817], [-1.578125, -6.596174761509507], [0.328125, -5.991021113664598], [-3.5, 5.809475019311126], [-5.40625, 6.414628667156034], [-1.4140625, -9.591685318341806], [0.4921875, -8.986531670496896], [-1.906250000000001, 8.351120340259744], [-4.906250000000001, 8.351120340259742]], dtype=np.float_) X = np.c_[X[:, 0], X[:, 1], X[:, 0] * 0] L = [ [1, 2], # *** [2, 3], [1, 3], [1, 4], # *** [3, 4], [1, 5], # *** [4, 5], [1, 6], # *** [5, 6], [1, 7], [6, 7], [4, 8], [3, 8], [8, 9], [3, 9], [9, 10], [3, 10], [4, 11], [8, 11], [4, 12], [11, 12], [6, 13], [5, 13], [13, 14], [5, 14], [7, 15], [6, 15], [7, 16], [15, 16], [11, 17], [8, 17], [11, 18], [17, 18], [16, 19], [15, 19], [16, 20], [19, 20], [18, 21], [17, 21], [18, 22], [21, 22], ] L = np.array(L, dtype=np.int_) - 1 F = [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 6], [2, 9, 8], [2, 8, 7], [2, 7, 3], [3, 7, 10], [3, 10, 11], [16, 10, 7], [16, 17, 10], [16, 20, 17], [17, 20, 21], [14, 6, 5], [14, 15, 6], [14, 18, 15], [15, 18, 19], [4, 13, 12], [4, 12, 5]] F = np.array(F, dtype=np.int_) cp = CreasePatternState(X=X, L=L, F=F) return CustomCPFactory(formed_object=cp)
image.actor.orientation = orientation #imshow.module_manager.scalar_lut_manager.lut.table = lut # print 'xxx' # imshow.module_manager.scalar_lut_manager.load_lut_from_list(lut) # print 'yyy' return image if __name__ == '__main__': from oricreate.api import CreasePatternState, CustomCPFactory, FTV from oricreate.crease_pattern import \ CreasePatternBasesViz3D cp = CreasePatternState(X=[[0, 0, 0], [2, 0, 0], [0, 1, 0]], L=[[0, 1], [1, 2], [2, 0]], F=[[0, 1, 2], ]) cp_factory = CustomCPFactory(formed_object=cp) eftlogo_bases = CreasePatternBasesViz3D( label='EFT bases', vis3d=cp) efttitle_viz3d = FacetsWithImageViz3D(label='EFT title', F_ref=[0], N_ref=[0], F_covered=[[0, 0]], atimes=[0.0], im_files=['eft_01.png'], im_widths=[2], im_offsets=[[0, 0, 0.001]],
def create_cp_factory(): # begin from oricreate.api import CreasePatternState, CustomCPFactory x = np.array([[0, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [0, 1, 0], [2, 1, 0], [0, 2, 0], [1, 2, 0], [3, 2, 0], [4, 2, 0], [2, 3, 0], [4, 3, 0], [0, 4, 0], [1, 4, 0], [2, 4, 0], [4, 4, 0], ], dtype='float_') L = np.array([[0, 1], [1, 2], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11], [12, 13], [13, 14], [14, 15], [4, 6], [0, 4], [6, 12], [7, 13], [1, 5], [10, 14], [2, 8], [3, 9], [9, 11], [11, 15], [7, 5], [5, 8], [8, 10], [10, 7] ], dtype='int_') F = np.array([[0, 1, 5, 4], [1, 2, 8, 5], [3, 9, 8, 2], [9, 11, 10, 8], [15, 14, 10, 11], [14, 13, 7, 10], [12, 6, 7, 13], [6, 4, 5, 7], [7, 5, 8, 10] ], dtype='int_') L_range = np.arange(len(L)) x_mid = (x[F[:, 1]] + x[F[:, 3]]) / 2.0 x_mid[:, 2] -= 0.5 n_F = len(F) n_x = len(x) x_mid_i = np.arange(n_x, n_x + n_F) L_mid = np.array([[F[:, 0], x_mid_i[:]], [F[:, 1], x_mid_i[:]], [F[:, 2], x_mid_i[:]], [F[:, 3], x_mid_i[:]]]) L_mid = np.vstack([L_mid[0].T, L_mid[1].T, L_mid[2].T, L_mid[3].T]) x_derived = np.vstack([x, x_mid]) L_derived = np.vstack([L, F[:-1, (1, 3)], L_mid]) F_derived = np.vstack([F[:, (0, 1, 3)], F[:, (1, 2, 3)]]) cp = CreasePatternState(X=x_derived, L=L_derived, F=F_derived ) print(cp.viz3d) cp.viz3d['cp'].L_selection = L_range cp.u[(2, 3, 8, 9), 2] = 0.01 cp.u[(6, 7, 12, 13), 2] = -0.005 cp.u[(10, 11, 14, 15), 2] = 0.005 print('n_N', cp.n_N) print('n_L', cp.n_L) print('n_free', cp.n_dofs - cp.n_L) cp_factory = CustomCPFactory(formed_object=cp) # end return cp_factory, L_range
def _formed_object_default(self): return CreasePattern(X=[0, 0, 0]) traits_view = View( VGroup( HGroup( Item('node', springy=True) ), UItem('formed_object@'), ), resizable=True, title='Custom Factory' ) if __name__ == '__main__': from oricreate.api import CreasePatternState cp = CreasePatternState(X=[[0, 0, 0], [1, 1, 0]], L=[[0, 1]]) yf = CustomCPFactory(formed_object=cp) cp = yf.formed_object yf.configure_traits() import pylab as p cp.plot_mpl(p.axes()) p.show()
def _get_factory_task(self): dx = self.L_blue dy = self.L_blue * np.sin(np.pi / 3) x1 = np.linspace(0, 4 * dx, 5) x2 = np.linspace(0, 5 * dx, 6) row0 = np.c_[dx + x1, np.zeros_like(x1), np.zeros_like(x1)] row1 = np.c_[-dx / 2 + x2, dy + np.zeros_like(x2), np.zeros_like(x2)] row2 = np.c_[x2, 2 * dy + np.zeros_like(x2), np.zeros_like(x2)] row3 = np.c_[-dx / 2 + x1, 3 * dy + np.zeros_like(x1), np.zeros_like(x1)] X = np.vstack([row0, row1, row2, row3]) L = [[0, 6], # 0 [2, 8], # 1 *** [3, 9], [4, 10], [0, 7], [1, 8], # 5 [2, 9], [3, 10], # 7 *** [1, 2], [3, 4], [6, 11], # 10 *** [7, 12], # 11 *** [8, 13], # 12 *** [9, 14], # 13 *** [10, 15], # 14 *** [5, 11], # 15 [6, 12], # 16 *** [7, 13], # 17 *** [8, 14], # 18 *** [9, 15], # 19 *** [10, 16], # 20 [5, 6], [6, 7], # 22 *** [7, 8], [8, 9], # 24 *** [9, 10], # 25 *** [11, 18], # 26 *** [12, 19], [13, 20], [14, 21], [11, 17], # 30 [12, 18], # 31 [13, 19], # 32 *** [15, 21], [11, 12], # 34 *** [12, 13], # 35 *** [13, 14], # 36 [14, 15], # 37 *** [15, 16], # 38 [17, 18], [19, 20] # 40 ] F = [[0, 7, 6], [1, 2, 8], [2, 9, 8], [3, 10, 9], [3, 4, 10], [5, 6, 11], [6, 12, 11], [6, 7, 12], [7, 13, 12], [7, 8, 13], [8, 14, 13], [8, 9, 14], [9, 15, 14], [9, 10, 15], [10, 16, 15], [11, 18, 17], [11, 12, 18], [12, 13, 19], [13, 20, 19], [14, 15, 21] ] cp = CreasePatternState(X=X, L=L, F=F) return CustomCPFactory(formed_object=cp)
from oricreate.api import \ CreasePatternState, CustomCPFactory, \ MapToSurface, FoldRigidly, FormingView from oricreate.fu import \ FuPotentialEnergy cp = CreasePatternState(X=[[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 0], [2, 0, 0], [2, 1, 0], [3, 0, 0], [3, 1, 0]], L=[[0, 1], [0, 2], [2, 3], [1, 3], [0, 3], [2, 3], [2, 4], [4, 5], [3, 5], [2, 5], [4, 5], [4, 6], [6, 7], [5, 7], [4, 7], ], F=[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7] ] ) cf = CustomCPFactory(formed_object=cp) init = MapToSurface(previous_task=cf) init.u_1 fold = FoldRigidly(previous_task=init, n_steps=1, acc=1e-6, MAX_ITER=500,