Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    208

Tout ce qui a été posté par (gile)

  1. Le projet a été mis à jour pour supporter AutoCAD 2025+.
  2. Salut, En sélectionnant la fenêtre : (setpropertyvalue (car (entsel "\nSélectionnez une fenêtre flottante: ")) "CustomScale" 0.02)
  3. Pour optimiser le temps d'exécution, tu peux remplacer les appels à 'command' par des 'entmake[x]'. Pour simplifier le processus, tu pourrais utiliser une lite d'association au lieu de définir une quarantaine de variables (LISP est très bien équipé pour traiter les listes. Un exemple avec les fonctions gc:InsertBlockReference et gc:SetDynPropValue extraites de la bibliothèque Blocks en bas de cette page. (while (< index nb-row) ;; Récupération de la liste courante (setq lst (nth index data-list)) ;; Liste d'association des noms de propriété dynamique aux valeurs récupérées (setq pairs (mapcar '(lambda (var index) (cons (vl-symbol-name var) (vlax-variant-value (nth index lst)))) '(ID A B phi H D C Nb N1 N1_larg N1_long S1 L1 fL1 fL2 N2 S2 E2 L2 fX2 fY2 N31 N312 S31 E31 L31 fY31 N32 N322 S32 E32 L32 fX32 V_béton P_tot Ratio pos_X pos_Y visi_sch) '(6 7 8 9 10 11 12 15 16 17 18 19 20 21 22 24 25 26 27 28 29 32 33 34 35 36 37 40 41 42 43 44 45 50 51 52 61 62 63) ) ) ;; Conversion explicite des coordonnées en réel (setq pos_X (if (numberp pos_X) pos_X (atof pos_X))) (setq pos_Y (if (numberp pos_Y) pos_Y (atof pos_Y))) ;; insertion du poteau (setq insertion-point (list pos_X pos_Y 0)) (if (setq ent (gc:InsertBlockReference "# ptx 2 rangs - Barre droite" insertion-point 0. 1.)) (foreach pair (reverse (cdddr (reverse pairs))) (gc:SetDynPropValue ent (strcat "AcDbDynBlockProperty" (car pair)) (cdr pair)) ) ) ;; insertion du schéma (setq insertion-point (list (+ 454 pos_X) (- pos_Y 17) 0)) (if (setq ent (gc:InsertBlockReference "# Schéma ptx Y2" insertion-point 0. 1.)) ;; Association des variables aux valeurs récupérées (progn (setq pairs (reverse pairs)) (foreach pair (list (car pairs) (cadr pairs) (caddr pairs)) (gc:SetDynPropValue ent (strcat "AcDbDynBlockProperty" (car pair)) (cdr pair)) ) ) ) ;; Incrémentation de l'index pour passer à l'itération suivante (setq index (1+ index)) )
  4. Salut, Les entrées de type chaîne de caractère (STR) dans le filtres de sélection utilisent les caractères génériques (voir l'aide pour wcmatch). Plutôt que d'utiliser des points d'interrogation (caractère générique correspondant à n'importe quel caractère), il est plus robuste d'utiliser le "caractère d'échappement" (apostrophe inversée AltGr+7) qui permet de lire littéralement un caractère générique. (princ (sslength (setq entite_sel (ssget "_x" '((2 . "*POINT*")(8 . "TOPOJIS-2025-`[01]"))))))
  5. Salut, Seules les commandes natives et les commandes personnalisées définies avec ObjectARX (ou .NET) peuvent être appelée en LISP avec les fonctions command, command-s ou vl-cmdf. -TCASE est une "commande" des express tools définie en LISP. Pour pouvoir l'appeler depuis un LISP en spécifiant les options, il faut utiliser vla-SendCommand. (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "-TCASE _L U ")
  6. Salut, Les coordonnées X et Y du décalage sont relatives à l'angle spécifié. Voir le fichier HatchPattern.dwg joint à ce message.
  7. J'ai répondu à la même demande ici.
  8. Je pense qu'il s'agit d'un problème d'encodage. Depuis la version 2021 d'AutoCAD, AutoLISP supporte les caractère UNICODE (j'en avais parlé ici). Il faut donc faire attention quand on copie/colle un LISP de bien l'enregistrer avec le bon encodage ASCII ou UNICODE ou (de convertir l'encodage).
  9. (gile)

    LISP - Liste de débit

    Avec une LT, en LISP, on ne peut pas attribuer de couleur (de fond ou de contenu) aux cellules d'un tableau. Une version qui ne joue pas avec les couleurs mais groupe les débits par section et trie les longueurs en ordre décroissant. (defun c:QSD (/ ss props data prop blocks found insPt table row) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)) ) ;; Sélectionner les blocs (prompt "\nSélectionner le(s) bloc(s) ou Entrée pour tous") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT"))) ) ) (if ss (progn ;; Créer une liste avec des en-têtes (numberOfReferences blockName section length) de la sélection précédente (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (if (not (vlax-property-available-p x 'Path)) (setq props (mapcar '(lambda (p) (cons (vlax-get p 'propertyname) (vlax-get p 'value))) (vlax-invoke x 'GetDynamicBlockProperties) ) data (list (vla-get-EffectiveName x) (if (setq prop (assoc "Section" props)) (cdr prop) "" ) (if (setq prop (assoc "L" props)) (rtos (cdr prop) 2 0) "" ) ) blocks (if (setq found (vl-some '(lambda (l) (if (equal (cdr l) data) l ) ) blocks ) ) (subst (cons (1+ (car found)) data) found blocks) (cons (cons 1 data) blocks) ) ) ) ) (vla-delete ss) ;; tri des blocs collectés (setq blocks (vl-sort blocks '(lambda (a b) (if (= (caddr a) (caddr b)) (< (cadddr b) (cadddr a)) (< (caddr a) (caddr b)) ) ) ) ) ;; Texte du point d'insertion (initget 1) (setq insPt (trans (getpoint "\nPoint d'insertion: ") 1 0)) ;; Créer la liste (setq table (vla-addtable (vla-get-modelspace *acdoc*) (vlax-3d-point insPt) (+ 2 (length blocks)) ;_ Nombre de rangées (Comprend Titre et En-têtes) 4 ;_ Nombre de colonne 125 ;_ Hauteur de cellule 500 ;_ largeur de cellule ) ) (vla-put-VertCellMargin table 4.0) (vla-put-TitleSuppressed table :vlax-false) (vla-put-HeaderSuppressed table :vlax-false) ;; Textes (vla-setText table 0 0 "Liste de débit") (vla-setText table 1 0 "Nom") (vla-setText table 1 1 "Quantité") (vla-setText table 1 2 "Section") (vla-setText table 1 3 "Longueur (en mm)") (vla-SetTextHeight table 7 50.0) ;; Remplit les lignes suivantes à partir du contenu de la liste (setq row 2) (foreach item blocks (vla-settext table row 0 (cadr item)) (vla-settext table row 1 (car item)) (vla-settext table row 2 (caddr item)) (vla-settext table row 3 (cadddr item)) (setq row (1+ row)) ) ) ) (princ) )
  10. (gile)

    LISP - Liste de débit

    Remplace : (vla-settext table row 3 (cadddr item)) par (vla-settext table row 3 (rtos (cadddr item) 2 0))
  11. (gile)

    LISP - Liste de débit

    On aperçoit dans la vidéo le message d'erreur dans la ligne de commande : "; erreur: type d'argument incorrect: VLA-OBJECT nil". Tu aurais dû commencer par signaler ça. Il semble qu'il y ait un problème avec la version d'AutoCAD et l'interface AcCmColor. Quelle version d'AutoCAD utilises-tu ?
  12. (gile)

    LISP - Liste de débit

    J'ai modifié le message ci-dessus.
  13. (gile)

    LISP - Liste de débit

    Le fichier QSD.zip téléchargeable en cliquant sur >ce lien< contient un screencast (QSD.mp4) qui a été réalisé avec le fichier QSD.lsp contenu dans ce même zip.
  14. Le code de cette réponse devrait fonctionner.
  15. (gile)

    LISP - Liste de débit

    Ce que j'ai (et que tu devrais avoir) avec le code ci-dessus.
  16. @-Th- Le code posté me semble bien provenir d'une IA. Aucun débutant en AutoLISP n'aurait l'idée d'inventer une fonction let* qui, certes, existe en Common LISP mais pas en AutoLISP. Avant de répondre plus avant, j'aurais juste une question : veux-tu apprendre le LISP ou obtenir un code ? Dans le premier cas, oublie l'utilisation des "IA" qui sont, à mon avis, le plus mauvais moyen pour apprendre.
  17. (gile)

    LISP - Liste de débit

    Il m'est impossible de répondre sans pouvoir tester avec le DWG concerné. Ça fonctionne avec le fichier "Liste de debit.dwg" joint dans le premier message.
  18. (gile)

    LISP - Liste de débit

    Salut, Essaye comme ça. (defun c:QSD (/ ss props data prop blocks found insPt colors color rgb table row) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)) ) ;; Sélectionner les blocs (prompt "\nSélectionner le(s) bloc(s) ou Entrée pour tous") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT"))) ) ) (if ss (progn ;; Créer une liste avec des en-têtes (numberOfReferences blockName section length) de la sélection précédente (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (if (not (vlax-property-available-p x 'Path)) (setq props (mapcar '(lambda (p) (cons (vlax-get p 'propertyname) (vlax-get p 'value))) (vlax-invoke x 'GetDynamicBlockProperties) ) data (list (vla-get-EffectiveName x) (if (setq prop (assoc "Section" props)) (cdr prop) "" ) (if (setq prop (assoc "L" props)) (cdr prop) "" ) ) blocks (if (setq found (vl-some '(lambda (l) (if (equal (cdr l) data) l ) ) blocks ) ) (subst (cons (1+ (car found)) data) found blocks) (cons (cons 1 data) blocks) ) ) ) ) (vla-delete ss) ;; tri des blocs collectés (setq blocks (vl-sort blocks '(lambda (a b) (if (= (caddr a) (caddr b)) (< (cadddr b) (cadddr a)) (< (caddr a) (caddr b)) ) ) ) ) ;; Texte du point d'insertion (initget 1) (setq insPt (trans (getpoint "\nPoint d'insertion: ") 1 0)) ;; couleurs (setq colors '(("145x45" 220 218 218) ("120x45" 221 179 212) ("95x45" 173 221 247) ("45x45" 173 221 247) ("27x45" 206 204 230) ("22x45" 243 169 134) ) ) (setq color (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2) ) ) ) ;; Créer la liste (setq table (vla-addtable (vla-get-modelspace *acdoc*) (vlax-3d-point insPt) (+ 2 (length blocks)) ;_ Nombre de rangées (Comprend Titre et En-têtes) 4 ;_ Nombre de colonne 125 ;_ Hauteur de cellule 500 ;_ largeur de cellule ) ) (vla-put-VertCellMargin table 4.0) (vla-put-TitleSuppressed table :vlax-false) (vla-put-HeaderSuppressed table :vlax-false) ;; Textes (vla-setText table 0 0 "Liste de débit") (vla-setText table 1 0 "Nom") (vla-setText table 1 1 "Quantité") (vla-setText table 1 2 "Section") (vla-setText table 1 3 "Longueur (en mm)") (vla-SetTextHeight table 7 50.0) ;; Remplit les lignes suivantes à partir du contenu de la liste (setq row 2) (foreach item blocks (vla-settext table row 0 (cadr item)) (vla-settext table row 1 (car item)) (vla-settext table row 2 (caddr item)) (if (setq rgb (assoc (caddr item) colors)) (progn (vla-SetRgb color (cadr rgb) (caddr rgb) (cadddr rgb)) (vla-setCellBackgroundColor table row 2 color) ) ) (vla-settext table row 3 (cadddr item)) (setq row (1+ row)) ) ) ) (princ) )
  19. Salut, À ma connaissance il n'y a pas de fonction Visual LISP (ni en .NET d'ailleurs) pour modifier les paramètres dynamiques de définitions de bloc. Reste peut-être le DXF, si on a le courage décrypter les dictionnaires d'extension des définitions de bloc, mais il n'est pas certain qu'on puisse les modifier...
  20. (gile)

    LISP - Liste de débit

    Salut, Essaye comme ça : (defun c:QSD (/ ss props data prop blocks found insPt table row) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)) ) ;; Select blocks (prompt "\nSélectionner le(s) bloc(s) ou Entrée pour tous") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT"))) ) ) (if ss (progn ;; Build a list of sub-lists (numberOfReferences blockName section length) from the selection set (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (if (not (vlax-property-available-p x 'Path)) (setq props (mapcar '(lambda (p) (cons (vlax-get p 'propertyname) (vlax-get p 'value))) (vlax-invoke x 'GetDynamicBlockProperties) ) data (list (vla-get-EffectiveName x) (if (setq prop (assoc "Section" props)) (cdr prop) "" ) (if (setq prop (assoc "L" props)) (cdr prop) "" ) ) blocks (if (setq found (vl-some '(lambda (l) (if (equal (cdr l) data) l ) ) blocks ) ) (subst (cons (1+ (car found)) data) found blocks) (cons (cons 1 data) blocks) ) ) ) ) (vla-delete ss) ;; Prompt for insertion point (initget 1) (setq insPt (trans (getpoint "\nPoint d'insertion: ") 1 0)) ;; Create the table (setq table (vla-addtable (vla-get-modelspace *acdoc*) (vlax-3d-point insPt) (+ 2 (length blocks)) ;_ number of rows (including title and header) 4 ;_ number of colums 100 ;_ cell height 800 ;_ row width ) ) (vla-put-VertCellMargin table 4.0) (vla-put-TitleSuppressed table :vlax-false) (vla-put-HeaderSuppressed table :vlax-false)_ ;; Textes version Francaise (vla-setText table 0 0 "Liste de débit") (vla-setText table 1 0 "Nom") (vla-setText table 1 1 "Quantité") (vla-setText table 1 2 "Section") (vla-setText table 1 3 "Longueur (en mm)") (vla-SetTextHeight table 7 50.0) ;; fill the following rows from the list contents (setq row 2) (foreach item blocks (vla-settext table row 0 (cadr item)) (vla-settext table row 1 (car item)) (vla-settext table row 2 (caddr item)) (vla-settext table row 3 (cadddr item)) (setq row (1+ row)) ) ) ) (princ) )
  21. Une autre version avec un argument supplémentaire : le rapport entre le décalage en X et en Y (fixé à 10 dans le code ci dessus) pour permettre de jouer sur le rapport entre le segment long et le segment court (chanfrein). ;; Décrit un motif de hachueres "ardoises losange" ;; ;; Arguments ;; d : longueur des segments longs (REAL) ;; r : rapport entre le décalage en X et en Y du segment long (INT) ;| Commande: (ardoisepat 0.32 20) 0, -0.023818333682,0, 0.250092503662,0.22627416998, 0.047636667364,-0.452548339959 225, 0,0, 0.336842105263,-0.016842105263, 0.32,-6.4 315, 0,0, 0.336842105263,0.016842105263, 0.32,-6.4 |; (defun ardoisePat (d r / z a b c) (setq z (getvar 'dimzin) a (/ d (- r 1.)) b (* a (sqrt 2.)) c (* d (sqrt 0.5)) ) (setvar 'dimzin 8) (princ (strcat "0, " (rtos (* -1 b) 2 12) ",0, " (rtos (+ c b) 2 12) "," (rtos c 2 12) ", " (rtos (* 2 b) 2 12) "," (rtos (* -2 c) 2 12) "\n225, 0,0, " (rtos (* r a) 2 12) "," (rtos (- a) 2 12) ", " (rtos d 2 12) "," (rtos (* (- r) d) 2 12) "\n315, 0,0, " (rtos (* r a) 2 12) "," (rtos a 2 12) ", " (rtos d 2 12) "," (rtos (* (- r) d) 2 12) ) ) (setvar 'dimzin z) (princ) )
  22. Puisqu'il est question de LISP dans le titre du sujet, je n'ai pas pu résister. Voici un LISP qui génère un motif de hachure pour des ardoises en losange en spécifiant la longueur des segments longs (d). (defun ardoisePat (d / z a b c) (setq z (getvar 'dimzin) a (/ d 9.) b (* a (sqrt 2.)) c (* d (sqrt 0.5)) ) (setvar 'dimzin 8) (princ (strcat "0, " (rtos (* -1 b) 2 12) ",0, " (rtos (+ c b) 2 12) "," (rtos c 2 12) ", " (rtos (* 2 b) 2 12) "," (rtos (* -2 c) 2 12) "\n225, 0,0, " (rtos (* 10 a) 2 12) "," (rtos (- a) 2 12) ", " (rtos d 2 12) "," (rtos (* -10. d) 2 12) "\n315, 0,0, " (rtos (* 10 a) 2 12) "," (rtos a 2 12) ", " (rtos d 2 12) "," (rtos (* -10. d) 2 12) ) ) (setvar 'dimzin z) (princ) ) À lancer en ligne de commande (ou dans l'éditeur Visual LISP). Commande: (ardoisepat 0.14) 0, -0.021998877637,0, 0.120993827003,0.098994949366, 0.043997755274,-0.197989898732 225, 0,0, 0.155555555556,-0.015555555556, 0.14,-1.4 315, 0,0, 0.155555555556,0.015555555556, 0.14,-1.4
  23. L'astuce c'est d'avoir un décalage en X (ici 0.15) qui soit un multiple du décalage en Y (ici 0.015). On peut aussi le faire avec une largeur de 15 cm et le même décalage en Y de 1.5 cm. *Ardoises 0, -0.0212132034,0, 0.12727923,0.10606601, 0.0424264069,-0.21213205 225, 0,0, 0.165,-0.015, 0.15,-1.65 315, 0,0, 0.165,0.015, 0.15,-1.65
  24. Il y a moyen de faire plus simple. *Ardoises_losanges, Ardoises en losange 20 x 20 0, -0.0212132034,0, 0.1166726189,0.0954594155, 0.0424264069,-0.1909188309 225, 0,0, 0.15,-0.015, 0.135,-1.35 315, 0,0, 0.15,0.015, 0.135,-1.35
  25. Ou encore (sans vla*) (getpropertyvalue (cdr (assoc 350 (member (cons 3 (getvar 'ctab)) (dictsearch (namedobjdict) "ACAD_LAYOUT")))) "PlotConfigurationName")
×
×
  • 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é