Powerd911 – Numéro #1 au Canada

Script VB afin d’exporter sous forme d’images chacun des diagrammes associés à un modèle

Ces quelques lignes de code en Visual Basic Script permettent d’exporter  tous les diagrammes associés à un modèle (physique, logique ou conceptuel) sous la forme de fichiers d’images.

Compatible avec PowerDesigner/PowerAMC 16.5

 '****************************************************************************** 
 '* Nom du fichier : EXPORT_IMAGE.vbs 
 '* Définition : Export les diagrammes sous forme d'image JPEG 
 '* Modèle: Modèle de données physique (PDM), logique (LDM) et conceptuel (CDM) 
 '* Objets: Diagram
 '* Auteur: Benoît Le Nabec 
 '* URL : http://www.Powerd911.guru
 '* Créé: 2015-01-01 
 '* Version: 1.0 
 '****************************************************************************** 
 
Option Explicit 
dim model

On Error Goto 0

'Obtenir le modèle actif courant 
set model = activemodel
If model is nothing then 
   MsgBox "Il n'y a pas de modèle actif" 
else
  Creer_Image (model)
end if

 '****************************************************************************** 
 '* Nom de la fonction : Creer_Image 
 '* Définition : Export les diagrammes sous forme d'image JPEG 
 '* Modèle: Modèles de données physique (PDM), logique (LDM) et conceptuel (CDM) 
 '* Objets: Diagram
 '* Auteur: Benoît Le Nabec 
 '* URL : http://www.Powerd911.guru
 '* Créé: 2015-01-01 
 '* Version: 1.0 
 '****************************************************************************** 

Private Sub Creer_Image(model)
Dim aDiag
dim outputPath
dim package
dim fileExtension
dim diaglist
dim diagramlist
dim modelepatern
dim correspondances
dim fini 

fini = False

' On créer un objet RegExp (Regular Expression) 
Set modelepatern=new regexp
modelepatern.pattern="^\." ' On désire que le contenu de la chaine débute toujours par un "."
modelepatern.global=false ' On ne recherche pas le pattern plusieurs fois dans la chaîne

' On boucle tant que la chaine de caractère ne possède pas le bon format
Do While Not fini

   ' On demande à l'utilisateur d'inscrire le format. Par défaut le programme propose ".jpg"
   fileExtension = InputBox("Acronyme de l'extension des fichiers images (.bmp, .emf, .jpg, .jpeg, .png) :", "Acronyme de l'extension", ".jpg")

   ' Si l'utilisateur appuie sur le bouton annuler on termine l'exécution du programme
   if IsEmpty(fileExtension) then
     exit sub
   else
      ' on compare la chaîne lue au modèle
      Set correspondances=modelepatern.execute(fileExtension)

      ' Si la chaine a le bon format on pourra sortir de la boucle
      If correspondances.count<>0 Then
        ' Est-ce que le nom de l'extension est valide?
        if StrComp(fileExtension, ".bmp") and StrComp(fileExtension, ".emf") and StrComp(fileExtension, ".jpg") and StrComp(fileExtension, ".jpeg") and StrComp(fileExtension, ".png") then
            Output "Le nom de l'extension n'est pas valide"
            fini = False
         else
            fini = True      
         end if
      else
         Output "Le nom de l'extension ne débute pas par un '.'"
         fini = False
      end if
   end if
   
Loop

' On demande à l'utilisateur de préciser le nom du répertoire
outputPath = InputBox("Nom du répertoire ou seront conservé les images", "Nom du répertoire", "C:\temp\")

' Si l'utilisateur appuie sur le bouton annuler on termine l'exécution du programme
if IsEmpty(outputPath) then
 exit sub
end if

' On affiche les informations que l'utilisateur a fourni
MsgBox "Création des fichiers d'images sous le répertoire : " + outputPath + VbCrlf + "avec l'extension : " + fileExtension 

' On affiche au niveau de la trace le nom du modèle
output "Nom du modèle : " + model.name

'model.DisplayMetaModelHelp()


' On associe à la variable diaglist la liste des diagrammes selon le type de modèle
if model.IsKindOf (PdPDM.cls_Model) then 
  set diaglist = model.physicaldiagrams
elseif model.IsKindOf (PdLDM.cls_Model) then 
  set diaglist = model.logicaldiagrams
elseif model.IsKindOf (PdCDM.cls_Model) then 
  set diaglist = model.conceptualdiagrams
end if

' On boucle tant que nous trouvons des diagrammes associés au modèle courant
For Each aDiag In diaglist

   ' On affiche au niveau de la trace le nom du diagramme
   output "Nom du diagramme : " + aDiag.name

   ' On affiche le facteur du zoom de l'image
   output "Facteur du zoom : " + Cstr(adiag.Scale) + "%"

   ' On exporte l'image du diagramme
   aDiag.ExportImage(outputPath+model.name+"."+aDiag.name+fileExtension)
Next

' On boucle tant que nous trouvons des package associés au modèle courant
For each package in model.packages

   ' On affiche au niveau de la trace le nom du package
   output "Nom du package : " + package.name

   ' On associe à la variable diaglist la liste des diagrammes selon le type de modèle
   if model.IsKindOf (PdPDM.cls_Model) then 
      set diaglist = package.physicaldiagrams
   elseif model.IsKindOf (PdLDM.cls_Model) then 
      set diaglist = package.logicaldiagrams
   elseif model.IsKindOf (PdCDM.cls_Model) then 
      set diaglist = package.conceptualdiagrams
   end if

   ' On boucle tant que nous trouvons des diagrammes associés au package courant
   For Each aDiag In diaglist

      ' On affiche au niveau de la trace le nom du diagramme
      output "Nom du diagramme : " + aDiag.name
      
      ' On exporte l'image du diagramme
      aDiag.ExportImage(outputPath+model.name+"."+package.name+"."+aDiag.name+fileExtension)
   Next
Next
end sub

 

Laisser un commentaire