주어진 DPI 및 인쇄 크기로 인쇄물에서 벡터 객체가 표시되는지 확인
-
20-09-2019 - |
문제
다각형 모음과 다른 벡터 객체를 포함하는 파일 (*.shp)이 있습니다 (그러나 다각형은 나에게 가장 중요합니다). 인쇄 할 수없는 물체를 제거해야합니다.
어떤 기준이 선택했는지 모르겠습니다. 테두리 길이가 작은 물체를 제거하는 것이 더 좋을 것이라고 생각합니다. 작은 영역으로 물체를 제거하는 것입니다 (따라서 긴 물체가 줄이 줄어 듭니다). 그러나 아마도 그것에 대한 특별한 알고리즘이 있습니까?
즉, 주어진 줌 레벨에서 볼 수있는 객체 만 찾고 싶습니다.
해결책
아주 간단합니다. 언어는 언급하지 않으므로 다음 의사 코드를 고려하십시오.
drawRect = myDevice.GetDrawRect();
for(oneShape in allShapes)
{
shapeRect = oneShape.GetRect()
if(! drawRect.Contains(shapeRect))
oneShape.MarkAsInvisible();
else
oneShape.Draw();
}
contins () 함수는 y- 값이 맨 아래로 증가한다고 가정 할 때 다음과 같이 보입니다.
bool Rect::Contains(OtherRect)
{
if(left <= OtherRect.right &&
right >= OtherRect.left &&
top >= OtherRect.bottom &&
bottom <= OtherRect.top)
return true
return false;
}
다른 팁
제거해야 할 다각형은 생성하려는 이미지의 DPI에 따라 다릅니다. 선이 하나의 픽셀 만 채우려면 제거하거나 포인트 표현으로 교체해야합니다. 물론 이것은 선의 너비에 의해 영향을받을 것입니다. 이러한 종류의 문제는 다음과 같은 전용 매핑 라이브러리를 사용하여 해결됩니다. mapnik.org
제휴하지 않습니다 StackOverflow