Aller au contenu

Un simple zoom ? en Vla-open


stephan35

Messages recommandés

Après mon échec en dbx, j'attaque en vla

 

voilà mon code qui plante

 

 (setvar "SDI" 0)
 (setq vla(vla-open (vla-get-documents (vlax-get-acad-object)) (strcat $rep "\\" (Odcl_Control_GetText Boites_Open_EFIC))))
 (vla-zoomextents vla)
 (vla-close vla)
 (setvar "SDI" 1)

 

Le serveur ActiveX a

renvoyé l'erreur: nom inconnu: ZoomExtents

 

:casstet:

 

Un petit coup de pouce ???

 

Merci

 

[Edité le 16/2/2007 par stephan35]

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne suis pas sûr que tu puisse utiliser (vla-ZoomExtents ...) ailleurs que dans le document actif.

L'argument à passer à la fonction est l'application soit : (vla-ZoomExtents (vlax-get-acad-object)) et le zoom étendu est fait dans la fenêtre active du document actif, à savoir celui depuis lequel tu lance le LISP.

 

Pour la documentation sur les fonctions vla-*, il faut regarder dans l'Aide aux développeurs > ActiveX and VBA Reference puis choisir la section Events, Methods, Properties ou Objects.

Tu peux aussi utiliser la méthode décrite ici

 

Tu peux aussi, après avoir fait :

(setq vla (vla-open (vla-get-documents (vlax-get-acad-object))

(strcat $rep "\\" (Odcl_Control_GetText Boites_Open_EFIC))))

 

Faire :

(vlax-dump-object vla T)

qui retourne la liste des propriétés et des méthodes applicables à l'objet.

 

[Edité le 15/2/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

 Faire :
(vlax-dump-object vla T) 
qui retourne la liste des propriétés et des méthodes applicables à l'objet.

 

 

 

 

Bonjour,

 

j'ai comme réponse :

 

Objet vla :

#

; IAcadDocument: An AutoCAD drawing

; Valeurs de propriétés:

; Active (RO) = 0

; ActiveDimStyle = #

; ActiveLayer = #

; ActiveLayout = #

; ActiveLinetype = #

; ActivePViewport = AutoCAD: Aucune fenêtre active dans l'espace papier

; ActiveSelectionSet (RO) = #

; ActiveSpace = 1

; ActiveTextStyle = #

; ActiveUCS = AutoCAD: Identificateur d’objet nul

; ActiveViewport = #

; Application (RO) = #

; Blocks (RO) = #

; Database (RO) = #

; Dictionaries (RO) = #

; DimStyles (RO) = #

; ElevationModelSpace = 0.0

; ElevationPaperSpace = 0.0

; FileDependencies (RO) = #

; FullName (RO) = "D:\\TR46\\A\\TR46A002.DWG"

; Groups (RO) = #

; Height = 853

; HWND (RO) = 524774

; Layers (RO) = #

; Layouts (RO) = #

; Limits = (0.0 0.0 420.0 297.0)

; Linetypes (RO) = #

; ModelSpace (RO) = #

; MSpace = AutoCAD: Mode incorrect

; Name (RO) = "TR46A002.DWG"

; ObjectSnapMode = 0

; PaperSpace (RO) = #

; Path (RO) = "D:\\TR46\\A"

; PickfirstSelectionSet (RO) = #

; Plot (RO) = #

; PlotConfigurations (RO) = #

; Preferences (RO) = #

; ReadOnly (RO) = 0

; RegisteredApplications (RO) = #

16c4c084>

; Saved (RO) = -1

; SelectionSets (RO) = #

; SummaryInfo (RO) = #

; TextStyles (RO) = #

; UserCoordinateSystems (RO) = #

; Utility (RO) = #

; Viewports (RO) = #

; Views (RO) = #

; Width = 1246

; WindowState = 1

; WindowTitle (RO) = "D:\\TR46\\A\\TR46A002.DWG"

; Méthodes prises en charge:

; Activate ()

; AuditInfo (1)

; Close (2)

; CopyObjects (3)

; EndUndoMark ()

; Export (3)

; GetVariable (1)

; HandleToObject (1)

; Import (3)

; LoadShapeFile (1)

; New (1)

; ObjectIdToObject (1)

; Open (2)

; PurgeAll ()

; Regen (1)

; Save ()

; SaveAs (3)

; SendCommand (1)

; SetVariable (2)

; StartUndoMark ()

; Wblock (2)

 

Le zoomExtents n'en fait effectivement pas partie !

dois-je faire un activate ? pour m'autoriser à faire un sendcommand ?

 

Merci ...

Lien vers le commentaire
Partager sur d’autres sites

Salut

Le zoom ne fonctionne que sur le dessin courant

 

(vla-zoomall (vlax-get-acad-object))

 

Le problème avec (vla-activate vla), c'est que le lisp ne suit plus :(

 

Un vla-sendcommand est utile pour lancer une commande autocad sur un dessin autre que celui qui est courant et on retrouve le même problème qu'avec le vla-activate

 

Peut-être qu'avec les variables, c'est faisable

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

 (setq vla (vla-get-activedocument (vlax-get-acad-object)))
(vla-sendcommand vla "_zoom _e ")

 

Fonctionne : attention, j'ai été obligé de rajoter un espace après _e.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Fonctionne : attention, j'ai été obligé de rajoter un espace après _e.

 

 (setvar "SDI" 0)
 (setq vla(vla-open (vla-get-documents (vlax-get-acad-object)) (strcat $rep "\\" (Odcl_Control_GetText Boites_Open_EFIC))))
 (prompt "\nObjet vla :")(print vla)
 (vlax-dump-object vla T)
 (prompt "\nSuite ")
 (vla-sendcommand vla "_zoom _e ")
 (vla-save vla)
 (vla-close vla) 
 (setvar "SDI" 1)

 

Salut,

 

ça plante systématiquement ! (avec ou sans save):

erreur: Erreur Automation

 

 

 

il ne me manquerait pas un arx ?

 

tu peux me donner la liste de tes arx chargé ?

 

 

Merci bred

 

Lien vers le commentaire
Partager sur d’autres sites

Voici l'écran texte de la deuxieme cession :

 

Ouverture d'un fichier au format AutoCAD 2004.

Régénération du modèle.

 

AutoCAD Express Tools Copyright © 2002-2004 Autodesk, Inc.

La variable SDI ne peut être redéfinie que si un seul dessin est ouvert.;

erreur: paramètre de la variable AutoCAD rejeté: "SDI" 1

 

Voici l'écran texte de la première cession :

Suite ; erreur: Erreur Automation

 

On dirait qu'il ignore le vla-sendcommand !

 

Est-ce que ça fonctionne chez quelq'un ??? :casstet:

 

Merci les gars !

Lien vers le commentaire
Partager sur d’autres sites

Le moral revient .......... :D

 

Le code :

  (setvar "SDI" 0)
 (setq vla(vla-open (vla-get-documents (vlax-get-acad-object)) (strcat $rep "\\" (Odcl_Control_GetText Boites_Open_EFIC)) nil))
 (detail vla "vla-open")
 (setq ms (vla-get-ModelSpace vla))
 (detail ms "vla-get-ModelSpace")
 (setq app (vla-get-application vla))
 (detail app "vla-get-application")
 (vla-zoomall app)
 ;(vla-saveas vla (strcat $rep "\\" (Odcl_Control_GetText Boites_Open_EFIC)) "acNative")
 (vla-save vla)
 (vla-close vla) 

 

Bon voilà ce qui se passe :

Par défaut il ouvre le dwg en lecture seule ! c'est bête hein ! ;)

il faut mettre nil (j'ai trouvé tout seul !) dans vla-open

Par contre le vla-saveas provoque un méchant blocage !

 

Le zoom ne s'applique que sur ma cession de départ ... il faudrait peut-être pouvoir forcer temporairement la cession active , mais comment ?

 

Je continue .... :casstet:

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Enfin la suite ...

 

 

Voici mon astuce :

 

Mon lanceur, qui déclenche l'ouverture d'un autre DWG :

 

 (setvar "SDI" 0)
(vl-load-com)
(setcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX")) (strcat $drive "SCRIPT\\#Zoom#Save#Export.Lsp"))
(setq vla(vla-open (vla-get-documents (vlax-get-acad-object)) (strcat (Odcl_Control_GetCaption Boites_Open_EREP) "\\" (Odcl_Control_GetText Boites_Open_EFIC))nil))
(setq ms (vla-get-ModelSpace vla))
(setq app (vla-get-application vla))
(vla-close vla T) ; T pour ignorer la sauvegarde ?
(vlax-release-object vla)
(vlax-release-object ms)
(vlax-release-object app)
(setvar "SDI" 1)

 

Je définie une cle "AppData/BHZ/Config/Lisp/" qui, lorsqu'elle est initialisée déclenchera l'ouverutre d'un lisp dans le chargeur acadxxx.lsp !

 

 

ACAD2006DOC.lsp

 

 ; Déclenchement de lisp à l'ouverture d'un folio dans ce repertoire
(if (or
     (= nil  (getcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX"))))
     (= ""  (getcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX"))))
     )
(setcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX")) "")
(getcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX")))
)

...
...
...
..

; Lanceur programme lisp à l'ouverture d'un folio
(if (/= "" (getcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX"))))(load (getcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX")))))

 

 

Mon #Zoom#Save#Export.Lsp

 

 (alert "ooooo")
; zoom etendu
(command "_zoom" "_e")
; Sauvegarde
(command "_qsave")
; Exporte la base de donnée
(load (strcat $drive "GESTION_data_exporte.lsp"))
; Reinitialise le lanceur
(setcfg (strcat "AppData/BHZ/Config/Lisp/" (getvar "DWGPREFIX")) "")

 

 

A adapter suivant utilisation ....

Attention au controle des variables SDI et ACADLSPASDOC qui peuvent poser problèmes...

 

 

Ouf !

 

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité