[Fortran] 纯文本查看 复制代码
Module Global
Use Winteracter !// 使用 Winteracter
Use Resid !// 使用 Resid 资源ID
Implicit None
End Module Global
!
PROGRAM dushu
Use Global
Implicit None
! 参数定义
TYPE(WIN_MESSAGE) :: MESSAGE
LOGICAL :: QUIT=.FALSE.
INTEGER :: ITYPE,I,J,ijk
! 需要通过界面对话框读入下面的数据
INTEGER :: NVC,NPC,NJQ,NN ! 竖曲线个数,平曲线个数,禁区个数
REAL :: LSTART,LEND ! 起始里程,结束里程,最好涵盖所要的范围;
REAL :: CHPL(105) ! 竖曲线的变坡点里程(NVC)
REAL :: CHPR(105) ! 竖曲线的变坡点半径(NVC)
REAL :: CHPI(106) ! 竖曲线的各段坡度 (NVC+1)
REAL :: XYZ0(3) ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
REAL :: NALF ! 平曲线第一段导线方位角
REAL :: JD(51) ! 导线长度累计,与曲线个数对应(NPC+1)
REAL :: PR(50) ! 平曲线半径(NPC)
REAL :: ALF(50) ! 导线相对前一导线的偏角,逆时针为正(NPC)
REAL :: LS(50) ! 平曲线的缓和曲线长(NPC)
REAL :: XXT(66),XDT(66) ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
REAL :: X(40000),Y(40000) ! 不可占用区域的起点里程和终点里程,必须前小后大成对出现
!
CALL WInitialise() ! 初始化窗口
CALL WindowOpen(HideWindow) ! 此演示不需要根窗口,因此要隐藏它
! 开始窗口程序(用于替代原输入数据部分)
CALL WDialogLoad(IDD_DIALOG001)
CALL WDialogShow(itype=Modeless)
!
ijk=0
!****************************************************
DO WHILE(.NOT.QUIT)
CALL WMessage(ITYPE,MESSAGE)
SELECT CASE (ITYPE)
CASE (PushButton)
SELECT CASE (MESSAGE%VALUE1)
CASE (IDOK)
CALL WDialogGetInteger(IDF_INTEGER1,NVC) !获取输入的数据NVC
CALL WDialogGetInteger(IDF_INTEGER2,NPC) !获取输入的数据NPC
CALL WDialogGetInteger(IDF_INTEGER3,NJQ) !获取输入的数据NJQ
CALL WDialogGetInteger(IDF_INTEGER4,NN) !获取输入的数据NJQ
CALL WDialogGetReal(IDF_REAL1,LSTART) !获取输入的数据LSTART
CALL WDialogGetReal(IDF_REAL2,LEND) !获取输入的数据LEND
CALL WDialogGetReal(IDF_REAL3,XYZ0(1)) !获取输入的数据XYZ0(1)
CALL WDialogGetReal(IDF_REAL4,XYZ0(2)) !获取输入的数据XYZ0(2)
CALL WDialogGetReal(IDF_REAL5,XYZ0(3)) !获取输入的数据XYZ0(3)
CALL WDialogGetReal(IDF_REAL6,NALF) !获取输入的数据NALF
CALL WGridRows(IDF_GRID1,NVC+1) !根据NVC确定表行数
CALL WGridRows(IDF_GRID2,NPC+1) !根据NPC确定表行数
CALL WGridRows(IDF_GRID3,NJQ) !根据NJQ确定表行数
CALL WGridRows(IDF_GRID4,NN) !根据NJQ确定表行数
if(ijk.eq.0)then
do i=1,NVC
CALL WGridGetCellReal(IDF_GRID1,2,i,CHPL(i)) !获取输入的数据CHPL()
CALL WGridGetCellReal(IDF_GRID1,3,i,CHPR(i)) !获取输入的数据CHPR()
end do
do i=1,NVC+1
CALL WGridGetCellReal(IDF_GRID1,4,i,CHPI(i)) !获取输入的数据CHPI()
end do
do i=1,NPC
CALL WGridGetCellReal(IDF_GRID2,3,i,PR(i)) !获取输入的数据PR()
CALL WGridGetCellReal(IDF_GRID2,4,i,ALF(i)) !获取输入的数据ALF()
CALL WGridGetCellReal(IDF_GRID2,5,i,LS(i)) !获取输入的数据LS()
end do
do i=1,NPC+1
CALL WGridGetCellReal(IDF_GRID2,2,i,JD(i)) !获取输入的数据JD()
end do
endif
if(ijk.eq.1)then
do i=1,NJQ
CALL WGridGetCellReal(IDF_GRID3,2,i,XXT(i)) !获取输入的数据XXT()
CALL WGridGetCellReal(IDF_GRID3,3,i,XDT(i)) !获取输入的数据XDT()
end do
endif
if(ijk.eq.1)then
do i=1,NN
CALL WGridGetCellReal(IDF_GRID4,1,i,X(i)) !获取输入的数据X()
CALL WGridGetCellReal(IDF_GRID4,2,i,Y(i)) !获取输入的数据Y()
end do
endif
QUIT=.FALSE.
CASE (IDCANCEL)
QUIT=.TRUE.
END SELECT
END SELECT
END DO
!****************************************************
CALL WindowClose()
!
! 打开输出文件以验证读入数据的正确性
! OPEN(3,FILE='FXX.SCR',STATUS='UNKNOWN')
!
WRITE(*,555)"AAA"
WRITE(*,774) NVC,NPC,NJQ,NN ! 竖曲线个数,平曲线个数
WRITE(*,772) LSTART,LEND ! 起始里程,结束里程,最好涵盖所要的范围;
WRITE(*,773) XYZ0(1),XYZ0(2),XYZ0(3) ! 平曲线第一导线点(起点)坐标(402.398,194.74622,230.000)
WRITE(*,666) NALF ! 平曲线第一段导线方位角
WRITE(*,555)"BBB"
DO I=1,NVC,1
WRITE(*,772) CHPL(I),CHPR(I) ! 竖曲线的变坡点里程(NVC)
end do
WRITE(*,555)"CCC"
DO I=1,NVC+1,1
WRITE(*,666) CHPI(I) ! 竖曲线的各段坡度 (NVC+1)
end do
WRITE(*,555)"DDD"
DO J=1,NPC,1
WRITE(*,773) PR(J),ALF(J),LS(J) ! 平曲线半径(NPC)
end do
WRITE(*,555)"EEE"
DO J=1,NPC+1,1
WRITE(*,666) JD(J) ! 导线长度累计,与曲线个数对应(NPC)
end do
WRITE(*,555)"FFF"
DO J=1,NJQ,1
WRITE(*,772) XXT(J),XDT(J) ! 禁区小里程(NJQ)
end do
WRITE(*,555)"GGG"
DO I=1,NN
WRITE(*,772) X(I),Y(I) ! 地面线点X()
end do
!
! CLOSE(3) ! 关闭文件
!
555 FORMAT(10A)
666 FORMAT(SP,F13.4)
772 FORMAT(SP,2F13.4)
773 FORMAT(SP,3F13.4)
774 FORMAT(SP,4I4)
STOP
!
END PROGRAM dushu