What actualy represents CenterPoint property of viewport object -->(from ACAD documentation) Accesses the center point of the viewport entity in WCS coordinates (within Paper Space).
If someone is experienced in Teigha.NET pls help me, Thank you!
var fieldWidth = abstractViewportData.FieldWidth;
var fieldHeight = abstractViewportData.FieldHeight;
var extents = new Extents2d(-fieldWidth / 2, -FieldHeight/ 2, fieldWidth / 2, FieldHeight/ 2); <-- This are extents of viewport in WCS
var projectionPlane =new Plane(viewTarget,_viewport.ViewDirection); <-- This is projection plane which is shown by viewport
var projectionCS = projectionPlane.GetCoordinateSystem(); <-- This is maybe new coordinate system related with projection plane, but I am not sure
var WCSToProjectionCS = Matrix3d.PlaneToWorld(projectionPlane).Inverse(); <-- This is transformation matrix from World to plane but I am not entirely sure again
var line = new Line(new Point3d(0, 0, 0), new Point3d(10, 0, 0)); <-- Tree perpendicular lines for testing
var line2 = new Line(new Point3d(0, 0, 0), new Point3d(0, 10, 0));
var line3 = new Line(new Point3d(0, 0, 0), new Point3d(0, 0, 10));
line.TransformBy(WCSToProjectionCS);
line2.TransformBy(WCSToProjectionCS);
line3.TransformBy(WCSToProjectionCS);
AttachEntityToModelSpace(line);
AttachEntityToModelSpace(line2);
AttachEntityToModelSpace(line3);
I have to make standalone application witch is not related with both ACAD or BricsCAD, so I suppose to use only Teigha's dlls and all functionality embedded in.
var basePoints = new Point3dCollection
{
new Point3d(
-abstractViewportData.FieldWidth / 2,
-abstractViewportData.FieldHeight / 2,
0),
new Point3d(
abstractViewportData.FieldWidth / 2,
-abstractViewportData.FieldHeight / 2,
0),
new Point3d(
abstractViewportData.FieldWidth / 2,
abstractViewportData.FieldHeight / 2,
0),
new Point3d(
-abstractViewportData.FieldWidth / 2,
abstractViewportData.FieldHeight / 2,
0)
};
var baseOfParallelepiped = new Polyline3d(Poly3dType.SimplePoly, basePoints, true);
AttachEntityToModelSpace(baseOfParallelepiped);
var projectionPlane =
new Plane(viewport.ViewTarget, viewport.ViewDirection);
var projectionCS = projectionPlane.GetCoordinateSystem();
var transMatrix = Matrix3d.AlignCoordinateSystem(
Point3d.Origin,
Vector3d.XAxis,
Vector3d.YAxis,
Vector3d.ZAxis,
projectionCS.Origin,
projectionCS.Xaxis,
projectionCS.Yaxis,
projectionCS.Zaxis);
baseOfParallelepiped.TransformBy(transMatrix);
AttachEntityToModelSpace(baseOfParallelepiped);
The problem is somewhere in transformations, maybe I have to add some translation but I don't see yet what exactly it should be.
var projectionPlane = new Plane(viewport.ViewTarget, viewport.ViewDirection);
var projectionCS = projectionPlane.GetCoordinateSystem();
var fromWcsToProjectionPlane = Matrix3d.Rotation(-viewport.TwistAngle, viewport.ViewDirection, viewport.ViewTarget) *
Matrix3d.AlignCoordinateSystem(
Point3d.Origin,
Vector3d.XAxis,
Vector3d.YAxis,
Vector3d.ZAxis,
projectionCS.Origin,
projectionCS.Xaxis,
projectionCS.Yaxis,
projectionCS.Zaxis);
var basePoints = new Point3dCollection
{
new Point3d(
-abstractViewportData.FieldWidth / 2,
-abstractViewportData.FieldHeight / 2,
0),
new Point3d(
abstractViewportData.FieldWidth / 2,
-abstractViewportData.FieldHeight / 2,
0),
new Point3d(
abstractViewportData.FieldWidth / 2,
abstractViewportData.FieldHeight / 2,
0),
new Point3d(
-abstractViewportData.FieldWidth / 2,
abstractViewportData.FieldHeight / 2,
0)
};
var viewCenter = new Point3d(viewport.ViewCenter.X,viewport.ViewCenter.Y,0);
var baseOfParallelepiped = new Polyline3d(Poly3dType.SimplePoly, basePoints, true);
baseOfParallelepiped.TransformBy(Matrix3d.Displacement(viewCenter.GetAsVector())); <-- That's what I've missed so far.
baseOfParallelepiped.TransformBy(fromWcsToProjectionPlane);
AttachEntityToModelSpace(baseOfParallelepiped);