GSI


protected bool mLMBDown = false;
const float ROTATE = 0.2f;
const float TRANSLATE = 1;
Point mLastPosition;
Vector3 mTranslation = Vector3.ZERO;

.....

void mogrepanel_MouseDown(object sender, MouseEventArgs e)
{
    mLMBDown = true;
    mLastPosition = e.Location;
}

void mogrepanel_MouseUp(object sender, MouseEventArgs e)
{
    mLMBDown = false;
}

void mogrepanel_MouseMove(object sender, MouseEventArgs e)
{
    mTranslation = Vector3.ZERO;

    if (e.Button == MouseButtons.Left)
    {
        float x = mLastPosition.X - e.Location.X;
        float y = mLastPosition.Y - e.Location.Y;

        // 화면을 Dolly 모드 처럼 구현하기
        mogreWin.camera.Yaw(new Degree(x * ROTATE));
        mogreWin.camera.Pitch(new Degree(y * ROTATE));
    }
    else if (e.Button == MouseButtons.Right)
    {
        float y = mLastPosition.Y - e.Location.Y;

        mTranslation.z = y * TRANSLATE;

        // 화면을 줌인, 줌아웃 처리 하는 것
        mogreWin.camera.Position += mogreWin.camera.Orientation * mTranslation;
    }
    else if (e.Button == MouseButtons.Middle)
    {
        float x = mLastPosition.X - e.Location.X;
        float y = mLastPosition.Y - e.Location.Y;

        mTranslation.x = x * TRANSLATE;
        mTranslation.y = -(y * TRANSLATE);

        // 화면을 좌우상하 움직이는 것
        mogreWin.camera.Position += mTranslation;
    }

    mogreWin.Paint();

    mLastPosition = e.Location;
}

Posted by gsi
:


윈폼에서 3D 뷰에서 객체를 선택하는 로직이다.
아무래도 바운딩 박스 구조로 선택이 되는거 같다.

void mogrepanel_MouseDown(object sender, MouseEventArgs e)
{
    mLMBDown = true;
    mLastPosition = e.Location;

    // 히트 테스트
    mogreWin.ClickedOnHead(e.X, e.Y);
}
.....
public bool ClickedOnHead(int mx, int my)
{
    float scrx = (float)mx / viewport.ActualWidth;
    float scry = (float)my / viewport.ActualHeight;

    Ray ray = camera.GetCameraToViewportRay(scrx, scry);
    RaySceneQuery query = sceneMgr.CreateRayQuery(ray);
    RaySceneQueryResult results = query.Execute();

    boxsceneNode.ShowBoundingBox = false;
    sceneNode.ShowBoundingBox = false;
    foreach (RaySceneQueryResultEntry entry in results)
    {
        if (entry.movable.Name == "ogre")
        {
            //boxsceneNode.ShowBoundingBox = false;
            sceneNode.ShowBoundingBox = true;
        }
        else if (entry.movable.Name == "box")
        {
            //sceneNode.ShowBoundingBox = false;
            boxsceneNode.ShowBoundingBox = true;
        }
        // 위의 entry.movable.Name 를 사용해서 적당하게 처리 하면 될듯 하다.
    }

    return results.Count > 0;
}

Posted by gsi
:


private void CreateGrid(int numcols, int numrows, float unitsize)
{
    // 생성
    ManualObject grid = sceneMgr.CreateManualObject("grid");

    grid.Begin("BaseWhiteNoLighting", RenderOperation.OperationTypes.OT_LINE_LIST);

    float width = (float)numcols * unitsize;
    float depth = (float)numrows * unitsize;
    Vector3 center = new Vector3(-width / 2.0f, 0, -depth / 2.0f);

    for (int i = 0; i < numrows; ++i)
    {
        Vector3 s, e;
        s.x = 0.0f;
        s.z = i * unitsize;
        s.y = 0.0f;

        e.x = width;
        e.z = i * unitsize;
        e.y = 0.0f;

        grid.Position(s + center);
        grid.Position(e + center);
    }
    grid.Position(new Vector3(0.0f, 0.0f, numrows * unitsize) + center);
    grid.Position(new Vector3(width, 0.0f, numrows * unitsize) + center);

    for (int i = 0; i < numcols; ++i)
    {
        Vector3 s, e;
        s.x = i * unitsize;
        s.z = depth;
        s.y = 0.0f;

        e.x = i * unitsize;
        e.z = 0.0f;
        e.y = 0.0f;

        grid.Position(s + center);
        grid.Position(e + center);
    }
    grid.Position(new Vector3(numcols * unitsize, 0.0f, 0.0f) + center);
    grid.Position(new Vector3(numcols * unitsize, 0.0f, depth) + center);
    grid.End();

    sceneMgr.RootSceneNode.AttachObject(grid);
}

Posted by gsi
:


카메라의 폴리곤 모드가 존재 한다.
이걸 사용해서 처리 하면 된다.

camera.PolygonMode = PolygonMode.PM_SOLID;
종류 :
- PolygonMode.PM_SOLID
- PolygonMode.PM_POINTS
- PolygonMode.PM_WIREFRAME

왜 이게 카메라에 존재 하는지는 잘 모르겠다.
Posted by gsi
:


윈폼의 UI 기반의 코드를 작성하다 보면
3D의 화면은 사이즈가 빈번하게 변경된다.
이때 뷰포트와 카메라의 비율은 변경을 해주어야 한다.
아래의 코드는 그 일부분이다.

protected RenderWindow window;
public Camera camera;
protected Viewport viewport;
.......
// 윈도우 사이즈가 변하면 여기서 WindowMovedOrResized 메소드를 호출해 주어야 한다.
window.WindowMovedOrResized();
// 호출후에 생성된 윈도우 사이즈를 SetConfigOption()에 추가해 주어야 한다.
string videomode = string.Format("{0} x {1} @ 32-bit colour", window.Width, window.Height);
root.RenderSystem.SetConfigOption("Video Mode", videomode);
// 카메라의 비율을 재 생성한다.
camera.AspectRatio = ((float)viewport.ActualWidth) / ((float)viewport.ActualHeight); 

Posted by gsi
:

작업 하다가 대리점별 지역 주소를 정렬하는 부분에 사용한 쿼리
지역 코드가 여러개의 혼합으로 되어 있어서 그걸로 안되고 해서
주소의 내용 일부를 order by 해서 사용하도록 했다.


SELECT * FROM dbo.Agency order by case left(ConAddr,2)
 when '서울' then 1
 when '경기' then 2
 when '인천' then 3
 when '강원' then 4
 when '대전' then 5
 when '충남' then 6
 when '충분' then 7
 when '부산' then 8
 when '울산' then 9
 when '경남' then 10
 when '대구' then 11
 when '경북' then 12
 when '광주' then 13
 when '전남' then 14
 when '전북' then 15
 when '제주' then 16
 end
Posted by gsi
:

민정이 2009-03-01

내 일상 2009. 3. 2. 00:11 |

사랑 스런 우리딸..

항상 행복한 날만 가득하길 빈다. 우리딸~!
Posted by gsi
:

[더블오 2기 - 20화 UI 스샷

UI 2009. 2. 23. 03:51 |

01234567

Posted by gsi
:

-- 최초 입력 데이터
idx         hostName                                           value       regDate                 flag
----------- -------------------------------------------------- ----------- ----------------------- ----
15934       P6901756001C                                       4           2009-02-19 16:25:36.150 0
15935       P6901756001C                                       5           2009-02-19 16:25:46.150 0
15936       P6901756001C                                       1           2009-02-19 16:25:56.167 0
15937       P6901756001C                                       3           2009-02-19 16:26:06.150 0
15938       P6901756001C                                       3           2009-02-19 16:26:16.150 0
15939       P6901756001C                                       3           2009-02-19 16:26:26.150 0
15940       P6901756001C                                       2           2009-02-19 16:26:36.150 0
15941       P6901756001C                                       2           2009-02-19 16:26:46.150 0
15942       P6901756001C                                       1           2009-02-19 16:26:56.150 0
15943       P6901756001C                                       2           2009-02-19 16:27:06.150 0
15944       P6901756001C                                       1           2009-02-19 16:27:16.150 0

-- 변경후 데이터
idx         hostName                                           value       valueSum    valueCount  regDate                 flag
----------- -------------------------------------------------- ----------- ----------- ----------- ----------------------- ----
5           P6901756001C                                       0           50          20          2009-02-19 15:45:00.000 0
6           P6901756001C                                       0           99          30          2009-02-19 15:50:00.000 0
7           P6901756001C                                       0           97          30          2009-02-19 15:55:00.000 0
8           P6901756001C                                       0           287         30          2009-02-19 16:00:00.000 0
9           P6901756001C                                       0           218         30          2009-02-19 16:05:00.000 0
10          P6901756001C                                       0           362         30          2009-02-19 16:10:00.000 0
11          P6901756001C                                       0           131         30          2009-02-19 16:15:00.000 0
12          P6901756001C                                       0           163         30          2009-02-19 16:20:00.000 0
13          P6901756001C                                       0           23          3           2009-02-19 16:25:00.000 0

-- 구성 내용
10초에 한번씩 입력 되는 해당 데이터의 내용을 5분 단위로 끊어서 새로운 테이블로 통계를 낸다.
값이 일정하지도 않을수 있고, 값의 주기가 조금씩 틀릴수도 있다.
우선 테스트를 통해서 더 보완 해야 할듯 하다. (커서를 몰라서 이렇게 걍 작성 했다.)

-- 배울점
1. 시간 값의 구간을 5분 단위로 구분

Posted by gsi
:


USE [GPMS]
GO
/****** 개체:  UserDefinedFunction [dbo].[CHANGEDATETIME]    스크립트 날짜: 02/19/2009 16:57:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 날짜변환하는부분을함수로작성
CREATE  FUNCTION [dbo].[CHANGEDATETIME] (
       @sdate varchar(30)
       )RETURNS DATETIME
AS
BEGIN
       DECLARE @RETURNVALUE DATETIME
       BEGIN
             SELECT  @RETURNVALUE=CASE WHEN  CHARINDEX('오후',@sdate)>0
                    THEN DATEADD(HH,12,CONVERT (DATETIME, REPLACE(@sdate,'오후','')))
                    ELSE CONVERT (DATETIME,REPLACE(@sdate,'오전','') )
                    END
       END
       RETURN(@RETURNVALUE)
END

-- 결과
문자열을 시간 값으로 변경해 준다.
하지만 문자열이 시간값과 같은 포멧으로 구성되어 있어야 한다.
ex) 2009-02-19 14:25:00

Posted by gsi
:


USE [GPMS]
GO
/****** 개체:  UserDefinedFunction [dbo].[GETSTIMEPER5MINTODATETIME]    스크립트 날짜: 02/19/2009 16:55:38 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

/*
 GETDATETIMEPERMIN : 2006-09-19 BY J.Y. PARK,
 DESC: 입력받은 DATETIME의 초,밀리세컨드를 0으로 수정하고 5분단위 시간으로 반환
 */
CREATE   FUNCTION [dbo].[GETSTIMEPER5MINTODATETIME]
 ( @IDATETYPE DATETIME)
RETURNS VARCHAR(20)
AS
 BEGIN
 DECLARE @SNEWTIME VARCHAR(20)
 DECLARE @SMIN VARCHAR(5)

 SET @SNEWTIME = DATENAME(YY,@IDATETYPE)

 SET  @SNEWTIME =  @SNEWTIME + '-' + DATENAME(MM,@IDATETYPE)

 IF DATEPART(DD,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + '-' + DATENAME(DD,@IDATETYPE) + ' '

 IF DATEPART(HH,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + DATENAME(HH,@IDATETYPE)

 IF DATEPART(MI,@IDATETYPE) < 10
  SET  @SMIN =  '0' + DATENAME(MI,@IDATETYPE)
 ELSE
  SET @SMIN = DATENAME(MI,@IDATETYPE)
 IF (DATEPART(MI,@IDATETYPE) % 10) >= 5
  SET @SNEWTIME = @SNEWTIME + ':' + LEFT(@SMIN,1) + '5'
 ELSE
  SET @SNEWTIME = @SNEWTIME + ':' + LEFT(@SMIN,1) + '0'

 RETURN @SNEWTIME
 END

-- 결과
GETSTIMEPER5MIN 와 비슷하지만 이건 이 문자열을 DateTime로 변환이 가능한
문자열 형태로 반환한다.

Posted by gsi
:


USE [GPMS]
GO
/****** 개체:  UserDefinedFunction [dbo].[GETSTIMEPER5MIN]    스크립트 날짜: 02/19/2009 16:54:01 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

/*
 GETDATETIMEPERMIN : 2006-09-19 BY J.Y. PARK,
 DESC: 입력받은 DATETIME의 초,밀리세컨드를 0으로 수정하고 5분단위 시간으로 반환
 */
CREATE   FUNCTION [dbo].[GETSTIMEPER5MIN]
 ( @IDATETYPE DATETIME)
RETURNS VARCHAR(20)
AS
 BEGIN
 DECLARE @SNEWTIME VARCHAR(20)
 DECLARE @SMIN VARCHAR(5)

 SET @SNEWTIME = DATENAME(YY,@IDATETYPE)

 SET  @SNEWTIME =  @SNEWTIME + DATENAME(MM,@IDATETYPE)

 IF DATEPART(DD,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + DATENAME(DD,@IDATETYPE)

 IF DATEPART(HH,@IDATETYPE) < 10
  SET  @SNEWTIME =  @SNEWTIME + '0'
 SET  @SNEWTIME =  @SNEWTIME + DATENAME(HH,@IDATETYPE)

 IF DATEPART(MI,@IDATETYPE) < 10
  SET  @SMIN =  '0' + DATENAME(MI,@IDATETYPE)
 ELSE
  SET @SMIN = DATENAME(MI,@IDATETYPE)
 IF (DATEPART(MI,@IDATETYPE) % 10) >= 5
  SET @SNEWTIME = @SNEWTIME + LEFT(@SMIN,1) + '5'
 ELSE
  SET @SNEWTIME = @SNEWTIME  +LEFT(@SMIN,1) + '0'

 RETURN @SNEWTIME
 END

 

-- 결과는 아래와 같이 나옵니다.
2009-02-19 14:23:41 -> 20090219142340

 


 

Posted by gsi
:



2008년 나를 정말 흥분하게 만든.
오래전부터 로봇을 너무 좋아 했기에 지금도 건담을 즐겨 보고 있지만.
영화로 보면서 정말 감탄을 금지 못했다.

오래 기다렸지만 이제 몇달만 있음 2가 하는데
벌써 부터 기다려 진다.

2는 꼭 디탈 영화관에서 보리라~~~
Posted by gsi
:


포스터

과속 스캔들이 나온지 정말 오래 되었다.
아직도 영화관에 상영을 할려나...

그렇다면 보러 가고 싶다 너무너무..
알바에 쫓겨.. 시간에 쫓겨.. 요즘 너무 문화 생활에 등한시 한듯.. -.-

왠지 요즘 박보영이 이쁘다는 느낌이 ^^.
아저씨가 되서 그런지 몰겠다.

개발자 여러분.. 힘내삼.
Posted by gsi
:


select top 100 value, CONVERT(VARCHAR, datepart(hh,regDate))+':'+CONVERT(VARCHAR, datepart(mi,regDate)) as tick
from TBL_REP_CPU_INPUT order by regDate desc

-- 출력결과 --
value       tick
----------- -------------------------------------------------------------
3           14:49
2           14:49
4           14:49

Tip : 8시간 후의 날짜와 시간을 10분 단위로 반환

Posted by gsi
: