예제 #1
0
파일: Partition.cpp 프로젝트: vujn/chenan
void Partition::GetAxisData(stp_axis2_placement_3d* axis, GeometryData& data)
{
	CVector3D cV1(axis->axis()->direction_ratios()->get(0), axis->axis()->direction_ratios()->get(1), axis->axis()->direction_ratios()->get(2));
	if(axis->ref_direction())
	{
		CVector3D cV2(axis->ref_direction()->direction_ratios()->get(0), axis->ref_direction()->direction_ratios()->get(1), axis->ref_direction()->direction_ratios()->get(2));
		data.verRefDirection = cV2;
	}
	else
	{
		CVector3D cV2(0.0, 0.0, 0.0);
		data.verRefDirection = cV2;
	}
	CPoint3D cP(axis->location()->coordinates()->get(0), axis->location()->coordinates()->get(1), axis->location()->coordinates()->get(2));
	cP /= ZOOMTIME;
	data.verAxis = cV1;
	data.point = cP;
}
int main(int argc, char *argv[])
{
#   include "setRootCase.H"
#   include "createTime.H"
#   include "createMesh.H"
#   include "createRandom.H"    

    reducedUnits rU(runTime, mesh);

    constantMoleculeProperties cP (mesh, rU);
        
    polyMoleculeCloud molecules
    (
        runTime,
        mesh,
        rU,
        cP,
        rndGen,
        "mdInitialise",
        true
    );    
    
    IOstream::defaultPrecision(15);

    if (!mesh.write())
    {
        FatalErrorIn(args.executable())
            << "Failed writing moleculeCloud."
            << nl << exit(FatalError);
    }

    Info<< nl << "ClockTime = " << runTime.elapsedClockTime() << " s"
        << nl << endl;

    Info << nl << "End\n" << endl;

    return 0;
}
예제 #3
0
void Cell::update(){
	upToDate = false;
	if(upToDate){
		return;
	}

	numberOfFaces = 0;
	vertices.clear();

	if(faces(N) != 0 && faces(N)->isUncovered()){
		numberOfFaces++;
		Vertex * A, * B;
		A = (faces(N))->getVertexA(); // NW
		B = (faces(N))->getVertexB(); // NE
		if(vertices.empty()){
			vertices.push_back(A);
			vertices.push_back(B);
		}
		else{
			if(A != vertices.back()){
				vertices.push_back(A);
			}
			if(B != vertices.front()){
				vertices.push_back(B);
			}
		}
	}
	if(faces(E) != 0 && faces(E)->isUncovered()){
		numberOfFaces++;
		Vertex * A, * B;
		A = (faces(E))->getVertexA(); // SE
		B = (faces(E))->getVertexB(); // NE
		if(vertices.empty()){
			vertices.push_back(B);
			vertices.push_back(A);
		}
		else{
			if(B != vertices.back()){
				vertices.push_back(B);
			}
			if(A != vertices.front()){
				vertices.push_back(A);
			}
		}
	}
	if(faces(S) != 0 && faces(S)->isUncovered()){
		numberOfFaces++;
		Vertex * A, * B;
		A = (faces(S))->getVertexA();
		B = (faces(S))->getVertexB();
		if(vertices.empty()){
			vertices.push_back(B);
			vertices.push_back(A);
		}
		else{
			if(B != vertices.back()){
				vertices.push_back(B);
			}
			if(A != vertices.front()){
				vertices.push_back(A);
			}
		}
	}
	if(faces(W) != 0 && faces(W)->isUncovered()){
		numberOfFaces++;
		Vertex * A, * B;
		A = (faces(W))->getVertexA();
		B = (faces(W))->getVertexB();
		if(vertices.empty()){
			vertices.push_back(A);
			vertices.push_back(B);
		}
		else{
			if(A != vertices.back()){
				vertices.push_back(A);
			}
			if(B != vertices.front()){
				vertices.push_back(B);
			}
		}
	}
	if(faces(B) != 0){
		numberOfFaces++;
	}

	/*vector<Vertex*>::iterator it;
	cout << "Here are the vertices: " << endl;
	for(it = vertices.begin(); it != vertices.end(); it++){
		cout << (*it)->getCoord() << ". " << (*it) << endl;
	}*/
/*
	for(int k = 0; k < faces.length()-1; k++){
		if(faces(k) != 0){
			numberOfFaces++;
			Vertex * A, * B;
			A = (faces(k))->getVertexA();
			B = (faces(k))->getVertexB();
			if(vertices.empty()){
				vertices.push_back(A);
				vertices.push_back(B);
			}
			else{
				if(A != vertices.back()){
					vertices.push_back(A);
				}
				if(B != vertices.front()){
					vertices.push_back(B);
				}
			}
		}
	}*/
	numberOfVertices = vertices.size();

	double signedVolume = 0;
	for(int k = 0; k < vertices.size(); k++){
		int kP = (k+1) % vertices.size();
		Coord c, cP;
		c = vertices[k]->getCoord();
		cP = vertices[kP]->getCoord();
		signedVolume += c(0)*cP(1) - cP(0)*c(1);
	}
	signedVolume /= 2;
	if(!overrideVolume){
		volume = abs(signedVolume);
	}

	centroid = 0;
	for(int k = 0; k < vertices.size(); k++){
		int kP = (k+1) % vertices.size();
		Coord c, cP;
		c = vertices[k]->getCoord();
		cP = vertices[kP]->getCoord();
		double temp = c(0)*cP(1) - cP(0)*c(1);
		centroid(0) += (c(0)+cP(0))*temp;
		centroid(1) += (c(1)+cP(1))*temp;
	}
	centroid /= 6*signedVolume;

	//upToDate = true;
}