コード例 #1
0
void WireSet::threadedFunction() {
    while (ofThread::isThreadRunning()) {
        lock();
        if (!finishedWires) {
            addWire();

            if (radius > 14.0f) {
                calc();
                finishedWires = true;
            }
        } else
            fillWire(0.04f, 0.02f);
        unlock();
    }
}
コード例 #2
0
ファイル: wire.cpp プロジェクト: Krerg/VizPROC
void Wire::connectWire(Wire *w, int wirePart)
{
    //добавляем провод в список проводов
    this->wires->append(w);
    //устанавливаем такой же список и на присоединяемый провод
    delete w->getConnectedWires();
    w->setWireList(wires);
    QPoint* last = w->getPath()->last();
    QPoint* beforeLast = w->getPath()->at(w->getPath()->size()-2);

        //присоединяем в ближайшей точке
    QPoint *tmp1 = this->path->at(--wirePart);
    QPoint *tmp2 = this->path->at(++wirePart);

    //делим провод на 2
    Wire* secondWire = new Wire();
    int index=0;
    if(abs(tmp1->x()-last->x())+abs(tmp1->y()-last->y())<10) {
         if(last->x()==beforeLast->x()) {
                last->setX(tmp1->x());
                last->setY(tmp1->y());
                beforeLast->setX(tmp1->x());
                index = wirePart-1;
            } else {
                last->setX(tmp1->x());
                last->setY(tmp1->y());
                beforeLast->setY(tmp1->y());
                index = wirePart-1;
            }
        } else if (abs(tmp2->x()-last->x())+abs(tmp2->y()-last->y())<10){
            index = wirePart;
            if(last->x()==beforeLast->x()) {
                last->setX(tmp2->x());
                last->setY(tmp2->y());
                beforeLast->setX(tmp2->x());
            } else {
                last->setX(tmp2->x());
                last->setY(tmp2->y());
                beforeLast->setY(tmp2->y());
            }
        } else {
            //если нету ближайшей точки, то присоединяем так
            if(tmp1->x()==tmp2->x()) {
                last->setX(tmp1->x());
            } else if(tmp1->y()==tmp2->y()) {
                last->setY(tmp1->y());
            } else {
                //emmit error
            }
            index = wirePart;
            secondWire->addPoint(new QPoint(last->x(),last->y()));
        }


    if(this->wireConnector!=NULL) {
        secondWire->setWireConnector(this->wireConnector);
    }

    //надо добавить в список отрисовываемых объектов
    this->wireConnector = new WireConnector(last->x(),last->y());

    for(int i=index;i!=this->path->size();i++) {
        QPoint *point = path->at(i);
        secondWire->addPoint(point);
    }

    if(connected2!=NULL) {
        secondWire->endConnection(this->connected2);
        //вот это поворот
        this->connected2=NULL;
    }

    int count = this->path->size()-index;

    for(int i=0;i<(count);i++) {
        this->path->removeLast();
    }
    this->path->append(new QPoint(last->x(),last->y()));

    this->wires->append(secondWire);
    secondWire->setWireList(wires);

    emit addWire(secondWire);
}
コード例 #3
0
ファイル: jabo.c プロジェクト: Garvit/code-backup
int main()
{
    int n,r,c,temp,x1,x2,y1,y2,i,j,vs1,vs2,val[123]={0}, num[52][52];
    Group **board;
	Set *set1, *set2;
    char type;
    char input[20];
    for(i=65; i<=90; i++)
		val[i] = i-65;
        for(i=97; i<=122; i++)
		val[i] = (i-97)+26;

	for(i=0; i<52; i++)
	{
		for(j=0; j<52; j++)
		{
			num[i][j] = 52*i + j;
		}
	}

    scanf("%d %d %d",&n,&r,&c);
    getchar();
     board = (Group**) malloc(r*sizeof(Group*));
	for(i=0; i<r; i++)
	{
		board[i] = (Group*) malloc(c*sizeof(Group));
		for(j=0; j<c; j++)
		{
			board[i][j].next = NULL;
			board[i][j].set = NULL;
			board[i][j].vs = 0;
		}
	}
    while(n--)
    {
        gets(input);
        type=input[0];
        switch(type)
        {
            case 'W':
                x1 = num[val[input[1]]][val[input[2]]];
                y1 = num[val[input[3]]][val[input[4]]];
				x2 = num[val[input[5]]][val[input[6]]];
				y2 = num[val[input[7]]][val[input[8]]];
				addWire(&board[(y1-1)/5][x1-1],&board[(y2-1)/5][x2-1]);
				break;
			case 'V':
                x1 = num[val[input[1]]][val[input[2]]];
                y1 = num[val[input[3]]][val[input[4]]];
                addVoltage(&board[(y1-1)/5][x1-1]);
                break;
           case 'R':
                x1 = num[val[input[1]]][val[input[2]]];
                y1 = num[val[input[3]]][val[input[4]]];
                remVoltage(&board[(y1-1)/5][x1-1]);
                break;
           case 'L':
                x1 = num[val[input[1]]][val[input[2]]];
                y1 = num[val[input[3]]][val[input[4]]];
				x2 = num[val[input[5]]][val[input[6]]];
				y2 = num[val[input[7]]][val[input[8]]];
				vs1 = board[(y1-1)/5][x1-1].vs;
                vs2 = board[(y2-1)/5][x2-1].vs;
				set1 = board[(y1-1)/5][x1-1].set;
				set2 = board[(y2-1)/5][x2-1].set;
				vs1 = (set1!=NULL)?(set1->vs):(vs1);
                vs2 = (set2!=NULL)?(set2->vs):(vs2);
				if( (vs1==0&&vs2==0) || (vs1>0&&vs2>0) )
                printf("OFF\n");
				else
					printf("ON\n");
				break;
        }

    }
    for(i=0; i<r; i++)
	{
		free(board[i]);
	}
	free(board);
    return 0;
}