📄 dxfortransymbol.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 + -