2012-01-11 1 views
2

Qt에서 아핀 변환을 사용할 수 있다는 것을 알고 있습니다. 그러나 전체 사용자 정의 전역 변환 방법을 설정할 수도 있습니까?Qt4 : QGraphicsScene /보기 및 사용자 지정 변환 방법?

사용 사례 : QGraphicsScene/View 컨텍스트에서 투영 된 지리적 인 지점 (위도 경도)을 그리거나 마우스 이벤트 등을 지형적 인 일제 치로 가져옵니다. 나는 그 (약간의 의사 코드)처럼 사용하는 순간

:

MyPoint pt = myProjection(geographicPoint); 
QPoint(pt.x, pt.y); 

// or, to make it shorter, but essentially it's the same 
QPoint p = myProjection(geoPoint); 

geoPoint = myBackProjection(mouseEvent.getPoint()); 

그리고를 QGraphicsView (또는 누구든지 책임) 그래서 내가 어딘가에 내 변환 방법을 "등록"하고 싶습니다 화면에 무언가를 그리기 전에 내부적으로 이러한 메서드를 사용합니다.

아니면 (거리를 계산할 때 예상치 못한 문제가 발생하기 때문에) 의미가 없습니까?

답변

0

QGraphicsView는 3x3 매트릭스 인 QTransform 매트릭스를 사용합니다. 따라서 선형 변환 만 수행 할 수 있습니다. Qt5/QtQuick 또는 QtQuick3d에서는 QML ShaderProgram을 사용하여이를 수행 할 수 있습니다.

"순수한"Qt4에서는 QGraphicsView 또는 QAbstractScrollArea 또는 QGraphicsScene에서 사용자 지정 클래스를 파생시키고 페인트 메서드를 재정의해야합니다.

+0

답장을 보내 주셔서 감사합니다. 이 주제에 대해 다시 생각해 보았고 직각 좌표를 사용하는 것이 최악은 아니며 많은 문제를 해결하고 예전처럼 거리를 계산하고 벡터를 정의 할 수 있습니다. 또는 JOSM 및 Merkaartor와 같은 프로젝트의 소스 코드를 파헤 치고 그들이 내부적으로 사용하는 것을 살펴보십시오. –

0

좋은 변환 방법은 QGraphicsItem shape() 메서드에서이 변환을 캡슐화하는 것입니다. 위도와 경도의 쌍으로 정의 된 점이 있다면 위도 경도의 쌍을 저장하지만 모양 메서드는 투영 된 값 (일반적으로 픽셀 상당)을 반환합니다.

기분이 좋으면 QPoint를 하위 클래스로 지정하여 지리적으로 인식 할 수 있으므로 latlon으로 생성하지만 x, y 속성에 예상 값이 표시됩니다.