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

📄 dxfortransymbol.f90

📁 DXF producer by Fortran
💻 F90
字号:
module DXFortranSymbol

! 
! Description: 
! 
! Current Code Owner: 
! History: 
!  
! Version   Date     Comment 
! -------   -----    ------- 
! 
! 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. 



!
!DRAW A VECTOR IN DXF
!
!          |\
! ---------| > 
!          |/
!
subroutine dfSVector 	&
			(FileNum,   &
			Layer,		&
			Color,		&
			X0,			&
			Y0,			&
			L,			&
			ANGLE,		&
			A,			&
			B)		

!
! Description: 
! 
! THIS SUBROUTINE DRAWS A VECTOR.
! THE INPUT DATA ARE:
! - THE COORDENATES OF THE ORIGIN OF THE VECTOR <X0> AND <Y0>;
! - THE LENGHT <L> OF THE VECTOR;
! - THE ANGLE (IN RADIANS) OF THE VECTOR WITH THE HORIZONTAL <ANGLE>;
! - THE SCALE FACTOR FOR THE LENGHT OF THE ARROW <A>;
! - THE SCALE FACTOR FOR THE HEIGHT OF THE ARROW <B>.
! 
! 
! Method: 
! No comment...
!
! Current Code Owner: 
! Carlos Silva, David Pereira and Jorge Isidoro
! 
! (Department of Civil Engineering of the University of Algarve - Portugal)     
! 
! History: 
! Version   Date        Comment 
! -------   --------    ------- 
! 0.1		02.02.15    David Pereira
! 
!
! Code Description: 
!   Language:  Fortran 90. 
!   Software Standards: "European Standards for Writing and  
!     Documenting Exchangeable Fortran 90 Code". 
! 

Implicit None 
 
! Include statements: 
! Declarations must be of the form: 
 
! Subroutine arguments 
! Scalar arguments with intent(in): 

Real, Intent (in)        ::               &
                              X0,         &     !+ Initial Coordenate X 
                              Y0,         &     !+ Initial Coordenate Y
                              L,	  	  &     !+ Length
							  ANGLE,      &	    !+ Angle in radian
							  A, 		  &     !+ Scale factor for length of arrow
							  B					!+ Scale factor for width of arrow

Real::X(5),Y(5),TEMPX,TEMPY
							   

Integer   ,Intent (in)   ::   FileNum          !+ File number
                          
Character , Intent(in)   ::               &
                              Color *(*), &    !+ Circle Color
                              Layer *(*)       !+ Circle Layer
INTEGER :: I

!DEFINITION OF A UNITARY VECTOR
X(1)=0.0
Y(1)=0.0
X(2)=L
Y(2)=0.0
X(3)=X(2)
Y(3)=Y(2)-0.5*B
X(4)=X(2)+A
Y(4)=Y(2)
X(5)=X(2)
Y(5)=Y(2)+0.5*B

!ROTATION OF EACH POINT
I=0
DO I=1,5
	TEMPX=COS(ANGLE)*X(I)+(-SIN(ANGLE))*Y(I)
	TEMPY=SIN(ANGLE)*X(I)+(COS(ANGLE))*Y(I)
	X(I)=TEMPX
	Y(I)=TEMPY
END DO

!TRANSLATION OF EACH POINT

DO I=1,5
	X(I)=X(I)+X0
	Y(I)=Y(I)+Y0
END DO

!CREATING EACH VECTOR
CALL dfLine(FileNum, Layer,'bylayer',Color,X(1),Y(1),0.0,X(2),Y(2),0.0,0.0)
CALL dfLine(FileNum, Layer,'bylayer',Color,X(3),Y(3),0.0,X(5),Y(5),0.0,0.0)
CALL dfLine(FileNum, Layer,'bylayer',Color,X(3),Y(3),0.0,X(4),Y(4),0.0,0.0)
CALL dfLine(FileNum, Layer,'bylayer',Color,X(4),Y(4),0.0,X(5),Y(5),0.0,0.0)

return
end subroutine dfSVector


!
!DRAW A CROSS IN DXF
!        (4) 
!         |
!   (1)---|---(2)
!         |
!        (3)
subroutine dfSCross 	&
			(FileNum,   &
			Layer,		&
			ColorX,		&
			ColorY,		&
			X0,			&
			Y0,			&
			DX,			&
			DY,         &
            ANGLE,		&
			SCALE)
		

!
! Description: 
! 
! THIS SUBROUTINE DRAWS A CROSS.
! THE INPUT DATA ARE:
! - THE COORDENATES OF THE CENTER OF THE CROSS <X0> AND <Y0>;
! - THE DIMENSION X OF THE CROSS <DX>;
! - THE DIMENSION Y OF THE CROSS <DY>;
! - THE ANGLE (IN RADIANS) OF THE VECTOR WITH THE HORIZONTAL <ANGLE>;
! - THE SCALE FACTOR FOR THE LENGHT OF THE CROSS <SCALE>;
! 
! 
! Method: 
! No comment...
!
! Current Code Owner: 
! David Pereira
! 
! (Department of Civil Engineering of the University of Algarve - Portugal)     
! 
! History: 
! Version   Date        Comment 
! -------   --------    ------- 
! 0.1		03.04.19    David Pereira
! 
!
! Code Description: 
!   Language:  Fortran 90. 
!   Software Standards: "European Standards for Writing and  
!     Documenting Exchangeable Fortran 90 Code". 
! 

Implicit None 
 
! Include statements: 
! Declarations must be of the form: 
 
! Subroutine arguments 
! Scalar arguments with intent(in): 

Real, Intent (in)        ::               &
                              X0,         &     !+ Initial Coordenate X 
                              Y0,         &     !+ Initial Coordenate Y
                              DX,	  	  &     !+ Length X
                              DY,	  	  &     !+ Length Y
							  ANGLE,      &	    !+ Angle in radian
							  SCALE				!+ Scale factor for CROSS

Real::X_C(4),Y_C(4),TEMPX,TEMPY
							   

Integer   ,Intent (in)   ::   FileNum          !+ File number
                          
Character , Intent(in)   ::               &
                              ColorX *(*),&    !+ ColorX
                              ColorY *(*),&    !+ ColorY
                              Layer *(*)       !+ Layer
INTEGER :: I

!DEFINITION OF THE CROSS
X_C(1)=(-0.5*DX)*SCALE
Y_C(1)=0.0
X_C(2)=0.5*DX*SCALE
Y_C(2)=0.0
X_C(3)=0.0
Y_C(3)=-0.5*DY*SCALE
X_C(4)=0.0
Y_C(4)=0.5*DY*SCALE

!ROTATION OF EACH POINT
I=0
DO I=1,4
	TEMPX=COS(ANGLE)*X_C(I)+(-SIN(ANGLE))*Y_C(I)
	TEMPY=SIN(ANGLE)*X_C(I)+(COS(ANGLE))*Y_C(I)
	X_C(I)=TEMPX
	Y_C(I)=TEMPY
END DO

!TRANSLATION OF EACH POINT

DO I=1,4
	X_C(I)=X_C(I)+X0
	Y_C(I)=Y_C(I)+Y0
END DO

!CREATING CROSS
CALL dfLine(FileNum, Layer,'bylayer',ColorX,X_C(1),Y_C(1),0.0,X_C(2),Y_C(2),0.0,0.0)
CALL dfLine(FileNum, Layer,'bylayer',ColorY,X_C(3),Y_C(3),0.0,X_C(4),Y_C(4),0.0,0.0)

return
end subroutine dfSCross



End Module DXFortranSymbol

⌨️ 快捷键说明

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