주메뉴 바로가기 본문 바로가기 하단 바로가기

고객지원

기술문의

[참고] JTGO링크에 Traffic 나타내기를 마치며...

  • 김현규
  • 2004.04.06
  • 조회수 1,651
JTGO 자체에서 링크의 반을 나누어 각각에 서로 다른 두 색을 나타내는 방법이 지원 안되는 것을 알고도...;;;
프로젝트의 본격적인 시작까지 아직 시간이 있어...
이것저것 공부하며 나중에 해야지 하고 미루다가 있다가...
(효동님의 본사에 해결책을 의뢰했다는 얘기를 듣고 답을 기다리며...)
방법이 없다는 말씀에...
허벌떡~!!! 심각성을 느끼고 낑낑거린지 어언 5일...
드뎌 어찌어찌 하다 보이~ 링크의 반이 그어지고...거기에 힘입어 나머지 반두 그리는데 성공~!!!하였습니다.

이 성공까지 많은 도음을 주신 "한상이"님께 감사 드립니다. ^^

'한상이'님꼐서 올려주신 소스를 파악한 후 저희쪽과 다른 부분을 조금 수정하였습니다.


1. 한상이님께서 만드신 KT소스('KT'명이 들어가는 한상이님 소스)는 기존 JTGO의 파일들이 읽어 들일수 없기 때문에...(DataSource 등등에서 읽어다 쓰는 파일은 원본 파일명일꺼란 얘기죠~)
KT에 추가해 놓은 내용을 JTGO 소스에 직접 수정하였습니다.

2. 수정한 파일은 jtgoall.jar 내의...
IltLinkBase, IltLineSpec, IltGraphicUtil 세 파일입니다.

2-1. IltLinkBase
////////////////////////////////////////////////////////////////////
// 처음엔 링크를 긋는데 필요한 모든 정보(4개의 세그먼트)가 들어 있는데...
// 아래에서 링크의 반을 긋는데 필요한 정보만 담고 나머진 지운다. (예: A->B)
IlpPolyline ilppolyline = getAdjustedPolyline(ilvtransformer);
// ilppolyline가 반을 그리면 나머지 반을 그릴 정보를 담는다. (예: B->A)
IlpPolyline ilppolyline1 = getAdjustedPolyline(ilvtransformer);
////////////////////////////////////////////////////////////////////
/// 링크 중 반
// ilppolyline = [ilvpoint1(From)]-[ilvpoint(To)]-[ilvpoint2(From)]-[ilvpoint3(To)]
// ilppolyline.removePoint(0);
// ilppolyline = [ilvpoint(To)]-[ilvpoint2(From)]-[ilvpoint3(To)]
// ilppolyline.removePoint(ilppolyline.getNumberOfPoints()-1);
// ilppolyline = [ilvpoint(To)]-[ilvpoint2(From)]
/// 링크 중 또 다른 반
// ilppolyline1 = [ilvpoint1(From)]-[ilvpoint(To)]-[ilvpoint2(From)]-[ilvpoint3(To)]
// ilppolyline1.removePoint(1);
// ilppolyline1 = [ilvpoint1(From)]-[ilvpoint2(From)]-[ilvpoint3(To)]
// ilppolyline1.removePoint(ilppolyline.getNumberOfPoints()-2);
// ilppolyline1 = [ilvpoint1(From)]-[ilvpoint3(To)]
/// ilppolyline1의 순서를 To-From으로 바꿔준다.
// IlvPoint tmpPoint = ilppolyline1.getPoint(0);
// ilppolyline1.movePoint(0, ilppolyline1.getPoint(1));
// ilppolyline1.insertPoint(1, tmpPoint);
/////////////////////////////////////////////////////////////////////
// 링크의 반 그리기.
_linespec.drawHalfPolyline(g, iltpolyline1, _fromArrowColor, ilvpoint);
// 링크의 다른 반 그리기.
_linespec.drawHalfPolyline(g, iltpolyline2, _toArrowColor, ilvpoint3);
//////////////////////////////////////////////////////////////////////

2-2. IltLineSpec
/////////////////////////////////////////////////////////////////////
if(cnt == 2) {
boolean isnb1 = Math.abs(ilvpoint.xFloor() - ai[0]) < 2 &&
Math.abs(ilvpoint.yFloor() - ai1[0]) < 2;
boolean isnb2 = Math.abs(ilvpoint.xFloor() - ai[1]) < 2 &&
Math.abs(ilvpoint.yFloor() - ai1[1]) < 2;

int tmp = 0;
if(isnb1 || isnb2) {
tmp = px[0] + px[1];
px[1] = (tmp % 2 == 0) ? tmp / 2 : tmp / 2 + 1;
tmp = py[0] + py[1];
py[1] = (tmp % 2 == 0) ? tmp / 2 : tmp / 2 + 1;
} else {
tmp = px[0] + px[1];
px[1] = (tmp % 2 == 0) ? tmp / 2 : tmp / 2 + 1;
tmp = py[0] + py[1];
py[1] = (tmp % 2 == 0) ? tmp / 2 : tmp / 2 + 1;
}
}
/////////////////////////////////////////////////////////////////////

3. 자~ 이제 실제 파일에서 사용하려면...
IlpStyleManager cStyleManager = getContext().getStyleManager();
IlpStyle style = cStyleManager.getStyle(link);
style.setFloat(IltLink.BorderWidth, 0.4F);
style.setBoolean(IltLink.HasFromArrow, true);
style.setColor(IltLink.FromArrowColor, Color.blue);
link.FromArrowSize = IlpFloatKey.New("FromArrowSize", 1);
style.setBoolean(IltLink.HasToArrow, true);
style.setColor(IltLink.ToArrowColor, Color.yellow);
link.ToArrowSize = IlpFloatKey.New("ToArrowSize", 1);

즉, 링크의 양끝에 FromArrow/ToArrow를 만들어 넣고,
FromArrow/ToArrow의 색깔을 바꿔주면 그 색이 곧 링크의 반을 그려주는 색이된다.

헉헉...생각나는데루 막 적다보니...
두서가 없는듯...느껴지는데...;;;
그래두 많이 적은 성의를 생각해 용서하세요~^^;;;

잘못된점이나...
이건 모를꺼다 하거나...
이리하면 더 좋을꺼다 하는게 있으면 언제던 연락주세요~^^

kinghyun@hanmail.net

댓글 0

댓글 입력