string Element_ToBytes(Element &e) { int data_len; string encoded= ""; if(e.type == Str_t) { return string(e.strPtr); } else if(e.type == ZR_t) { data_len = compute_length(e.type); uint8_t data[data_len+1]; memset(data, 0, data_len); bn_write_bin(data, data_len, e.zr.z); string t((char *) data, data_len); encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size()); memset(data, 0, data_len); } else if(e.type == G1_t) { data_len = compute_length(e.type); uint8_t data[data_len+1]; memset(data, 0, data_len); g1_write_bin(e.g1.g, data, data_len); string t((char *) data, data_len); encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size()); memset(data, 0, data_len); } else if(e.type == G2_t) { data_len = compute_length(e.type); uint8_t data[data_len+1]; memset(data, 0, data_len); g2_write_bin(e.g2.g, data, data_len); string t((char *) data, data_len); encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size()); memset(data, 0, data_len); } else if(e.type == GT_t) { data_len = compute_length(e.type); uint8_t data[data_len+1]; memset(data, 0, data_len); gt_write_bin(e.gt.g, data, data_len); // x1-6 && y1-6 string t((char *) data, data_len); encoded = _base64_encode(reinterpret_cast<const unsigned char*>(t.c_str()), t.size()); memset(data, 0, data_len); } return encoded; }
void build_constraints(Mesh* mesh_ptr) { mesh_ptr->numConstraints = (CLOTH_WIDTH * CLOTH_HEIGHT * 2) - CLOTH_WIDTH - CLOTH_HEIGHT; mesh_ptr->constraintsBufferSize = mesh_ptr->numConstraints * 4; NSLog(@"rezerwacja pamieci dla bufora (rezerwaca 4 razy wiekszy niz potrzeba) mesh_ptr->constraints (ilosc: %d)", mesh_ptr->constraintsBufferSize); mesh_ptr->constraints = (Constraint*)alloc_mem(1, sizeof(Constraint) * mesh_ptr->constraintsBufferSize); int i = 0; for (int y=0; y<CLOTH_HEIGHT; y++) { for (int x=0; x<CLOTH_WIDTH; x++) { if ((x+1) < CLOTH_WIDTH) { mesh_ptr->constraints[i].x1 = x; mesh_ptr->constraints[i].y1 = y; mesh_ptr->constraints[i].x2 = x+1; mesh_ptr->constraints[i].y2 = y; mesh_ptr->constraints[i].index0 = x + (y * CLOTH_WIDTH); mesh_ptr->constraints[i].index1 = x + 1 + (y * CLOTH_WIDTH); mesh_ptr->constraints[i].v0 = &mesh_ptr->vertices[x + (y * CLOTH_WIDTH)]; mesh_ptr->constraints[i].v1 = &mesh_ptr->vertices[x + 1 + (y * CLOTH_WIDTH)]; mesh_ptr->constraints[i].length = compute_length(mesh_ptr->constraints[i].v0->current, mesh_ptr->constraints[i].v1->current); mesh_ptr->constraints[i].inv_length = 1/mesh_ptr->constraints[i].length; i++; } if ((y+1) < CLOTH_HEIGHT) { mesh_ptr->constraints[i].x1 = x; mesh_ptr->constraints[i].y1 = y; mesh_ptr->constraints[i].x2 = x; mesh_ptr->constraints[i].y2 = y+1; mesh_ptr->constraints[i].index0 = x + (y * CLOTH_WIDTH); mesh_ptr->constraints[i].index1 = x + CLOTH_WIDTH + (y * CLOTH_WIDTH); mesh_ptr->constraints[i].v0 = &mesh_ptr->vertices[x + (y * CLOTH_WIDTH)]; mesh_ptr->constraints[i].v1 = &mesh_ptr->vertices[x + CLOTH_WIDTH + (y * CLOTH_WIDTH)]; mesh_ptr->constraints[i].length = compute_length(mesh_ptr->constraints[i].v0->current, mesh_ptr->constraints[i].v1->current); mesh_ptr->constraints[i].inv_length = 1/mesh_ptr->constraints[i].length; i++; } if (i > mesh_ptr->numConstraints) { NSLog(@"!!!! brakuje miejsca dla constraintow, petla: %d, (%d, %d)", mesh_ptr->numConstraints, i, x, y); break; } mesh_ptr->constraints[i].ignore = true; } if (i > mesh_ptr->numConstraints) break; } if (i != mesh_ptr->numConstraints) { NSLog(@"constraintow: %d, petla: %d", mesh_ptr->numConstraints, i); } return; }