⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxfortrangraph.f90

📁 DXF producer by Fortran
💻 F90
字号:
!!
!! + DXFortran Graphical Module 
!! 
module DXFortranGraph

! 
! Description: 
!   Module of the Standart Librarie of DXFortran. 
! 
! Current Code Owner:
! Carlos Otero & Davide Santos
! (Department of Civil Engineering of the University of Algarve - Portugal)     
! www.ualg.pt/est/adec/csc/dxfortran
! 
! History: 
!  
! Version   Date     Comment 
! -------   -----    ------- 
! 0.1       03.11    Carlos Otero & Davide Santos
! 
! Code Description: 
!   Language:  Fortran 90. 
!   Software Standards: "European Standards for Writing and  
!  Documenting Exchangeable Fortran 90 Code". 

Use DXFortranStd
 
Implicit none 

Contains 

! Define procedures contained in this module. 

!
!+ Subroutine to Draw a 2D graphic axis
!
Subroutine dfGraphAxis2D	   & 
		  (FileNum,			   &
           Layer,			   &
           MaxXX,			   &
           MaxYY,			   &
		   MinXX,		 	   &
		   MinYY,			   &
           PrimaryScaleXX,     &
           PrimaryScaleYY,     &
           DimPrimaryScaleXX,  &
		   DimPrimaryScaleYY,  &
		   SecondaryScaleXX,   &
		   SecondaryScaleYY,   &
		   DimSecondaryScaleXX,&
		   DimSecondaryScaleYY,&
		   DrawPrimaryGridXX,  &
		   DrawPrimaryGridYY,  &
		   DrawSecondaryGridXX,&
		   DrawSecondaryGridYY,&
		   DrawBorderAxisXX,   &
		   DrawBorderAxisYY,   &
		   DrawZeroAxisXX,     &
		   DrawZeroAxisYY,     &
           TextPositionXX,     &
		   TextPositionYY,     &
           TextHight,          &
		   TextStyle)   



! Description: 
! 
! Draw a graphic axis in 2D in format dxf, using the arguments 
! 
! Method: 
! No comment...
!
! Current Code Owner: 
! Davide Santos (University of Algarve)     
! 
! History: 
! Version     Date      Comment 
! -------   --------    ------- 
!	1.0		03.11.18	Davide Santos
!
! Code Description: 
!   Language:  Fortran 90. 
!   Software Standards: "European Standards for Writing and  
!     Documenting Exchangeable Fortran 90 Code". 
! 
! Use staments


Implicit none 
 

! Definitions of variables

Integer	::	FileNum,		      &	!+ File number
			n,                    & !+ Counter
			i,				      &	!+ Reference item
			opc,                  & !+ Option
			NPrimXX,              & !+ Number of ???
			NSecXX,			      &
			NPrimYY,              & !+ Number of ???
			NSecYY,			      &
            DrawZeroAxisXX,       &	!+ Draw Zeros Axis ((1 - Yes; 0 - No)
			DrawZeroAxisYY,       &	!+ Draw Zeros Axis ((1 - Yes; 0 - No)
            DrawBorderAxisXX,     &	!+ Draw Zeros Axis ((1 - Yes; 0 - No)
            DrawBorderAxisYY,     &	!+ Draw Zeros Axis ((1 - Yes; 0 - No)
			DrawPrimaryGridXX,	  &	!+ Draw Primary XX Grid (1 - Yes; 0 - No)
			DrawSecondaryGridXX,  &	!+ Draw Secundary XX Grid (1 - Yes; 0 - No)
			DrawPrimaryGridYY,	  &	!+ Draw Primary YY Grid (1 - Yes; 0 - No)
			DrawSecondaryGridYY,  &	!+ Draw Secundary YY Grid (1 - Yes; 0 - No)
			TextPositionXX,       &	!+ Position Text XX Axis (-1 - Lower Value; 0 - Zero Value; 1 - Upper Value) 
			TextPositionYY  	    !+ Position Text YY axis (-1 - Lower Value; 0 - Zero Value; 1 - Upper Value) 

Real ::		MaxXX,			    &
			MinXX,			    &
			PrimaryScaleXX,     &
			SecondaryScaleXX,   &
			MaxYY,			    &
			MinYY,			    &
			PrimaryScaleYY,     &
			SecondaryScaleYY,   &
            DimPrimaryScaleXX,  &
            DimPrimaryScaleYY,  &
            DimSecondaryScaleXX,&
		    DimSecondaryScaleYY,&
			TextHight	

character*(*)	::	text*25, & ! Variable to asign of datas in the axis
					TextStyle


Character , Intent(in) ::  Layer *(*)        !+ Axis Layer


!+ Draw Minimum XX axis
	if(DrawBorderAxisXX == 1 .Or. TextPositionXX == -1) call dfLine(FileNum, Layer,"bylayer ", "bylayer", MinXX, MinYY,0.0, MaxXX, MinYY, 0.0, 0.0)

!+ Draw Maximum XX axis
	if(DrawBorderAxisXX == 1 .Or. TextPositionXX == 1) call dfLine(FileNum, Layer,"bylayer ", "bylayer", MinXX, MaxYY,0.0, MaxXX, MaxYY, 0.0, 0.0)

!+ Draw Minimum YY Axis
	if(DrawBorderAxisYY == 1 .Or. TextPositionYY == -1) call dfLine(FileNum, Layer,"bylayer ", "bylayer", MinXX, MinYY,0.0, MinXX, MaxYY, 0.0, 0.0)

!+ Draw Maximum YY Axis
	if(DrawBorderAxisYY == 1 .Or. TextPositionYY == 1) call dfLine(FileNum, Layer,"bylayer ", "bylayer", MaxXX, MinYY,0.0, MaxXX, MaxYY, 0.0, 0.0)

!+ Draw Zero XX Axis
if(DrawZeroAxisXX == 1 .Or. TextPositionXX == 0) call dfLine(FileNum, Layer,"bylayer ", "bylayer", MinXX, 0.0,0.0, MaxXX, 0.0, 0.0, 0.0)

!+ Draw Zero YY Axis
if(DrawZeroAxisYY == 1 .Or. TextPositionYY == 0) call dfLine(FileNum, Layer,"bylayer ", "bylayer", 0.0, MinYY,0.0, 0.0, MaxYY, 0.0, 0.0)


NPrimXX = INT((MaxXX-MinXX)/PrimaryScaleXX)

do i=0,NPrimXX

if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 < 10000.0000000) opc = 0
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <  1000.0000000) opc = 1
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <   100.0000000) opc = 2
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <    10.0000000) opc = 3
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     1.0000000) opc = 4
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     0.1000000) opc = 5
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     0.0010000) opc = 6
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     0.0001000) opc = 7
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     0.0000100) opc = 8
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     0.0000010) opc = 9
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 <     0.0000001) opc = 10
if(((MinXX + i*PrimaryScaleXX)**2.0)**0.5 ==    0.0)       opc = 0


	!+ Draw Primary Scale on Minimum XX Axis
	if(DrawBorderAxisXX == 1 .Or. TextPositionXX == -1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*PrimaryScaleXX, MinYY- DimPrimaryScaleYY,0.0,MinXX + i*PrimaryScaleXX, MinYY,0.0,0.0)

	!+ Draw Primary Scale on Maximum XX Axis
	if(DrawBorderAxisXX == 1 .Or. TextPositionXX == 1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*PrimaryScaleXX, MaxYY + DimPrimaryScaleXX,0.0,MinXX + i*PrimaryScaleXX, MaxYY,0.0,0.0)

	!+ Draw Primary Scale on Zero XX Axis
	if(DrawZeroAxisXX == 1 .Or. TextPositionXX == 0) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*PrimaryScaleXX, - DimPrimaryScaleXX,0.0,MinXX + i*PrimaryScaleXX, 0.0+(MaxXX-MinXX)*0.02,0.0,0.0)
	

	!+ Draw Primary Grid YY
	if(DrawPrimaryGridYY == 1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*PrimaryScaleXX, MinYY,0.0,MinXX + i*PrimaryScaleXX, MaxYY,0.0,0.0)

	!+ Write Values on minimum XX Axis
	if(TextPositionXX== -1) Then
	call SUB_PSFR2C(MinXX + i*PrimaryScaleXX,Text,Opc)
	call dftext(FileNum,Layer,"bylayer",MinXX + i*PrimaryScaleXX, MinYY-DimPrimaryScaleXX,0.0,Text,TextHight,1.,90.,2,2,TextStyle)
	end if

	!+ Write Values on zero XX Axis
	if(TextPositionXX== 0) Then
	call SUB_PSFR2C(MinXX + i*PrimaryScaleXX,Text,Opc)
	call dftext(FileNum,Layer,"bylayer",MinXX + i*PrimaryScaleXX, 0.0-DimPrimaryScaleXX,0.0,Text,TextHight,1.,90.,2,2,TextStyle)
	end if

	!+ Write Values on Maximum XX Axis
	if(TextPositionXX == 1) Then
	call SUB_PSFR2C(MinXX + i*PrimaryScaleXX,Text,Opc)
	call dftext(FileNum,Layer,"bylayer",MinXX + i*PrimaryScaleXX, MaxYY+DimPrimaryScaleXX,0.0,Text,TextHight,1.,90.,0,2,TextStyle)
	end if
enddo

NSecXX = int((MaxXX-MinXX)/SecondaryScaleXX)
do i=0,NSecXX
	!+ Draw Secondary Scale on Minimum XX Axis
	if (DrawBorderAxisXX == 1 .Or. TextPositionXX == -1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*SecondaryScaleXX, MinYY- DimSecondaryScaleXX,0.0,MinXX + i*SecondaryScaleXX, MinYY,0.0,0.0)

	!+ Draw Secondary Scale on Maximum XX Axis
	if (DrawBorderAxisXX == 1 .Or. TextPositionXX == 1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*SecondaryScaleXX, MaxYY+DimSecondaryScaleXX,0.0,MinXX + i*SecondaryScaleXX, MaxYY,0.0,0.0)

	!+ Draw Secondary Scale on Zero XX Axis
	if(DrawZeroAxisXX == 1 .Or. TextPositionXX == 0) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*SecondaryScaleXX, 0.0-DimSecondaryScaleXX,0.0,MinXX + i*SecondaryScaleXX, 0.0+(MaxXX-MinXX)*0.01,0.0,0.0)
	
	!+ Draw Secondary Grid YY
	if(DrawSecondaryGridYY == 1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX + i*SecondaryScaleXX, MinYY,0.0,MinXX + i*SecondaryScaleXX, MaxYY,0.0,0.0)

enddo



NPrimYY = INT((MaxXX-MinXX)/PrimaryScaleXX)

do i=0,NPrimYY

if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 < 10000.000000) opc = 0
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <  1000.000000) opc = 1
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <   100.000000) opc = 2
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <    10.000000) opc = 3
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     1.000000) opc = 4
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     0.100000) opc = 5
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     0.0010000) opc = 6
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     0.0001000) opc = 7
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     0.0000100) opc = 8
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     0.0000010) opc = 9
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 <     0.0000001) opc = 10
if(((MinYY + i*PrimaryScaleYY)**2.0)**0.5 ==    0.0)     opc = 0

	!+ Draw Primary Scale on Minimum YY Axis
	if (DrawBorderAxisYY == 1 .Or. TextPositionYY == -1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX-DimPrimaryScaleYY , MinYY+ i*PrimaryScaleYY,0.0,MinXX, MinYY + i*PrimaryScaleYY,0.0,0.0)

	!+ Draw Primary Scale on Maximum YY Axis
	if (DrawBorderAxisYY == 1 .Or. TextPositionYY ==  1) call dfline(FileNum,Layer,"bylayer","bylayer",MaxXX+DimPrimaryScaleYY , MinYY +i*PrimaryScaleYY,0.0,MaxXX, MinYY + i*PrimaryScaleYY,0.0,0.0)

	!+ Draw Primary Scale on Zero YY Axis
	if(DrawZeroAxisYY == 1 .Or. TextPositionYY == 0) call dfline(FileNum,Layer,"bylayer","bylayer",-DimPrimaryScaleYY , MinYY+i*PrimaryScaleYY,0.0,(MaxXX-MinXX)*0.02,MinYY+i*PrimaryScaleYY,0.0,0.0)
	
	!+ Draw Primary Grid XX
	if(DrawPrimaryGridXX == 1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX, MinYY+ i*PrimaryScaleYY,0.0,MaxXX, MinYY + i*PrimaryScaleYY,0.0,0.0)

	!+ Write Values on minimum YY Axis
	if(TextPositionYY== -1) Then
	call SUB_PSFR2C(MinXX + i*PrimaryScaleXX,Text,Opc)
	call dftext(FileNum,Layer,"bylayer",MinXX-DimPrimaryScaleYY, MinYY+ i*PrimaryScaleYY,0.0,Text,TextHight,1.,0.0,2,2,TextStyle)
	end if

	!+ Write Values on zero YY Axis
	if(TextPositionYY== 0) Then
	call SUB_PSFR2C(MinXX + i*PrimaryScaleXX,Text,Opc)
	call dftext(FileNum,Layer,"bylayer",-DimPrimaryScaleYY, MinYY+i*PrimaryScaleYY,0.0,Text,TextHight,1.,0.0,2,2,TextStyle)
	end if

	!+ Write Values on Maximum YY Axis
	if(TextPositionYY == 1) Then
	call SUB_PSFR2C(MinYY + i*PrimaryScaleYY,Text,Opc)
	call dftext(FileNum,Layer,"bylayer",MaxXX + DimPrimaryScaleYY , MinYY +i*PrimaryScaleYY,0.0,Text,TextHight,1.,0.0,0,2,TextStyle)
	end if

end do

NSecYY = int((MaxYY-MinYY)/SecondaryScaleYY)

do i=0,NSecYY
	!+ Draw Primary Scale on Minimum YY Axis
	if (DrawBorderAxisYY == 1 .Or. TextPositionYY == -1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX-DimSecondaryScaleYY, MinYY+ i*SecondaryScaleYY,0.0,MinXX, MinYY + i*SecondaryScaleYY,0.0,0.0)

	!+ Draw Primary Scale on Maximum YY Axis
	if (DrawBorderAxisYY == 1 .Or. TextPositionYY == 1)	call dfline(FileNum,Layer,"bylayer","bylayer",MaxXX+DimSecondaryScaleYY,MinYY+i*SecondaryScaleYY,0.0,MaxXX, MinYY + i*SecondaryScaleYY,0.0,0.0)

	!+ Draw Primary Scale on Zero YY Axis
	if (DrawZeroAxisYY == 1 .Or. TextPositionYY == 0) call dfline(FileNum,Layer,"bylayer","bylayer",-DimSecondaryScaleYY,MinYY+i*SecondaryScaleYY,0.0,DimSecondaryScaleYY,MinYY+i*SecondaryScaleYY,0.0,0.0)

	!+ Draw Secondary Grid XX
	if(DrawSecondaryGridXX == 1) call dfline(FileNum,Layer,"bylayer","bylayer",MinXX, MinYY+ i*SecondaryScaleYY,0.0,MaxXX, MinYY + i*SecondaryScaleYY,0.0,0.0)
end do
end subroutine

!-----------------------------------------------------------------
! real 2 character
!-----------------------------------------------------------------
    SUBROUTINE SUB_PSFR2C(var1,var2,opc)


    REAL             ,INTENT ( IN) :: var1
    CHARACTER(len=*) ,INTENT  (OUT) :: var2
    INTEGER           ,INTENT ( IN) :: opc 
    
    OPEN (998,file="r2c.tmp",status="scratch")
    
    SELECT CASE (opc)
           CASE (0)
            WRITE(998,"(f12.0)")var1
           CASE (1)
            WRITE(998,"(f12.1)")var1
           CASE (2)
            WRITE(998,"(f12.2)")var1
           CASE (3)
            WRITE(998,"(f12.3)")var1
           CASE (4)
            WRITE(998,"(f12.4)")var1
           CASE (5)
            WRITE(998,"(f12.5)")var1
           CASE (6)
            WRITE(998,"(f12.6)")var1
           CASE (7)
            WRITE(998,"(f12.7)")var1
           CASE (8)
            WRITE(998,"(f12.8)")var1
           CASE (9)
            WRITE(998,"(f12.9)")var1
           CASE (10)
            WRITE(998,"(f12.10)")var1
           CASE (11)
            WRITE(998,"(f12.11)")var1
		   CASE (12)
            WRITE(998,"(f12.12)")var1
           CASE DEFAULT
           WRITE(*,*) "Erro - SUB_PSFR2C - Num. Casas decimais Errado"
     END SELECT
    
    REWIND(998)
    READ(998,*) var2
	var2 = TRIM(var2)
    CLOSE(998)
      
    RETURN
    END SUBROUTINE

!
!+ Draw a XY 2D Graph
!
Subroutine dfGraphXY2D	       & 
		  (FileNum,			   &
           Layer,			   &
		   X,				   & 
		   Y,                  &
		   NPoints)

! Description: 
! 
! Draw a XY 2D graphic in format dxf, using the arguments 
! 
! Method: 
! No comment...
!
! Current Code Owner: 
! Davide Santos (University of Algarve)     
! 
! History: 
! Version     Date      Comment 
! -------   --------    ------- 
!	1.0		03.11.18	Davide Santos
!
! Code Description: 
!   Language:  Fortran 90. 
!   Software Standards: "European Standards for Writing and  
!     Documenting Exchangeable Fortran 90 Code". 
! 
! Use staments


Implicit none 
 

! Definitions of variables

Integer	::	FileNum,		      &	!+ File number
			NPoints,              & !+ Counter
			i						!+ Reference item

Real, Dimension(:) :: X, Y  !+ XY Points (xx : yy)


Character , Intent(in) ::  Layer *(*)        !+ Axis Layer

do i=1,NPoints - 1  
call dfline(FileNum,Layer,"bylayer","bylayer",X(i),Y(i),0.0,X(i+1),Y(i+1),0.0,0.0) 
end do   

end subroutine



end module DXFortranGraph

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -