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)); }
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() ); }
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; }
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 }
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) ); } }
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)); } }
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; }
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; }
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; }
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; }
Line3d Triangle3d::getEdgeLine0 ( void ) const { return Line3d(getCornerA(),getEdgeDir0()); }
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) )); }
Line3d orient(Viewpoint v) { return Line3d(a.orient(v),b.orient(v)); }
Line3d Prism::side_edge(unsigned int i) const { return Line3d(base_vertices_[i]->point(), top_vertices_[i]->point()); }
Line3d Triangle3d::getEdgeLine2 ( void ) const { return Line3d(getCornerC(),getEdgeDir2()); }
Line3d Triangle3d::getEdgeLine1 ( void ) const { return Line3d(getCornerB(),getEdgeDir1()); }
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; }
Line3d Triangle3d::getEdgeLine ( int whichEdge ) const { return Line3d(getCorner(whichEdge),getEdgeDir(whichEdge)); }