예제 #1
0
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);
}
예제 #2
0
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;
}
예제 #3
0
RecoveryByL2::~RecoveryByL2()
{

    if(NULL != p){
        delete []p;
        p = NULL;
    }
    if(NULL != v){
        delete []v;
        v = NULL;
    }
    model = NULL;
    faceVector = NULL;

    delInfo();
    delVerThreeSeparateRelation();
}
예제 #4
0
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();
}
예제 #5
0
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();
}
예제 #6
0
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;
}