Как масштабировать неравномерно по осям изображение, чтобы заполнить область?
Растровые изображения относятся к категории примитивов, которые поддерживают неравномерное масштабирование по осям.Примитивы, которые также поддерживают неравномерное масштабирование:
AcDbLeader, AcDbMLine, AcDbMText, AcDbOle2Frame, AcDbPloyFaceMesh, AcDbPolygonMesh, AcDbRay, AcDbXline, AcDbFcf, AcDbSolid, AcDbEllipse, AcDbSpline, AcDbImage.
В AutoCAD .NET API нет встроенных методов для создания неравномерно масштабированной матрицы. Так что вам придется создать такую матрицу самостоятельно заполнив её коэффициенты. Построение матрицы масштабирования довольно просто, так как это диагональная матрица, которая содержит соотвествующие масштабные коэффициенты по направлениям X, Y и Z.
Команда на C# показывает как выполнить неравномерное масштабирование растра так, чтобы он заполнил прямоугольник (Ширина x Высота):
- [CommandMethod("Scale2Fit")]
- public void Scale2Fit()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptEntityOptions peo = new PromptEntityOptions(
- "\nВыберите растровое изображение: ");
- peo.SetRejectMessage("\nНеправильный выбор...");
- peo.AddAllowedClass(typeof(RasterImage), false);
- PromptEntityResult per = ed.GetEntity(peo);
- if (per.Status != PromptStatus.OK)
- return;
- double width = 50;
- double height = 30;
- using (Transaction Tx =
- db.TransactionManager.StartTransaction())
- {
- RasterImage image = Tx.GetObject(
- per.ObjectId,
- OpenMode.ForWrite)
- as RasterImage;
- Point3d origin = image.Orientation.Origin;
- double scaleX = width / image.Width;
- double scaleY = height / image.Height;
- double[] coeffs = new double[]
- {
- scaleX, 0, 0, 0,
- 0, scaleY, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
- };
- Matrix3d matrix = new Matrix3d(coeffs);
- image.TransformBy(matrix);
- // Сбрасываем начальную позицию
- image.Orientation = new CoordinateSystem3d(
- origin,
- image.Orientation.Xaxis,
- image.Orientation.Yaxis);
- Tx.Commit();
- }
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=481
Опубликовано 24.01.2014Отредактировано 26.01.2014 в 07:50:03