Aller au contenu

Lisps de Patrick_35


Patrick_35

Messages recommandés

Hello

 

1) Il semblerait que un truc du genre : *xxx_yyy

soit OK (sans Alt GR + 7) !

 

2) Par contre : *xxx_yyy*

ne fonctionne pas !

 

Donc il faudrait faire : *xxx_yyy`*

sans doute !?

 

Merci d'avance de tes lumieres, Bye, lecrabe

Salut

 

Si tu souhaites traiter tous les noms commencant "*" --> `**

Si tu souhaites traiter tous les noms commencant par "*abc_123" --> `*abc_123*

Si tu souhaites traiter tous les noms contenant "abc_123" --> *abc_123*

Si tu souhaites traiter tous les noms terminant par "abc_123*" --> *abc_123`*

 

@+

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

  • 4 mois après...
  • 4 semaines après...

Bonjour à tous,

 

Je tente d'adapter ce code à mes besoins, bien bien entendu, ça ne fonctionne pas...

 

Voici le code :

(defun nombl (blo)
 (if (vlax-property-available-p blo 'effectivename)
   (vla-get-effectivename blo)
   (vla-get-name blo)
 ) ;_ Fin de if
) ;_ Fin de defun
;;;
(setq LstBlk '(("EDF12*" . "Poteau_Bt")
              ("EAU12*" . "BoucheIncendie")
              ("EDF112*" . "Poteau_Cand")
              ("PTT12*" . "Poteau_Tel")
              ("EAU42*" . "Bouche")
              ("PLOT*" . "Poteau_Plot")
              ("GAZ22*" . "BoucheGaz")
             )
) ;_ Fin de setq
;;;Début de la boucle
(vla-startundomark doc)
(foreach PosLstBlk LstBlk
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (and (tblsearch "block" (car PosLstBlk))
      (ssget "x" (list (cons 0 "insert")))
      (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc))
               (and (wcmatch (nombl ent) (cdr PosLstBlk)) (vla-put-name ent (car PosLstBlk)))
             ) ;_ Fin de vlax-for
             (vla-delete sel)
      ) ;_ Fin de progn
 ) ;_ Fin de and
) ;_ Fin de foreach
(vla-endundomark doc)

Si quelqu'un a un conseil ou une astuce, je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Et ce cette manière ?

 

 

(defun nombl (blo)
 (if (vlax-property-available-p blo 'effectivename)
   (vla-get-effectivename blo)
   (vla-get-name blo)
 ) ;_ Fin de if
) ;_ Fin de defun
;;;

(setq LstBlk '(("EDF12*" . "Poteau_Bt")
              ("EAU12*" . "BoucheIncendie")
              ("EDF112*" . "Poteau_Cand")
              ("PTT12*" . "Poteau_Tel")
              ("EAU42*" . "Bouche")
              ("PLOT*" . "Poteau_Plot")
              ("GAZ22*" . "BoucheGaz")
             )
) ;_ Fin de setq

;;;Début de la boucle
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc)
(foreach PosLstBlk LstBlk
 (and (tblsearch "block" (car PosLstBlk))
      (ssget "x" (list (cons 0 "insert")))
      (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc))
               (and (wcmatch (nombl ent) (car PosLstBlk)) (vla-put-name ent (cdr PosLstBlk)))
             ) ;_ Fin de vlax-for
             (vla-delete sel)
      ) ;_ Fin de progn
 ) ;_ Fin de and
) ;_ Fin de foreach
(vla-endundomark doc)

 

@+

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

Rebonjour Patrick_35,

 

Et merci de m'aider.

 

A ta question si ce nouveau code fonctionne, la réponse est "Non", et AutoCAD ne me dit rien...

 

Par contre, est-ce que les blocs remplaçants doivent être définis dans le dessin courant ?

 

Si oui, dois-je les insérer puis les effacer ensuite ?

 

EDIT : En fait, même si le bloc est déjà défini dans le dessin, ça ne fonctionne pas. Mais je cherche...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Ah oui, je viens de trouver l'erreur

Il faut virer (tblsearch "block" (car PosLstBlk)) car une recherche dans la table des blocs avec un nom de bloc ayant un caractère générique dans son nom, ben ça ne fonctionne pas (logique)

 

@+

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

Merci de ton aide Patrick_35, mais ça plante toujours, et je ne vois pas où :

  ;;Remplacement de blocs----------------------------------------------------------
 (defun nombl (blo)
   (if (vlax-property-available-p blo 'effectivename)
     (vla-get-effectivename blo)
     (vla-get-name blo)
   ) ;_ Fin de if
 ) ;_ Fin de defun
;;;
 (princ "\nDébut du remplacement des blocs")
 (setq LstBlk '(("EDF12*" . "Poteau_Bt")
                ("EAU12*" . "BoucheIncendie")
                ("EDF112*" . "Poteau_Cand")
                ("PTT12*" . "Poteau_Tel")
                ("EAU42*" . "Bouche")
                ("PLOT*" . "Poteau_Plot")
                ("GAZ22*" . "BoucheGaz")
               )
 ) ;_ Fin de setq
;;;Début de la boucle
(princ "\nDrapeau 01")
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(princ "\nDrapeau 02")
(vla-startundomark doc)
(princ "\nDrapeau 03")
(foreach PosLstBlk LstBlk
 (princ "\nDrapeau 04")
 (and (ssget "x" (list (cons 0 "insert")))
      (progn (princ "\nDrapeau 05")
             (vlax-for ent (setq sel (vla-get-activeselectionset doc))
               (and (wcmatch (nombl ent) (car PosLstBlk)) (vla-put-name ent (cdr PosLstBlk)))
             ) ;_ Fin de vlax-for
             (vla-delete sel)
      ) ;_ Fin de progn
      (princ "\nDrapeau 06")
 ) ;_ Fin de and
 (princ "\nDrapeau 07")
) ;_ Fin de foreach
(princ "\nDrapeau 08")
(vla-endundomark doc)
;;;

Et AutoCAD me répond :

Début du remplacement des blocs

Drapeau 01

Drapeau 02

Drapeau 03

Drapeau 04

Drapeau 05; erreur: Erreur Automation Clé introuvable

; redéfinir après erreur

 

J'ai positionné des drapeau, à l'ancienne, pour m'aider à trouver où ça coince... Mais je ne trouve pas :(

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Il me semble que tu essayes de renommer des références de blocs. Je crains que ça ne soit pas possible. tu peux renommer des définitions de blocs à condition que ça ne soit pas de des blocs anonymes créés par AutoCAD pour les blocs dynamiques.

Ce n'est pas un problème de LISP (ou de programmation) ce sont les blocs AutoCAD qui sont définis de cette manière, il est important de bien comprendre la différence et les relations entre définition de bloc et références de bloc (de même pour les définitions et références d'attributs).

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

Lien vers le commentaire
Partager sur d’autres sites

Merci (gile) pour cette réponse,

 

Donc, si j'ai bien compris, il serait préférable que j'insert un "nouveau" bloc à la place de l'ancien et que je supprime l'ancien ? Reste juste à récupérer l'échelle et la rotation du bloc, car ils n'ont pas d'attributs...

 

Je ne pense pas que ce soit à ma porté mais ça vaut le coup d'essayer...

 

En tous cas, merci à vous pour tous ces conseils...

 

Bon week-end à tous.

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à vous deux

 

Le lisp a l'air bon. Je ne comprends pas où est le problème ?

J'avais testé avec de donner ma correction.

 

@gile

L'idée est de changer le nom d'un bloc pour le remplacer graphiquement, comme ça, on gade toutes ses caractéristiques mais dans le dessin, pas dans les définitions.

Par contre, je te rejoins pour les blocs dynamiques.

 

@+

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

  • 6 mois après...

Bonjour PAtrick,

 

En utilisant le programme RON.LSP pour renuméroter les présentations, sur une version 2015, il y ce message d'erreur !

 

no function definition: VLAX-GET-ACAD-OBJECT

 

 

As-tu une idée ? Faut-il que les EXPRESS soient installés ?

 

Je te remercie.

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour PAtrick,

 

En utilisant le programme RON.LSP pour renuméroter les présentations, sur une version 2015, il y ce message d'erreur !

 

no function definition: VLAX-GET-ACAD-OBJECT

 

 

As-tu une idée ? Faut-il que les EXPRESS soient installés ?

 

Je te remercie.

 

Christian

Salut

 

Il faut ajouter au lisp (ou taper directement au clavier)

(vl-load-com)

 

@+

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

  • 4 semaines après...

Bonjour Patrick_35.

 

Je suis confronté à un problème avec le lisp LXL5.11.

Sur un fichier, la liaison entre les blocs et le fichier excel disparaît à chaque redémarrage de l'ordinateur. Une idée?

Merci d'avance.

HPZ400 Workstation

Intel Xeon W3550 3.07 GHz

6 Go ram

QUADRO FX 1800

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Bonjour Patrick_35,

 

J'utilise un tas de tes LISP, et en premier lieu, je voudrai te remercié.

Mon probleme se pose dans l'utilisation de MAT.

J'ai une fichier avec beaucoup d'onglet avec un bloc avec attribut (cartouche) inserer sur chaque presentation.

les attributs sont des champs contenant une expression diesel du type "$(substr,$(getvar,ctab),7,50)".

 

comment pourrai je utilisé ton LISP MAT (ou un autre d'ailleurs) dans le but de propager ce type de valeur d'attribut?

 

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Bonjour à tous,

Sur une version de Map 3D 2016 j'ai un message d'erreur qui m'affiche "fichier Mim.dcl introuvable" au lancement de la routine MIM alors que dans mes options le dossier support est bien pris en compte.

J'ai d'autre routines lips qui se charge sans problème au démarrage de Map et qui sont dans le m^me dossier.

Etant novice en lips je suis incapable de trouver la ligne pour adapter le code au format 2016.

Merci d'avance de votre retour.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

Sur une version de Map 3D 2016 j'ai un message d'erreur qui m'affiche "fichier Mim.dcl introuvable" au lancement de la routine MIM alors que dans mes options le dossier support est bien pris en compte.

J'ai d'autre routines lips qui se charge sans problème au démarrage de Map et qui sont dans le m^me dossier.

Etant novice en lips je suis incapable de trouver la ligne pour adapter le code au format 2016.

Merci d'avance de votre retour.

Salut

 

C'est que le fichier dcl ne se trouve pas dans les chemins de recherches d'Autocad.

 

@+

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

  • 3 semaines après...

Bonjour, tout d'abord un grand merci pour tout ces lisps qui deviennent rapidement indispensable pour pouvoir travailler efficacement au quotidien.

 

J'aimerais pouvoir traiter plusieurs dwg à l'aide du lisp LXL (peut-être pas obligatoirement, je peuxcopier les données dans un fichier texte) ; je suis à l'écoute de vos suggestion.

Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...

Bonjour,

Je suis nouveau en tant que membre mais je profitai avec plaisir de toute vos techniques et conseils.

A ce jour j'utilisai l'ancienne version de Grf sans soucis mais depuis hier tous mes dwg regroupés se retrouvent en superposition dans l'espace objet (je pense à une origine différente)et avec deux fenêtres dans l'espace papier dont l'un correct. Même avec la dernière version.

Quel solution peut être possible?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'ai donc recaler l'origine de chaque fichier au même point 0,0,0.

Maintenant tout fonctionne. Mais j'aurai aimer trouver une routine pour le faire automatiquement.

Mes fichiers sont des fiches électriques donc toutes avec le même format.

Ensuite lors de l'utilisation de GRF dans l'espace présentation je me retrouve avec la bonne fenêtre d'extraction mais aussi avec une autre au hasard. Veux tu une série de fichiers ou cela est'ce du aux réglage autocad?

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Je veux bien un exemple.

A tout hasars, je met la dernière version

(defun c:grf(/ att bg col dirbox dix diy doc eh fen hd KillBigFont lay lcr lst obj old px py rep rgn sel sui tab tot x y)

 (defun dirbox(txt / cdl rep)
   (if (setq cdl (vlax-create-object "Shell.Application"))
     (progn
       (and (setq rep (vlax-invoke cdl 'browseforfolder 0 txt 512 ""))
            (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
       )
       (vlax-release-object cdl)
     )
   )
   rep
 )

 (defun KillBigFont (stname / )
   (setq styl (tblobjname "style" stname))
   (setq stlist (entget styl))
   (entmod (subst (cons 4 "")(assoc 4 stlist) stlist))
   (entupd styl)
   (princ)
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object))
col 1
       tot 1
x 0.0
y 0.0
eh 1.0	  ; Scale
rgn (getvar "LAYOUTREGENCTL")
lcr (getvar "LAYOUTCREATEVIEWPORT")
 )
 (vla-startundomark doc)
 (and (setq rep (dirbox "Sélectionnez le répertoire pour grouper les folios"))
      (setq lst (vl-directory-files rep "*.dwg" 1))
   (progn
     (setq rep (vl-string-translate "\\" "/" rep)
    old (layoutlist)
     )
     (or (eq (substr rep (strlen rep) 1) "/") (setq rep (strcat rep "/")))
     (setvar "LAYOUTREGENCTL" 0)
     (setvar "LAYOUTCREATEVIEWPORT" 0)
     (foreach ele (acad_strlsort lst)
       (setq obj (vla-insertblock (vla-get-modelspace doc)
                                  (vlax-3d-point (list x y 0.0))
                                  (findfile (strcat rep ele))
                                  1 1 1 0
                 )
       )
(and (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'bg 'hd)))
  (vlax-for sui (vla-get-textstyles doc)
    (or (eq (vla-get-bigfontfile sui) "")
	(findfile (vla-get-bigfontfile sui))
      (KillBigFont (vla-get-name sui))
    )
  )
)
(vla-getboundingbox obj 'bg 'hd)
(setq bg  (vlax-safearray->list bg)
      hd  (vlax-safearray->list hd)
      dix (- (car  hd) (car  bg))
      diy (- (cadr hd) (cadr bg))
      px  (* dix 1.05)
      py  (* diy 1.05)
      lay (itoa tot)
)
       (while (< (strlen lay) 2)
         (setq lay (strcat "0" lay))
       )
       (or (vl-catch-all-error-p (setq sel (vl-catch-all-apply 'vlax-invoke (list obj 'explode))))
  (vla-delete obj)
)
       (and (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list (vla-get-layouts doc) lay)))
            (ssget "x" (list (cons 410 lay)))
         (progn
           (vlax-map-collection (setq sel (vla-get-activeselectionset doc)) 'vla-delete)
           (vla-delete sel)
    (setq old (vl-remove lay old))
         )
       )
       (vla-put-activelayout doc (setq tab (vla-item (vla-get-layouts doc) lay)))
(setq fen (vla-addpviewport (vla-get-block tab) (vlax-3d-point (mapcar '(lambda(a B) (/ (+ a B) 2.0)) '(0.0 0.0 0.0) (list dix diy 0.0))) dix diy))
(vla-put-layer fen "0")
(vla-put-color fen "256")
(vla-put-viewporton fen :vlax-true)
(vla-zoomextents (vlax-get-acad-object))
(vla-display fen :vlax-false)
(vla-display fen :vlax-true)
(vla-put-mspace doc :vlax-true)
(vla-zoomWindow (vlax-get-acad-object) (vlax-3d-point bg) (vlax-3d-point hd))
(vla-put-customscale fen eh)
(vla-put-mspace doc :vlax-false)
(vla-put-displaylocked fen :vlax-true)
(setq tot (1+ tot)
      col (1+ col)
      x (+ x px)
)
(and (eq col 11)
  (setq x 0.0
	y (+ y py)
	col 1
  )
)
     )
     (setvar "LAYOUTREGENCTL" rgn)
     (setvar "LAYOUTCREATEVIEWPORT" lcr)
     (foreach lay old
(vla-delete (vla-item (vla-get-layouts doc) lay))
     )
     (vla-purgeall doc)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

@+

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

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é