예제 #1
0
already_AddRefed<DOMPoint>
ConvertPointFromNode(nsINode* aTo, const dom::DOMPointInit& aPoint,
                     const GeometryNode& aFrom,
                     const dom::ConvertCoordinateOptions& aOptions,
                     ErrorResult& aRv)
{
  if (aPoint.mW != 1.0 || aPoint.mZ != 0.0) {
    aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
    return nullptr;
  }
  CSSPoint point(aPoint.mX, aPoint.mY);
  TransformPoints(aTo, aFrom, 1, &point, aOptions, aRv);
  if (aRv.Failed()) {
    return nullptr;
  }
  RefPtr<DOMPoint> result = new DOMPoint(aTo->GetParentObject().mObject, point.x, point.y);
  return result.forget();
}
예제 #2
0
already_AddRefed<DOMQuad>
ConvertRectFromNode(nsINode* aTo, dom::DOMRectReadOnly& aRect,
                    const GeometryNode& aFrom,
                    const dom::ConvertCoordinateOptions& aOptions,
                    ErrorResult& aRv)
{
  CSSPoint points[4];
  double x = aRect.X(), y = aRect.Y(), w = aRect.Width(), h = aRect.Height();
  points[0] = CSSPoint(x, y);
  points[1] = CSSPoint(x + w, y);
  points[2] = CSSPoint(x + w, y + h);
  points[3] = CSSPoint(x, y + h);
  TransformPoints(aTo, aFrom, 4, points, aOptions, aRv);
  if (aRv.Failed()) {
    return nullptr;
  }
  RefPtr<DOMQuad> result = new DOMQuad(aTo->GetParentObject().mObject, points);
  return result.forget();
}
예제 #3
0
already_AddRefed<DOMQuad>
ConvertQuadFromNode(nsINode* aTo, dom::DOMQuad& aQuad,
                    const GeometryNode& aFrom,
                    const dom::ConvertCoordinateOptions& aOptions,
                    ErrorResult& aRv)
{
  CSSPoint points[4];
  for (uint32_t i = 0; i < 4; ++i) {
    DOMPoint* p = aQuad.Point(i);
    if (p->W() != 1.0 || p->Z() != 0.0) {
      aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
      return nullptr;
    }
    points[i] = CSSPoint(p->X(), p->Y());
  }
  TransformPoints(aTo, aFrom, 4, points, aOptions, aRv);
  if (aRv.Failed()) {
    return nullptr;
  }
  RefPtr<DOMQuad> result = new DOMQuad(aTo->GetParentObject().mObject, points);
  return result.forget();
}
예제 #4
0
파일: cylinder.c 프로젝트: LCAD-UFES/MAE
void
cylinder_view_transformed(CYLINDER *cylinder, double *eulerAngles, double *displacement, double *massCenter)
{
	int i;
	double num_points = ARCS*CIRCLES;
	double *transformed3DCylinder = (double*) alloc_mem (3 * num_points * sizeof (double));
	double       *world3DCylinder = (double*) alloc_mem (3 * num_points * sizeof (double));

	compute_3D_cylinder(cylinder, world3DCylinder, ARCS, CIRCLES, cylinder->size, 360);
	TransformPoints(num_points, transformed3DCylinder, world3DCylinder, eulerAngles, displacement, massCenter);
	for (i = 0; i < num_points; i++)
	{
		double x = transformed3DCylinder[3 * i + 0];
		double y = transformed3DCylinder[3 * i + 1];
		double z = transformed3DCylinder[3 * i + 2];
		
		// Updates the map and rotates the frame coordinates			       			
		ViewerUpdateMap(1, z, -x, y, 255, 0, 0);
	}

	free(transformed3DCylinder);
	free(world3DCylinder);
}
예제 #5
0
파일: main.cpp 프로젝트: sriankit/CGraphix
void display(void) {
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    Axes();
    glColor3f (1.0, 0.0, 0.0);                // Set the color to RED
    Draw(initial);
    glFlush();

    matrixSetIdentity(theMatrix);

    //change begins


    switch(choice) {
    case 1:
        printf("Enter Translation along X, Y & Z\n=>");
        scanf("%f%f%f",&TransDistX , &TransDistY , &TransDistZ);
        break;
    case 2:
        printf("Enter Scaling ratios along X, Y & Z\n=>");
        scanf("%f%f%f",&ScaleX , &ScaleY , &ScaleZ);
        break;
    case 3:
        printf("Enter your choice for Rotation about axis:\n");
        printf("1.parallel to X-axis.(y=B & z=C)\n2.parallel to Y-axis.(x=A & z=C)\n");
        printf("3.parallel to Z-axis.(x=A & y=B)\n");
        printf("4.Arbitrary line passing through (x1,y1,z1) & (x2,y2,z2)\n =>");
//Realign above line while execution
        scanf("%d",&choiceRot);
        switch(choiceRot) {
        case 1:
            printf("Enter B & C: ");
            scanf("%f %f",&B,&C);
            printf("Enter Rot. Angle Alpha: ");
            scanf("%f",&Alpha);
            break;
        case 2:
            printf("Enter A & C: ");
            scanf("%f %f",&A,&C);
            printf("Enter Rot. Angle Beta: ");
            scanf("%f",&Beta);
            break;
        case 3:
            printf("Enter A & B: ");
            scanf("%f %f",&A,&B);
            printf("Enter Rot. Angle degrees: ");
            scanf("%f",&Gamma);
            break;
        case 4:
            printf("Enter values of x1 ,y1 & z1:\n");
            scanf("%f %f %f",&x1,&y11,&z1);
            printf("Enter values of x2 ,y2 & z2:\n");
            scanf("%f %f %f",&x2,&y2,&z2);
            printf("Enter Rot. Angle Theta: ");
            scanf("%f",&Theta);
            break;
        }
        break;
    case 4:
        printf("Enter your choice for reflection about plane:\n1.X-Y\n2.Y-Z\n3.X-Z\n=>");
        scanf("%d",&choiceRef);
        break;
    default:
        printf("Please enter a valid choice!!!\n");
        //return 0;
    }

    //chenge ends

    switch(choice) {
    case 1:
        Translate(TransDistX , TransDistY ,TransDistZ);
        break;
    case 2:
        Scale(ScaleX, ScaleY, ScaleZ);
        break;
    case 3:
        switch(choiceRot) {
        case 1:
            DrawRotLine();
            Translate(0,-B,-C);
            RotateX(Alpha);
            Translate(0,B,C);
            break;
        case 2:
            DrawRotLine();
            Translate(-A,0,-C);
            RotateY(Beta);
            Translate(A,0,C);
            break;
        case 3:
            DrawRotLine();
            Translate(-A,-B,0);
            RotateZ(Gamma);
            Translate(A,B,0);
            break;
        case 4:
            DrawRotLine();
            float MOD =sqrt((x2-x1)*(x2-x1) + (y2-y11)*(y2-y11) + (z2-z1)*(z2-z1));
            aa = (x2-x1)/MOD;
            bb = (y2-y11)/MOD;
            cc = (z2-z1)/MOD;
            Translate(-x1,-y11,-z1);
            float ThetaDash;
            ThetaDash = 1260*atan(bb/cc)/22;
            RotateX(ThetaDash);
            RotateY(1260*asin(-aa)/22);
            RotateZ(Theta);
            RotateY(1260*asin(aa)/22);
            RotateX(-ThetaDash);
            Translate(x1,y11,z1);
            break;
        }
        break;
    case 4:
        Reflect();
        break;
    }
    //glFlush();
    TransformPoints();
    Draw(ptsFin);
    memcpy(initial, ptsFin, sizeof(ptsFin));
    glFlush();
    scanf("%d",&choice);
    glutPostRedisplay();

}