Aller au contenu

Import de SCU


tyrese69_

Messages recommandés

Bonjour à tous,

 

Le petit lisp suivant permet d'importer les SCU d'un autre fichier !

 

Il fonctionne bien avec les versions 2006 d'autocad mais pas avec la 2008 !

Quelqu'un a t'il une idée !

 

Merci d'avance

Daniel OLIVES

 

 
(defun c:scui (/ UCSs fullpath srcdoc srcucss cnt name ucslst)
(setq UCSs
	(vla-get-UserCoordinateSystems
	(vla-get-activedocument (vlax-get-acad-object)))
)
(and
	(setq fullpath (getfiled "Fichier Source" (getvar "dwgprefix") "dwg" 0))
	(setq srcdoc (DocAtPath fullpath))
	(setq srcucss (vla-get-UserCoordinateSystems srcdoc))
	(< 0 (vlax-get srcucss 'Count))
	(setq cnt 0)
	(vlax-for x srcucss
		(setq name (vlax-get x 'Name))
		(if (and
				(not (tblsearch "ucs" name))
				(not (wcmatch name "_Active*")))
			(setq ucslst (cons x ucslst)
				cnt (1+ cnt)
			)
		)
	)
	(not (vlax-invoke srcdoc 'copyobjects ucslst UCSs))
	(princ (strcat "\n\nNombre de sytème de coordonnées importé(s) = " (itoa cnt)))
) ;and
(if srcdoc (vlax-release-object srcdoc))
(if (= cnt 0) (alert "Pas de scu différent à importer !"))
(princ)
) ;end

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je pense que le problème vient de la routine DocAtPath, que tu n'as pas donné ici.

 

J'imagine qu'elle utilise ObjectDBX, et je suppose que le souci vient du fait que, depuis la verion 2004 (R16) la syntaxe change à chaque version de dwg (ObjectDBX.AxDbDocument.16 ObjectDBX.AxDbDocument.17...)

 

Voilà une routine polyvalente, qui fonctionne avec toutes les versions (renommée DocAtPath)

 

(defun DocAtPath (filename / objdbx release)
 (setq	objdbx
 (vlax-create-object
   (if (	     "ObjectDBX.AxDbDocument"
     (strcat "ObjectDBX.AxDbDocument." (itoa release))
   )
 )
 )
 (vla-open objdbx filename)
 objdbx
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

ObjectDBX ne fonctionne que sur les fichier fermés, si tu sélectionnes un fichier ouvert (MDI), tu auras une erreur.

 

Je te propose une version qui fonctionne aussi bien avec les fichiers fermés qu'ouverts

 

(defun c:scui (/ UCSs fullpath srcdoc odbx srcucss cnt name ucslst)
 (vl-load-com)
 (setq	UCSs
 (vla-get-UserCoordinateSystems
   (vla-get-activedocument (vlax-get-acad-object))
 )
 )
 (and
   (setq fullpath
   (getfiled "Fichier Source" (getvar "dwgprefix") "dwg" 0)
   )
   (or
     (and
(not
  (vl-catch-all-error-p
    (setq srcdoc
	   (vl-catch-all-apply
	     'vla-item
	     (list
	       (vla-get-Documents (vlax-get-acad-object))
	       (strcat (vl-filename-base fullpath) ".dwg")
	     )
	   )
    )
  )
)
(= fullpath (vla-get-FullName srcdoc))
     )
     (setq srcdoc (DocAtPath fullpath)
    odbx   T
     )
   )
   (setq srcucss (vla-get-UserCoordinateSystems srcdoc))
   (    (setq cnt 0)
   (vlax-for x	srcucss
     (setq name (vlax-get x 'Name))
     (if (and
    (not (tblsearch "ucs" name))
    (not (wcmatch name "_Active*"))
  )
(setq ucslst (cons x ucslst)
      cnt    (1+ cnt)
)
     )
   )
   (not (vlax-invoke srcdoc 'copyobjects ucslst UCSs))
   (princ
     (strcat "\n\nNombre de sytème de coordonnées importé(s) = "
      (itoa cnt)
     )
   )
 )
 (if odbx
   (vlax-release-object srcdoc)
 )
 (if (= cnt 0)
   (alert "Pas de scu différent à importer !")
 )
 (princ)
)

(defun DocAtPath (filename / objdbx release)
 (setq	objdbx
 (vlax-create-object
   (if (	     "ObjectDBX.AxDbDocument"
     (strcat "ObjectDBX.AxDbDocument." (itoa release))
   )
 )
 )
 (vla-open objdbx filename)
 objdbx
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Un grand merci a toi Gile car j'utilise cette routine régulièrement, je travail sur une gros projet où il y a plus de 20 SCU donc elle est trés pratique !

Je teste sur les différentes versions installées et je te tiens au courant !

 

Daniel OLIVES

 

PS: J'ai deux versions 2008 une sous XP au bureau avec laquelle la routine fonctionne et une sous vista avec laquelle la routine ne fonctionne pas, mais sur cette dernière j'ai d'autres pB comme la mutli-ouverture d'AutoCAD; par double clic depuis explorateur et cela malgré la SP1 installée (qui est sencée corriger ce bugg!). Je pense la réinstaller totalement et refaire un essai !

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Bonjour,

 

je souhaite utiliser le lisp de Gile. mais je suis novice en LISP... !

quelle est la procédure pour utiliser un LISP ?

pour l'instant, j'ai essayer de la façon suivante (mais ça ne fonctionne pas) :

je fais un copier/coller de ton code dans word, puis je change l'extension du fichier en .LSP

puis je le charge dans autocad (dans Outil / charger l'application).

Le lips est trouvé et chargé semble t-il mais je n'ai pas de nom de commande reconnu.

Pouvez-vous m'expliquer comment faire fonctionner votre Lisp, Gile ?

Un grand merci d'avance.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Re-bonjour,

 

Après lecture du tutorial "L'éditeur Visual LISP" de Gile,

j'ai utilisé le lisp de Gile pour importer des SCU.

Lorsque je tape la commande SCUI (est-ce le nom exact à taper ?), autocad répond :

; erreur: no function definition: VLAX-GET-ACAD-OBJECT

Qu'est-ce que cela signifie?

Je précise que je suis sur Autocad 2008.

Pouvez-vous me renseigner ? merci.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

quelle est la procédure pour utiliser un LISP ?

Tu peux voir ce sujet

 

Lorsque je tape la commande SCUI (est-ce le nom exact à taper ?), autocad répond :

; erreur: no function definition: VLAX-GET-ACAD-OBJECT

Oui c'est la bonne commande à taper.

Le message est du à un oubli de ma part.

J'ai modifié le code, il faut refaire le copier/coller (dans le bloc-notes, pas dans Word).

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
  • 1 mois après...

Bonjour à tous,

 

Je reviens sur ce sujet.

 

Parfois, la fonction vla-open donne cette erreur :

 

Erreur LISP: Erreur Automation Problème lors du chargement de l'application

 

Quelle peut bien en être la raison ?

 

(version Autocad 2009)

 

Daniel OLIVES

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

bonjour Gile (et les autres!),

 

j'utilisais ton code scui avec succès sur autocad 2008 !

Aujourd'hui, je l'ai testé sur Autocad 2009...

lorsque je le charge, l'application est correctement chargée, mais lorsque je ferme la fenêtre "charger/décharger les applications", j'ai l'erreur suivante :

; erreur: caractère lu incorrect (octal): 0

 

pourrais-tu m'aider ?

merci encore !

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne sais que te dire, peut-être un problème de copier/coller ?

 

Essaye avec cette dernière version mieux aboutie (merci à Patrick_35)

 

;; IMPORTUCS (gile)
;; Importe tous les SCUs nommés du DWG sélectionné

(defun c:importUCS (/ UCSs filename doc odbx docUCSs name ucslst)
 (vl-load-com)
 (setq	UCSs
 (vla-get-UserCoordinateSystems
   (vla-get-activedocument (vlax-get-acad-object))
 )
 )
 (if (setq filename
     (getfiled "Fichier Source" (getvar "dwgprefix") "dwg" 0)
     )
   (progn
     (vlax-for	d (vla-get-Documents (vlax-get-acad-object))
(if (= (strcase (vla-get-Fullname d)) (strcase filename))
  (setq doc d)
)
     )
     (or doc
  (setq	doc  (OpenDrawingDBX filename)
	odbx T
  )
     )
     (setq docUCSs (vla-get-UserCoordinateSystems doc))
     (if (< 0 (vla-get-Count docUCSs))
(progn
  (vlax-for x docUCSs
    (setq name (vla-get-Name x))
    (or
      (getitem UCSs name)
      (wcmatch name "_Active*")
      (setq ucslst (cons x ucslst))
    )
  )
  (if ucslst
    (progn
      (vlax-invoke doc 'CopyObjects ucslst UCSs)
      (princ
	(strcat "\n" (itoa (length ucslst)) " SCU(s) importé(s).")
      )
    )
    (princ "\nAucun SCU différent dans le dessin source.")
  )
  (and odbx (vlax-release-object doc))
)
(princ "\nAucun SCU enregistré dans le dessin source.")
     )
   )
 )
 (princ)
)

;;; Accéder à un dessin fermé

(defun OpenDrawingDBX (filename / objdbx release)
 (setq	objdbx
 (vlax-create-object
   (if (< (setq release (atoi (getvar "ACADVER"))) 16)
     "ObjectDBX.AxDbDocument"
     (strcat "ObjectDBX.AxDbDocument." (itoa release))
   )
 )
 )
 (vla-open objdbx filename)
 objdbx
)

;;; GetItem (gile)
;;; Retourne le vla-object de l'item s'il est présent dans la collection
;;;
;;; Arguments
;;; col : la collection (vla-object)
;;; name : le nom de l'objet (string) ou son indice (entier)
;;;
;;; Retour : le vla-object ou nil

(defun GetItem (col name / obj)
 (vl-catch-all-apply
   '(lambda () (setq obj (vla-item col name)))
 )
 obj
)

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Tout simplement génial.

Merci encore pour ce lisp super pratique :)

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour,

 

je ne pouvais absolument pas télécharger, charger et utiliser ce lisp qui marche à merveille sur mon AutoCAD 2012 sans remerciements!!!!

 

Alors un grand merci à Gile, Patrick_35 et à tous, pour ce que vous faites pour nous, humble utilisateurs non avertit se démenant tant bien que mal pour utiliser autocad.

 

MERCI.

 

Tchouce.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Bonjour,

 

j’utilisais cet outil merveilleux, mais depuis que j'ai changé de boulot et de version (autocad 2011 -> autocadmep 2014), j'ai l'erreur suivante et les SCU ne sont pas importer :

 

Erreur Automation. Aucune description n'a été entrée.

 

Avez-vous une idée ?

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Lien vers le commentaire
Partager sur d’autres sites

Salut sechanbask,

 

As-tu ajouter dans les options d'AMEP > Onglet Fichiers, un chemin de recherche de fichier en cours d'utilisation, un chemin qui pointe sur le dossier où est rangé le lisp?

 

De plus, il ne faudra pas oublier d'ajouter le chemin dans les Emplacement approuvés.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Si tu utilises souvent ce lisp, tu peux te créer une commande et un icône personnalisé, plutôt que de taper la commande au clavier, importucs

Ou te créer un raccourcis clavier.

 

http://pix.toile-libre.org/upload/img/1390413072.png

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

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é