Nesse modo, instala-se a versão pré-compilada e simplificada da biblioteca DISLIN para uso em projetos Visual Studio com Intel Fortran (IFX ou IFORT). Tal simplificação encapsula a biblioteca e disponibiliza duas subrotinas para gráficos de dispersão, (Scatter e Scatter2) que plotam as dispersões (x, f(x)) e (x, f(x), g(x)), respectivamente. No momento há suporte apenas para compilação em ambiente Windows.
- Clone do repositório:
git clone https://github.com/feanored/PlotsLib.git - Criar uma variável de ambiente para o subdiretório
libdo repositório, exemplo:set PLOTSLIB=C:\Plots\lib(Nesta pasta a biblioteca DISLIN já está pré-compilada e pronta para uso)
O projeto que irá utilizar a lib deve ser configurado como segue:
- Fortran
->General->Preprocessor Definitions =PLOTS=1(Ativa o uso da biblioteca) - Fortran
->General->Additional Include Directories =$(PLOTSLIB) - Linker
->Input->Additional Dependencies =$(PLOTSLIB)\PlotsLib.lib - (IMPORTANTE) Por fim, deve-se copiar o arquivo
%PLOTSLIB%\PlotsLib.dllpara a mesma pasta do seu projeto para que ele possa usar a lib em tempo de execução.
- Obter o zip de instalação do projeto: dl_11_ic.zip
- Descompactar e rodar o instalador
setup.exe, esse setup pede uma pasta de instalação, escolha alguma de sua preferência mas sem espaços no seu caminho, e a seguir crie uma variável de ambiente com o caminho escolhido, exemplo:set DISLIN=C:\dislin. - Rodar o Prompt de comando do Intel Fortran, e compilar o módulo de inclusão, que não vem pré-compilado, basta rodar:
cd %DISLIN%\ifc
ifx dislin.f90A compilação irá gerar warnings, mas o importante é que o arquivo dislin.mod será gerado. Esse arquivo é necessário na compilação do projeto PlotsLib, cuja configuração está listada a seguir. Este passo é opcional pois no zip fornecido já está presente o módulo compilado, que poderia ser copiado. Todavia, os passos de instalação e criação da variável de ambiente são necessários caso o projeto PlotsLib precise ser recompilado.
Como o CMake não se integra agradavelmente ao plugin do Intel Fortran no Visual Studio, a inclusão e linkagem da lib foram feitas manualmente em cada caixa de diálogo de Propriedades do Projeto PlotsLib (IFX) do Visual Studio, e listo aqui para conferência:
- General
->Output Directory =..\lib - Fortran
->General->Additional Include Directories =$(DISLIN)\ifc - Linker
->Input->Additional Dependencies =$(DISLIN)\disifl.lib user32.lib gdi32.lib libifcoremt.lib - Build Events
->Post-Build Event->Command Line =copy /Y "$(IntDir)\*mod" "..\lib"
Esta configuração irá recompilar, na pasta apontada na variável de ambiente, os arquivos PlotsLib.lib e plotslib.mod, necessários respectivamente na linkagem e inclusão de cabeçalhos em seus projetos Fortran, lembrando que no zip acima eles já existem, e esse processo só deve ser feito se for necessária alguma alteração ou customização.
subroutine Scatter(N, X, Y, cor, lbly, titulo, filename, lblx)
integer, intent(in) :: N ! número de pontos
real, dimension(N), intent(in) :: X, Y ! vetores de reais do gráfico (x, y=f(x))
character(*), intent(in) :: cor ! cor da função no gráfico
character(*), intent(in) :: lbly ! label da função no gráfico
character(*), intent(in) :: titulo ! título superior
character(*), intent(in), optional :: filename ! (Opcional) Cria imagem (filename.PNG)
character(*), intent(in), optional :: lblx ! (Opcional) Label do eixo X (o padrão é "X")
...
end subroutine
subroutine Scatter2(N, X, Y1, Y2, lbl1, lbl2, titulo, filename, lblx)
integer, intent(in) :: N ! número de pontos
real, dimension(N), intent(in) :: X ! vetor de reais do eixo X
real, dimension(N), intent(in) :: Y1 ! vetor de reais da primeira função f(x)
real, dimension(N), intent(in) :: Y2 ! vetor de reais da segunda função g(x)
character(*), intent(in) :: lbl1 ! label da primeira função
character(*), intent(in) :: lbl2 ! label da segunda função
character(*), intent(in) :: titulo ! título superior
character(*), intent(in), optional :: filename ! (Opcional) Cria imagem (filename.PNG)
character(*), intent(in), optional :: lblx ! (Opcional) Label do eixo X (o padrão é "X")
...
end subroutine