void NewJoinWidget::createUserItem() { // TODO 数据表列表 stuComboBox = new QComboBox(); stuComboBox->addItem("2012级信息"); stuComboBox->setCurrentIndex(0); stuComboBox->setEnabled(false); connect(stuComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(refresh())); stuLayout = new QVBoxLayout(); stuLayout->addWidget(stuComboBox); // 组装数据浏览 GroupBox stuGroupBox = new QGroupBox(tr("当前显示")); stuGroupBox->setLayout(stuLayout); seniorCheckBox = new QCheckBox(tr("启用自由编辑")); connect(seniorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setSeniorButtonState(int))); submitButton = new QPushButton(tr("提交修改")); submitButton->setEnabled(false); connect(submitButton, SIGNAL(clicked()), this, SLOT(submitDataChange())); restoreButton = new QPushButton(tr("撤销修改")); restoreButton->setEnabled(false); connect(restoreButton, SIGNAL(clicked()), sqlModel, SLOT(revertAll())); seniorLayout = new QVBoxLayout(); seniorLayout->addWidget(seniorCheckBox); seniorLayout->addWidget(submitButton); seniorLayout->addWidget(restoreButton); // TODO 组装高级操作选项的 GroupBox seniorGroupBox = new QGroupBox(tr("高级操作 [请谨慎]")); seniorGroupBox->setLayout(seniorLayout); addButton = new QPushButton(tr("增加成员")); connect(addButton, SIGNAL(clicked()), this, SLOT(addInfo())); changeButton = new QPushButton(tr("修改选中")); connect(changeButton, SIGNAL(clicked()), this, SLOT(changeInfo())); delButton = new QPushButton(tr("删除选中")); connect(delButton, SIGNAL(clicked()), this, SLOT(delInfo())); refreshButton = new QPushButton(tr("刷新数据")); connect(refreshButton, SIGNAL(clicked()), this, SLOT(refresh())); buttonLayout = new QVBoxLayout(); buttonLayout->addWidget(addButton); buttonLayout->addStretch(); buttonLayout->addWidget(changeButton); buttonLayout->addStretch(); buttonLayout->addWidget(delButton); buttonLayout->addStretch(); buttonLayout->addWidget(refreshButton); // 组装数据操作 GroupBox buttonGroupBox = new QGroupBox(tr("数据操作")); buttonGroupBox->setLayout(buttonLayout); }
void L0ByEdge::initInfo() { int i, j; arinfocnt = edgeNum; infocnt = 2 * edgeNum; if(NULL != info){ delInfo(); } info = new Info*[infocnt]; Edge *edgetail = edge; if(NULL == edge || NULL == info){ printf("error in L0ByEdge::getInfo\n"); return ; } for(i = 0;i < edgeNum;i++){ info[i] = new Info[4]; if(NULL == info[i]){ printf("error in L0ByEdge::getInfo----->info[i]\n"); return ; } info[i + arinfocnt] = new Info[4]; if(NULL == info[i]){ printf("error in L0ByEdge::getInfo----->info[i + arinfocnt]\n"); return ; } for(j = 0;j < 4;j++){ info[i][j].data = edgetail->p[j]; info[i][j].cnt = 4; info[i][j].w = 0.0; info[i + arinfocnt][j].data = edgetail->p[j]; info[i + arinfocnt][j].cnt = 4; info[i + arinfocnt][j].w = 0.0; } //printf("%d \n",edgetail->p[0]); edgetail = edgetail->next; } edgetail = NULL; }
RecoveryByL2::~RecoveryByL2() { if(NULL != p){ delete []p; p = NULL; } if(NULL != v){ delete []v; v = NULL; } model = NULL; faceVector = NULL; delInfo(); delVerThreeSeparateRelation(); }
L0ByEdge::~L0ByEdge() { if(v){ for(int i = 0;i < 3;i++){ delete []v[i]; v[i] = NULL; } delete []v; v = NULL; } if(p){ for(int i = 0;i < 3;i++){ delete []p[i]; p[i] = NULL; } delete []p; p = NULL; } delInfo(); }
void RecoveryByL2::doL2(double pbeta) { int i, j; beta = pbeta; p = new double[(int)meshmodel->numvertices * 3 + (int)meshmodel->numtriangles * 3]; v = new double[(int)meshmodel->numvertices * 3]; initInfo(); updateInfo(); initVerThreeSeparateRelation(); for(i = 0;i < (int)meshmodel->numvertices;i++){ for(j = 0;j < 3;j++){ p[i * 3 + j] = model[3 * i + j]; } } for(i = (int)meshmodel->numvertices * 3;i < (int)meshmodel->numvertices * 3 + (int)meshmodel->numtriangles * 3;i++){ p[i] = 0; } SubSolving s_l0(verThreeSeparateRelation, info, infocnt, arinfocnt, (int)meshmodel->numvertices * 3); s_l0.init(); //传入beta,arpha s_l0.getParameter(p, v, info, beta, arpha); s_l0.update(); s_l0.slove(); for(i = 0;i < (int)meshmodel->numvertices;i++){ for(j = 0; j < 3;j++) model[3 * i + j] = v[3 * i + j]; } delInfo(); delVerThreeSeparateRelation(); }
GLMmodel* L0ByEdge::doL0(double parpha, double pbeta, double plambda, int pmaxtimes) { int cc = 1, i, j, k; double tsum[3], sum; //得到边,求info getEdge(); if(pmaxtimes >= 0){ arpha = parpha; beta = pbeta; lambda = plambda; maxtimes = pmaxtimes; }else{ autoGetParameter(); } initInfo(); delEdge(); p = new double*[3]; v = new double*[3]; if(NULL == p || NULL == v){ printf("Error in L0ByEdge::doL0----- p , v\n"); return NULL; } for(i = 0;i < 3;i++){ p[i] = new double[(int)meshmodel->numvertices + infocnt]; v[i] = new double[(int)meshmodel->numvertices]; if(NULL == p[i] || NULL == v[i]){ printf("Error in L0ByEdge::doL0----- p[%d] , v[%d]\n",i,i); return NULL; } } for(i = 0; i < 3;i++){ for(j = 0;j < (int)meshmodel->numvertices;j++){ p[i][j] = model[3 * j + i]; v[i][j] = model[3 * j + i]; } } for(i = (int)meshmodel->numvertices;i < (int)meshmodel->numvertices + arinfocnt;i++){ for(j = 0;j < 3;j++){ p[j][i] = 0; } } //得到排序后二环领域,包括自身点 initVerSpreadNeighborVer(); //稀疏求解初始化 SubSolving s_l0(verSpreadNeighborVer, info, infocnt, arinfocnt, (int)meshmodel->numvertices); s_l0.init(); while(cc <= maxtimes){ updateInfo(); for(i = arinfocnt;i < infocnt;i++){ sum = 0; for(j = 0;j < 3;j++) tsum[j] = 0; for(j = 0;j < 4;j++) { for(k = 0;k < 3;k++){ tsum[k] += info[i][j].w * model[info[i][j].data * 3 + k]; } } for(j = 0;j < 3;j++){ sum += tsum[j] * tsum[j]; } if(sum <= lambda / beta){ for(j = 0;j < 3;j++) p[j][i + (int)meshmodel->numvertices] = 0.0; } else{ for(j = 0;j < 3;j++) p[j][i + (int)meshmodel->numvertices] = beta * tsum[j]; } } //传入beta,arpha s_l0.getParameter(p[0], v[0], info, beta, arpha); s_l0.update(); for(i = 0;i < 3;i++){ //传入p,v s_l0.getParameter(p[i], v[i], info, beta, arpha); s_l0.slove(); for(j = 0;j < (int)meshmodel->numvertices;j++){ model[3 * j + i] = v[i][j]; } } printf("%d\t time finished\n",cc); cc++; beta = beta * sqrt(2); arpha = arpha / 2; } //删除info,和关系链表 delInfo(); delVerSpreadNeighborVer(); for(i = 0;i < (int)meshmodel->numvertices;i++){ for(j = 0;j < 3;j++){ meshmodel->vertices[3 * (i + 1) + j] = model[3 * i + j]; } } return meshmodel; }