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(); }
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(); }
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(); }
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); }
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(); }