public class McadViewPort
{
public string Name { get; set; }
public bool FirstPage { get; set; } = false;
public bool FullScreenFlag { get; set; } = true;
public Point3d ModelStartPoint { get; set; }
public Point3d ModelEndPoint { get; set; }
private LayoutFormats _format;
public double ModelWidth
{
get
{
return ModelEndPoint.X > ModelStartPoint.X
? ModelEndPoint.X - ModelStartPoint.X
: ModelStartPoint.X - ModelEndPoint.X;
}
}
public double ModelHeight
{
get
{
return ModelEndPoint.Y > ModelStartPoint.Y
? ModelEndPoint.Y - ModelStartPoint.Y
: ModelStartPoint.Y - ModelEndPoint.Y;
}
}
public LayoutFormats Format
{
get { return _format; }
}
public string FormatString
{
get { return _format.ToString(); }
set
{
_format = CadUtilities.ConvertToLayoutFormat(value);
_formatExtents = SetFormatExtents(_format, FirstPage);
}
}
public double ScaleFactor
{
get { return AcadUtilities.GetScaleFactor(_scale); }
set { _scale = AcadUtilities.GetStandardScale(value); }
}
private StandardScaleType _scale = StandardScaleType.Scale1To1;
public StandardScaleType Scale
{
get { return _scale; }
}
public Extents2d ViewPortExtents
{
get
{
if (FullScreenFlag)
return _formatExtents;
else
return GetViewPortExtens();
}
}
private Extents2d _formatExtents;
public double OnPaperWidth
{
get
{
return ModelWidth / ScaleFactor;
}
}
public double OnPaperHeight
{
get
{
return ModelHeight / ScaleFactor;
}
}
public string GetPlotFormat()
{
var plotFormat = string.Empty;
switch (_format)
{
case LayoutFormats.A4:
return "ISO_full_bleed_A4_(297.00_x_210.00_MM)";
case LayoutFormats.A3L:
return "ISO_full_bleed_A3_(297.00_x_420.00_MM)";
case LayoutFormats.A3P:
return "ISO_full_bleed_A3_(420.00_x_297.00_MM)";
case LayoutFormats.A2L:
return "ISO_full_bleed_A2_(420.00_x_594.00_MM)";
case LayoutFormats.A2P:
return "ISO_full_bleed_A2_(594.00_x_420.00_MM)";
case LayoutFormats.A1L:
return "ISO_full_bleed_A1_(594.00_x_840.00_MM)";
case LayoutFormats.A1P:
return "ISO_full_bleed_A1_(840.00_x_594.00_MM)";
case LayoutFormats.A0:
return "ISO_full_bleed_A0_(840.00_x_1188.00_MM)";
}
return plotFormat;
}
public Extents3d GetModelExtens()
{
double maxPointX;
double maxPointY;
var height = (_formatExtents.MaxPoint.Y - _formatExtents.MinPoint.Y) * ScaleFactor;
var width = (_formatExtents.MaxPoint.X - _formatExtents.MinPoint.X) * ScaleFactor;
if (FullScreenFlag)
{
maxPointX = ModelStartPoint.X + width;
maxPointY = ModelStartPoint.Y + height;
var maxPoint = new Point3d(maxPointX, maxPointY, 0);
return new Extents3d(ModelStartPoint, maxPoint);
}
else
{
return new Extents3d(ModelStartPoint, ModelEndPoint);
}
//var minPoint = new Point2d(ModelStartPoint.X, ModelStartPoint.Y);
}
public Extents2d GetViewPortExtens()
{
var centerX = (_formatExtents.MaxPoint.X + _formatExtents.MinPoint.X) / 2;
var centerY = (_formatExtents.MaxPoint.Y + _formatExtents.MinPoint.Y) / 2;
var minPointX = centerX - OnPaperWidth / 2;
var minPointY = centerY - OnPaperHeight / 2;
var maxPointX = minPointX + OnPaperWidth;
var maxPointY = minPointY + OnPaperHeight;
var minPoint = new Point2d(minPointX, minPointY);
var maxPoint = new Point2d(maxPointX, maxPointY);
return new Extents2d(minPoint, maxPoint);
}
private static Extents2d SetFormatExtents(LayoutFormats format, bool firstpage)
{
var minExt = FormatWorkArea.StartPointNextPage();
if (firstpage)
{
minExt = FormatWorkArea.StartPointFirstPage();
}
var maxExt = FormatWorkArea.LastPoint(format);
return new Extents2d(minExt, maxExt);
}
}