티스토리 뷰



[DIAdem] 프로그래밍 적으로 DIAdem Report에 있는 Chart Axis 추가 및 설정하기


디아뎀은 수집된 데이터를 후처리하여, 이에 대한 리포트를 생성해주는 역할을 하는 소프트웨어 입니다. 

디아뎀에는 Report 탭이 존재하여 후처리된 데이터를 어떻게 가공하여 리포트로 생성할지에 대한 설정이 가능합니다.


Report 탭에서는 작성되는 데이터를 위해서 다양한 개체를 넣을 수 있습니다. Report 탭에서 처리할 수 있는 개체들은 아래와 같습니다. 


  • 2D Axis System, 3D Axis System
  • 2D Table, 3D Table
  • Polar Axis System
  • Graphic, Text, Predefined Objects
  • Circle, Line, Rectangle, Arrow


본 글에서는 Report 탭에 존재하는 2D Axis System 개체에 새로운 Y Axis를 추가하여 그래프에 포함되어 있는 2개의 데이터를 각각의 Axis에 설정하는 방법으로 Script를 통해서 하는 방법에 대해서 알아보도록 하겠습니다.


아래는 DIAdem을 통해서 만든 결과물입니다. 2D_UserFormat이라는 그룹에 있는 RealDiffTemp는 1번 Axis에 MeanDiffTemp를 2번 Axis에 적용을 하여 하나의 그래프에서 2개의 Axis를 통해서 데이터를 보고 있습니다. 



위의 설정은 기본적으로 DIAdem의 Report 탭에서 설정이 가능합니다. Report 탭에서 2D Axis System을 추가하면 아래와 같이 나오게 됩니다. 기본적으로 그래프는 하나의 Y-Axis를 가지고 있습니다. 

아래의 그림과 같은 방법으로 차트 속성에 들어가서 Axis Position에서 No.Y2를 생성할 수 있습니다. 



추가적인 Y-Axis를 만들었다면, Curve List에서 설정된 데이터에 대한 Y-Axis를 아래와 같은 방법으로 변경을 합니다. 



OK 버튼을 누르면 위의 최종 결과가 동일한 모습을 볼 수 있습니다.

위와 같은 과정은 수동적으로 사용자가 Axis를 추가하여 설정하는 과정입니다. 이를 Script를 통해서 하는 방법은 무엇일까요?


코드에 대해서 세부적으로 설명을 드리겠습니다. 아래의 코드는 현재 Report에 있는 활성화된 Sheet에 있는 object들을 가져오기 위한 Object 리스트를 가져오는 코드입니다. 


dim reportObject, obj

'get object for activesheet

set reportObject = Report.ActiveSheet.Objects


For문을 통해서 object를 순차적으로 가져옵니다. 


dim newYAxis, index


'iterate objects in reportObject

For index = 1 to reportObject.Count

  set obj = reportObject.Item(index)

Next 


위의 코드에서 처리 과정을 더한 결과를 보겠습니다. obj라는 개체에 현재 Report에 있는 개체를 순차적으로 넣습니다.

obj가 2D Axis System이라면, 2D Axis System의 Y-Axis 갯수가 추가되었는지를 확인하고 추가가 되었으면 추가된 Y-Axis들을 삭제합니다.


Second Axis라는 이름을 가진 Y-Axis를 생성하고, 위치에 대한 Offset을 설정합니다.

마지막으로 Curve2D에 있는 2번째 Curve의 Y-Axis를 새로생성한 Y-Axis로 설정을 합니다. 


'iterate objects in reportObject

For index = 1 to reportObject.Count

  set obj = reportObject.Item(index)

  if obj.ObjectType = eReportObject2DAxisSystem then

    if obj.YAxisList.Count >= 1 then    

      obj.YAxisList.RemoveAll()

    end if

    

    set newYAxis = obj.YAxisList.Add("Second Axis")

    newYAxis.OffsetOrigin = e2DAxisOffsetOriginAxisBegin

    newYAxis.OffsetHorizontal = -15

    newYAxis.OffsetVertical = 0    

    newYAxis.Label.RelativePosition =eAxisLabelRelativePositionManual    

    newYAxis.Label.OffsetX = -2

  end if

  

  ' config 

  obj.Curves2D.Item(2).YAxisReference = newYAxis.Name  

  

Next 


설명드린 코드를 모두 합치게 되면, 아래와 같습니다. Report 탭에 2D Axis Sytem이 하나라도 있다면 아래의 코드는 정상적으로 작동할 것입니다. 

Option Explicit  'Forces the explicit declaration of all the variables in a script.


dim reportObject, obj

'get object for activesheet

set reportObject = Report.ActiveSheet.Objects


dim newYAxis, index


'iterate objects in reportObject

For index = 1 to reportObject.Count

  set obj = reportObject.Item(index)

  if obj.ObjectType = eReportObject2DAxisSystem then

    if obj.YAxisList.Count >= 1 then    

      obj.YAxisList.RemoveAll()

    end if

    

    set newYAxis = obj.YAxisList.Add("Second Axis")

    newYAxis.OffsetOrigin = e2DAxisOffsetOriginAxisBegin

    newYAxis.OffsetHorizontal = -15

    newYAxis.OffsetVertical = 0    

    newYAxis.Label.RelativePosition =eAxisLabelRelativePositionManual    

    newYAxis.Label.OffsetX = -2

  end if

  

  ' config 

  obj.Curves2D.Item(2).YAxisReference = newYAxis.Name  

  

Next 



Report.Refresh()


이 글에서는 DIAdem에서 프로그래밍적으로 Y-Axis를 추가하고, 설정하는 방법에 대해서 알아보았습니다.


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.


댓글