 |
www.integro.ru ЦСИ ИНТЕГРО
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
kliver
Зарегистрирован: 10.07.2014 Сообщения: 12
|
Добавлено: Чт 24 Мар 2016 12:57 Заголовок сообщения: Создание легенды для макета печати. |
|
|
Добрый день.
Хочу создать легенду для вставки в макет печати. Вроде все просто: перебираю слои и делаю PaintContour(). Примерно так:
Код: |
double x1 = 0, y1 = 0, x2 = 0, y2 = 0;
var image = IngeoApplication.CreateObject(TIngeoObjectClass.inocImage, null) as IInImage;
image.Height = 100*5;
image.Width = 100*5;
image.ResolutionX = 200;
image.ResolutionY = 200;
image.Surface.PointDeviceToPaper(-2, -2, out x1, out y1);
image.Surface.PointDeviceToPaper(((100+2)* 500),
((100+2)* 500), out x2,
out y2);
var contour =
IngeoApplication.CreateObject(TIngeoObjectClass.inocContour, null) as IIngeoContour;
var contourPart = contour.Insert();
contourPart.InsertVertex(0, x1, y1, 0);
contourPart.InsertVertex(-1, x1, y2, 0);
contourPart.InsertVertex(-1, x2, y2, 0);
contourPart.InsertVertex(-1, x2, y1, 0);
contourPart.InsertVertex(-1, x1, y1, 0);
contourPart.Closed = true;
image.Surface.Navigator.ZoomToFitPaperRect(x1, y1, x2, y2);
var style = IngeoApplication.ActiveDb.StyleFromID(styleId);
style.PaintContour(image.Surface, contour, null);
image.SaveToFile("D:\\test.bmp");
|
Все отлично получаю картинку. Но это хорошо работало до тех пор пока я не встретил стиль с двумя символьными методами отображения. И у одного из методов отображения рисунок задан для масштаба 1/1000. Результат я прикрепил в аттач. Выглядит ужасно не так ли)
И тут собственно несколько вопросов.
1. Как призумиться к объекту что бы от границ объекта до границ изображения были отступы?
PointDeviceToPaper() я добавил расширение на 2 по каждой координате, но это ни на что не повлияло.
2. Как сделать что бы символьный метод рисующий в вершинах контура рисовался в нормальном масштабе? Я пробовал приближаться по другому:
Код: |
var xc = ((x1 + x2) / 2);
var yc = ((y1 + y2) / 2);
image.Surface.Navigator.Navigate(xc,yc,1000);
|
Но получал просто белое изображение.
Описание: |
|
Размер файла: |
10.6 KB |
Просмотрено: |
8280 раз(а) |

|
|
|
Вернуться к началу |
|
 |
kliver
Зарегистрирован: 10.07.2014 Сообщения: 12
|
Добавлено: Чт 24 Мар 2016 14:41 Заголовок сообщения: |
|
|
Ну ладно, со вторым вопросом вроде разобрался. Нужно координаты рисуемого контура помножить на текущий масштаб карты, тогда картинка выглядит по человечески.
Но я все же не могу получить отступы от границ изображения. Сейчас пробую так:
Код: |
double x1 = 0, y1 = 0, x2 = 0, y2 = 0;
double xb1 = 0, yb1 = 0, xb2 = 0, yb2 = 0;
image.Surface.PointDeviceToPaper(0, 0, out x1, out y1);
image.Surface.PointDeviceToPaper(((LegendConfiguration.Размеры.Ширина)* 1000),
((LegendConfiguration.Размеры.Высота)* 1000), out x2,
out y2);
image.Surface.PointDeviceToPaper(-100, -100, out xb1, out yb1);
image.Surface.PointDeviceToPaper(((LegendConfiguration.Размеры.Ширина) * 1000),
((LegendConfiguration.Размеры.Высота) * 1000), out xb2,
out yb2);
image.Surface.Navigator.ZoomToFitPaperRect(xb1, yb1, xb2, yb2);
|
Координаты без индекса использую для рисования контура, а приближаюсь уже к координатам с отступами. Но к сожалению не могу найти нужную комбинацию значений отступов.
|
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Ср 30 Мар 2016 17:57 Заголовок сообщения: |
|
|
вот кусок кода из нашего создателя легенд:
Код: | //calc imgDrawRect
iImg := CreateNewImg(imgWidthInMetr, imgHeightInMetr);
tmpSZ.cx := max(1, iImg.Width*5 div 100);//5% от ширины в пикс, но не меньше 1 пикс
tmpSZ.cy := max(1, iImg.Height*5 div 100);//5% от высоты в пикс, но не меньше 1 пикс
iImg.Surface.PointDeviceToWorld(tmpSZ.cx,tmpSZ.cy, imgP1.X,imgP1.Y);
iImg.Surface.PointDeviceToWorld(iImg.Width-tmpSZ.cx,iImg.Height-tmpSZ.cy, imgP2.X,imgP2.Y); |
по моему вот этот код вас "губит": image.Surface.Navigator.ZoomToFitPaperRect(xb1, yb1, xb2, yb2);
вы всегда, какой бы прямоугольник не высчитали, строго его вписываете в границы картинки
_________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|