int main() { double V0[] = {1,0,0, 0,1,0, 0,0,0, 0,0,1}; std::vector<double> Vertices(V0, V0+12); Tetrahedron::SetGlobalCoordinatesArray(Vertices); Triangle<3>::SetGlobalCoordinatesArray(Vertices); Segment<3>::SetGlobalCoordinatesArray(Vertices); P13DElement<2> Elm(1,2,3,4); P13DElementBoundaryTraces<2> EBT(Elm, true, false, true, true, P13DTrace<2>::ThreeDofs); std::cout<<"\n Number of Traces: "<<EBT.getNumTraceFaces()<<" should be 3. \n"; for(unsigned int a=0; a<3; a++) // Change to test different/all traces. { int facenumber = EBT.getTraceFaceIds()[a]; std::cout<<" \n FaceNumber :"<<facenumber<<"\n"; std::cout<<"\n Normal to face: "; for(unsigned int q=0; q<EBT.getNormal(a).size(); q++) std::cout<< EBT.getNormal(a)[q]<<", "; std::cout<<"\n"; } for(unsigned int a=0; a<1; a++) { int facenumber = EBT.getTraceFaceIds()[a]; std::cout<<"\nFace Number :"<<facenumber<<"\n"; const Element &face = EBT[a]; // Integration weights: std::cout<<"\n Integration weights: \n"; for(unsigned int q=0; q<face.getIntegrationWeights(0).size(); q++) std::cout<<face.getIntegrationWeights(0)[q]<<", "; // Integration points: std::cout<<"\n Integration point coordinates: \n"; for(unsigned int q=0; q<face.getIntegrationPtCoords(0).size(); q++) std::cout<<face.getIntegrationPtCoords(0)[q]<<", "; // Shape functions: std::cout<<"\n Shape Functions at quadrature points: \n"; for(unsigned int q=0; q<face.getShapes(0).size(); q++) std::cout<<face.getShapes(0)[q]<<", "; std::cout<<"\n"; } }
/* w blob_number identyfikator obiektu binarnego w tabeli tblob */ long db2_bmd_db_export_blob(void *hDB,GenBuf_t *dataGenBuf,char **blob_number) { DB_bmd_db_conn_t *db_conn=NULL; long err=0; #ifndef BLOB_IN_BYTEA long lobj_fd=0,tmp=0; Oid lobjId ; #else char *SQLQuery = NULL; char *c_tmp = NULL; long fetched_counter = 0; long rows = 0; long cols = 0; //Oid in_oid[]={0,17}; /* varchar, bytea */ char* params[]={NULL,NULL}; //{chunk_size,bobj}; int params_length[2]={0,0}; //nalezy ustawic rozmiary przynajmniej dla danych nie tekstowych //int params_format[2]={0,1}; /* text,binary */ void *bmd_db_res = NULL; SQLRETURN rc; #endif PRINT_INFO("LIBBMDPGINF Exporting file to LO\n"); if (hDB==NULL) return BMD_ERR_PARAM1; if (dataGenBuf == NULL) { BMD_FOK(BMD_ERR_PARAM2); } if (blob_number == NULL) { BMD_FOK(BMD_ERR_PARAM3); } if ((*blob_number) != NULL) { BMD_FOK(BMD_ERR_PARAM3); } if( (*((long *)hDB)) != BMD_DBCONN_MAGIC ) return BMD_ERR_INVALID_PTR; db_conn=(DB_bmd_db_conn_t *)hDB; if( db_conn->hdbc == NULL ) return BMD_ERR_NODATA; SBT(hDB,db_conn); /* * Utworz large object. */ #ifndef BLOB_IN_BYTEA //lobjId = lo_creat(db_conn->pg_conn, INV_READ | INV_WRITE); if( lobjId == 0) { RBT(hDB,db_conn); PRINT_ERROR("LIBBMDPGERR Error in creating large object - lo_creat.\n"); return BMD_ERR_OP_FAILED; } //lobj_fd = lo_open(db_conn->pg_conn, lobjId, INV_WRITE); //if(lobj_fd == -1) { RBT(hDB,db_conn); BMD_FOK(BMD_ERR_OP_FAILED); } //tmp = lo_write(db_conn->pg_conn, lobj_fd, (char *)dataGenBuf->buf, dataGenBuf->size); if(tmp < dataGenBuf->size) { RBT(hDB,db_conn); BMD_FOK(BMD_ERR_OP_FAILED); } //(void) lo_close(db_conn->pg_conn, lobj_fd); asprintf(blob_number, "%li", (long)lobjId); #else /* pobierz sekwencj� numeru obiektu binarnego lobjId (blob_number)*/ asprintf(&SQLQuery, "VALUES NEXT VALUE FOR co_raster_id"); ; if(SQLQuery == NULL) return NO_MEMORY; err = db2_bmd_db_execute_sql( hDB, SQLQuery, &rows, &cols, (void **)&bmd_db_res); /**if(SQLQuery != NULL) */{ free(SQLQuery); SQLQuery=NULL; } if(err<BMD_OK) { PRINT_ERROR("LIBBMDSQLERR Error in while execute VALUES NEXT VALUE FOR co_raster_id\n"); db2_bmd_db_rollback_transaction(hDB, NULL); if(SQLQuery != NULL) { free(SQLQuery); SQLQuery=NULL; } return err; } err=db2_bmd_db_result_get_value(hDB,(void *)bmd_db_res,0,0,&c_tmp,FETCH_ABSOLUTE,&fetched_counter); if(err<BMD_OK) { PRINT_ERROR("LIBBMDSQLERR Error while getting value\n"); db2_bmd_db_rollback_transaction(hDB, NULL); db2_bmd_db_result_free((void**)&bmd_db_res); if(SQLQuery != NULL) { free(SQLQuery); SQLQuery=NULL; } return err; } db2_bmd_db_result_free((void**)&bmd_db_res); bmd_db_res = NULL; //wlasciwy etap zapisu params[0] = (char *)c_tmp; params[1] = (char *) dataGenBuf->buf; params_length[0] = (int)strlen(c_tmp); params_length[1] = dataGenBuf->size; db_conn = (DB_bmd_db_conn_t *) hDB; SQLCHAR *stmt = ( SQLCHAR * )"INSERT INTO tblob(fk_co_raster_id,bobj) VALUES (?, ?)"; //sizeof(params)/sizeof(params[0]), //in_oid, (const char *const * )params, (const int*)params_length, //(const int*)params_format, 1 rc = SQLAllocHandle(SQL_HANDLE_STMT, *(db_conn->hdbc), db_conn->hstmt); if (rc != SQL_SUCCESS) { PRINT_ERROR("Error while esec sql query: INSERT INTO tblob...\n"); extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT); db2_bmd_db_rollback_transaction(hDB, NULL); return BMD_DB_EXECUTION_ERROR; } rc = SQLBindParameter(*(db_conn->hstmt), 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, params_length[0], 0, params[0], params_length[0], NULL); if (rc != SQL_SUCCESS) { PRINT_ERROR(">--- Error while SQLBindParameter, (SQL_VARCHAR)\n"); extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT); db2_bmd_db_rollback_transaction(hDB, NULL); return BMD_DB_EXECUTION_ERROR; } rc = SQLBindParameter(*(db_conn->hstmt), 2, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BLOB, params_length[1], 0, params[1], params_length[1], NULL); if (rc != SQL_SUCCESS) { PRINT_ERROR(">--- Error while SQLBindParameter, (SQL_BLOB)\n"); extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT); db2_bmd_db_rollback_transaction(hDB, NULL); return BMD_DB_EXECUTION_ERROR; } rc = SQLExecDirect(*(db_conn->hstmt), stmt, SQL_NTS); if (rc != SQL_SUCCESS) { PRINT_ERROR("Driver reported the following diagnostics: "); extract_error("SQLAllocHandle", *(db_conn->hstmt), SQL_HANDLE_STMT); db2_bmd_db_rollback_transaction(hDB, NULL); return BMD_DB_EXECUTION_ERROR; } *blob_number = c_tmp; c_tmp = NULL; //przekazywane na zewnatrz funkcji params[0] = NULL; if (rc == SQL_SUCCESS) { /* success */ err = BMD_OK; } else { PRINT_ERROR("LIBBMDPINFO DBresultStatus(pq_db_res)\n"); db2_bmd_db_rollback_transaction(hDB, NULL); BMD_FOK(BMD_ERR_NODATA); } #endif EBT(hDB,db_conn); return err; }