Пример #1
0
Plane3DDrawable::Plane3DDrawable(const std::string& n, const Point3d& p, const Point3d& vel):

	Obj3DDrawable(n, p, vel),
	cd(0)
{
	Point3d A(X()+0,Y()+0,Z()+40);
	Point3d B(X()+0,Y()-20,Z()-40);
	Point3d C(X()-40,Y()+0,Z()-40);
	Point3d D(X()-20,Y()+10,Z()-40);
	Point3d E(X()+20,Y()+10,Z()-40);
	Point3d F(X()+40,Y()+0,Z()-40);

	getLines().clear();
	getLines().push_back(Line3d(A, C));
	getLines().push_back(Line3d(A, D));
	getLines().push_back(Line3d(A, B));
	getLines().push_back(Line3d(A, E));
	getLines().push_back(Line3d(A, D));
	getLines().push_back(Line3d(A, F));
	getLines().push_back(Line3d(C, D));
	getLines().push_back(Line3d(D, B));
	getLines().push_back(Line3d(B, E));
	getLines().push_back(Line3d(E, F));

}
Пример #2
0
bool TestYLineOBox ( Vector const & V, OrientedBox const & B )
{
	Vector point = B.transformToLocal(V);
	Vector normal = B.rotateToLocal(Vector::unitY);

	return TestLineABox( Line3d(point,normal), B.getLocalShape() );
}
Пример #3
0
void
AsdkBody::createAxisRevolution(
    const AcGePoint3d vertices[],
    PolygonVertexData* vertexData[],
    int numVertices,
    const AcGeVector3d &normal,
    const AcGePoint3d &axisStart,
    const AcGePoint3d &axisEnd,
    double revolutionAngle,
    int approx,
    const AcGePoint3d &fixedPt,
    double scaleFactor,
    double twistAngle)
{
	assertWriteEnabled();
    m_3dGeom = Body::axisRevolution(
        (Point3d*)vertices,
        vertexData,
        numVertices,
        *(Vector3d*)&normal,
        Line3d(axisStart, axisEnd),
        revolutionAngle * (kPi/180),
        approx,
        *(Point3d*)&fixedPt,
        scaleFactor,
        twistAngle * (kPi/180));
    if (debugMode())
	    if (! m_3dGeom.isValid())
            throw eFail;
}
Пример #4
0
void PDEcone::createBody()
{
    assertWriteEnabled();
//#ifdef _OBJECTARX2004_
    AcGeVector3d faceVect = getFaceVect();
    m_3dGeom = Body::cone(Line3d(*(Point3d*)&m_ptStart, *(Point3d*)&m_ptEnd), *(Vector3d*)&faceVect, m_dDiameter1 / 2.0, m_dDiameter2 / 2.0, m_dDividPrecision);
//#endif
}
Пример #5
0
void main(int argc,String *argv) {
  
  ArgParser a=ArgParser(argc,argv);
  a.done();
  
  randomise();

  for (int i=0;i<20;i++) {
    Line3d la=Line3d(V3d::random(),V3d::random());
    Line3d lb=Line3d(V3d::random(),V3d::random());
    V3d *i=la.intersection(lb);
    if (i==NULL)
      printf("fail\n");
    V3d nor=V3d::cross(la.b-la.a,lb.b-lb.a);
		printf("%f %f\n",
				V3d::normdot(la.b-la.a,nor),
				V3d::normdot(lb.b-lb.a,nor)
		);
	}
		
}
Пример #6
0
Ground3DDrawable::Ground3DDrawable(const std::string& n, Point3d posi, Point3d vel, int w, int l, int lD):
	Obj3DDrawable(n, posi, vel),
	width(w),
	length(l),
	lineDistance(lD)
{

	
	for(int x = X()-length/2; x <=X()+length/2; x +=lineDistance){
		getLines().push_back(Line3d(Point3d(x, 0, Z() -width/2), Point3d(x, 0, Z()+ width/2)));
	}

	for(int z = Z() - width/2; z <= Z() + width/2; z += lineDistance){
		getLines().push_back(Line3d(Point3d(X()-length/2,0,z), Point3d(X() +length/2, 0, z)));
	}

	for(std::vector<Line3d>::iterator i = getLines().begin();i != getLines().end();i ++){
		getProjectedLines(). push_back(Viewpoint::getInstance().lookAtLine3D(*i));
	}


}
Пример #7
0
void 
AsdkBody::createCylinder(const AcGePoint3d& axisStart, const AcGePoint3d& axisEnd, 
    const AcGeVector3d& baseNormal, double radius, int approx)
{
	assertWriteEnabled();
    m_3dGeom = Body::cylinder(
        Line3d(*(Point3d*)&axisStart, *(Point3d*)&axisEnd), 
        *(Vector3d*)&baseNormal, 
        radius, 
        approx);
    if (debugMode())
	    if (! m_3dGeom.isValid())
            throw eFail;
}
Пример #8
0
void 
AsdkBody::createTorus(const AcGePoint3d& axisStart, const AcGePoint3d& axisEnd,
    double majorRadius, double minorRadius, int majorApprox, int minorApprox)
{
	assertWriteEnabled();
    m_3dGeom = Body::torus(
        Line3d(*(Point3d*)&axisStart, *(Point3d*)&axisEnd),
        majorRadius, 
        minorRadius, 
        majorApprox, 
        minorApprox);

    if (debugMode())
	    if (! m_3dGeom.isValid())
            throw eFail;
}
Пример #9
0
void 
AsdkBody::createRectToCircleReducer(
    const AcGePoint3d& baseCorner, 
    const AcGeVector2d& baseSizes,
	const AcGePoint3d& circleCenter, 
    const AcGeVector3d& circleNormal, 
    double circleRadius,
    int approx)
{
	assertWriteEnabled();
	m_3dGeom = 
    Body::rectangleToCircleReducer(
        *(Point3d*)&baseCorner, 
        *(Vector2d*)&baseSizes,
		Circle3d(
            Line3d(
                *(Point3d*)&circleCenter, 
                *(Vector3d*)&circleNormal), 
            circleRadius), 
        approx);
    if (debugMode())
	    if (! m_3dGeom.isValid())
            throw eFail;
}
Пример #10
0
void 
AsdkBody::createPipeConic(
    const AcGePoint3d& axisStart, 
    const AcGePoint3d& axisEnd,
    const AcGeVector3d& baseNormal,
    double outerRadius1, 
    double innerRadius1, 
    double outerRadius2, 
    double innerRadius2,
    int approx)
{
	assertWriteEnabled();
	m_3dGeom = Body::pipeConic(
        Line3d(*(Point3d*)&axisStart, *(Point3d*)&axisEnd),
        *(Vector3d*)&baseNormal,
	    outerRadius1, 
        innerRadius1, 
        outerRadius2, 
        innerRadius2, 
        approx);
    if (debugMode())
	    if (! m_3dGeom.isValid())
            throw eFail;
}
Пример #11
0
Line3d           Triangle3d::getEdgeLine0    ( void ) const 
{ 
    return Line3d(getCornerA(),getEdgeDir0()); 
}
Пример #12
0
void Block3DDrawable::updateLinesPosition(){
	getLines().clear();
	getLines().push_back(Line3d(
				Point3d(X()+dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
				Point3d(X()-dimension.x/2,Y()+dimension.y/2, Z()+ dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()-dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
				Point3d(X()-dimension.x/2,Y()-dimension.y/2, Z()+ dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()-dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
				Point3d(X()+dimension.x/2,Y()-dimension.y/2, Z()+ dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()+dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
				Point3d(X()+dimension.x/2,Y()+dimension.y/2, Z()+ dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()+dimension.x/2,Y()+dimension.y/2,Z() - dimension.z/2),
				Point3d(X()-dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()-dimension.x/2,Y()+dimension.y/2,Z() - dimension.z/2),
				Point3d(X()-dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()-dimension.x/2,Y()-dimension.y/2,Z() - dimension.z/2),
				Point3d(X()+dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
				));
	getLines().push_back(Line3d(
				Point3d(X()+dimension.x/2,Y()-dimension.y/2,Z() - dimension.z/2),
				Point3d(X()+dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
				));


	getLines().push_back(Line3d(
				Point3d(X()+dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
				Point3d(X()+dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
				));

	getLines().push_back(Line3d(
				Point3d(X()-dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
				Point3d(X()-dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
				));

	getLines().push_back(Line3d(
				Point3d(X()-dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
				Point3d(X()-dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
				));

	getLines().push_back(Line3d(
				Point3d(X()+dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
				Point3d(X()+dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
				));


}
Пример #13
0
 Line3d orient(Viewpoint v) {
   return Line3d(a.orient(v),b.orient(v));
 }
Пример #14
0
Line3d Prism::side_edge(unsigned int i) const {
    return Line3d(base_vertices_[i]->point(), top_vertices_[i]->point());
}
Пример #15
0
Line3d           Triangle3d::getEdgeLine2    ( void ) const 
{ 
    return Line3d(getCornerC(),getEdgeDir2()); 
}
Пример #16
0
Line3d           Triangle3d::getEdgeLine1    ( void ) const 
{ 
    return Line3d(getCornerB(),getEdgeDir1()); 
}
Пример #17
0
Block3DDrawable::Block3DDrawable(const std::string& n, const Point3d& p, const Point3d& vel,const Point3d& di,
		double ts,double acc
		):
	Obj3DDrawable(n, p, vel),
	dimension(di),
	direction(getVelocity()),
	topSpeed(ts),
//	topBackSpeed(tbs),
	acceleration(acc),
//	turningRight(false),
//	turningLeft(false),
	accelerating(false){

		//std::cout << X() << std::endl;
		//std::cout << Y() <<std::endl;
		//std::cout << Z() << std::endl;
		//std::cout << dimension.x << std::endl;
		//std::cout << dimension.y << std::endl;
		//std::cout << dimension.z << std::endl;

		getLines().clear();
		getLines().push_back(Line3d(
					Point3d(X()+dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
					Point3d(X()-dimension.x/2,Y()+dimension.y/2, Z()+ dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()-dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
					Point3d(X()-dimension.x/2,Y()-dimension.y/2, Z()+ dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()-dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
					Point3d(X()+dimension.x/2,Y()-dimension.y/2, Z()+ dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()+dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
					Point3d(X()+dimension.x/2,Y()+dimension.y/2, Z()+ dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()+dimension.x/2,Y()+dimension.y/2,Z() - dimension.z/2),
					Point3d(X()-dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()-dimension.x/2,Y()+dimension.y/2,Z() - dimension.z/2),
					Point3d(X()-dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()-dimension.x/2,Y()-dimension.y/2,Z() - dimension.z/2),
					Point3d(X()+dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
					));
		getLines().push_back(Line3d(
					Point3d(X()+dimension.x/2,Y()-dimension.y/2,Z() - dimension.z/2),
					Point3d(X()+dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
					));


		getLines().push_back(Line3d(
					Point3d(X()+dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
					Point3d(X()+dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
					));

		getLines().push_back(Line3d(
					Point3d(X()-dimension.x/2,Y()+dimension.y/2,Z() + dimension.z/2),
					Point3d(X()-dimension.x/2,Y()+dimension.y/2, Z()- dimension.z/2)
					));

		getLines().push_back(Line3d(
					Point3d(X()-dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
					Point3d(X()-dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
					));

		getLines().push_back(Line3d(
					Point3d(X()+dimension.x/2,Y()-dimension.y/2,Z() + dimension.z/2),
					Point3d(X()+dimension.x/2,Y()-dimension.y/2, Z()- dimension.z/2)
					));
		//add lines;
	}
Пример #18
0
Line3d           Triangle3d::getEdgeLine     ( int whichEdge ) const
{
    return Line3d(getCorner(whichEdge),getEdgeDir(whichEdge));
}