-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
208
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Désactiver les accrochages 2 (le retour)
(gile) a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
Le projet a été mis à jour pour supporter AutoCAD 2025+. -
Salut, En sélectionnant la fenêtre : (setpropertyvalue (car (entsel "\nSélectionnez une fenêtre flottante: ")) "CustomScale" 0.02)
-
Optimisation de l'insertion de blocs avec des attributs
(gile) a répondu à un(e) sujet de >>NicoM dans Routines LISP
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)) ) -
Sélectionner des éléments dans un calque avec un nom contenant des [crochets]
(gile) a répondu à un(e) sujet de PATRICE69 dans Pour aller plus loin en LISP
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]")))))) -
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 ")
-
Problème de compréhension de la syntaxe .pat
(gile) a répondu à un(e) sujet de sgtlame dans AutoCAD 2020-2024
Salut, Les coordonnées X et Y du décalage sont relatives à l'angle spécifié. Voir le fichier HatchPattern.dwg joint à ce message. -
lisp pour calcul en mètre sur un dessin en millimètre
(gile) a répondu à un(e) sujet de matmat dans AutoCAD 2020-2024
J'ai répondu à la même demande ici. -
Aires automatiques d’un lot + Surfaces (ACAD 2024/25)
(gile) a répondu à un(e) sujet de Scout dans Visual LISP
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). -
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) )
-
Remplace : (vla-settext table row 3 (cadddr item)) par (vla-settext table row 3 (rtos (cadddr item) 2 0))
-
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 ?
-
J'ai modifié le message ci-dessus.
-
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.
-
[RESOLU] Indentation de Pline_block by (gile)
(gile) a répondu à un(e) sujet de Kegaska dans LISP et Visual LISP
Le code de cette réponse devrait fonctionner. -
Ce que j'ai (et que tu devrais avoir) avec le code ci-dessus.
-
LSP Insertion de bloc avec coordonnées
(gile) a répondu à un(e) sujet de -Th- dans AutoCAD 2020-2024
@-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. -
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.
-
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) )
-
changer l'état de visibilité d'une entité à l'intérieur d'une définition de bloc dynamique
(gile) a répondu à un(e) sujet de GEGEMATIC dans Visual LISP
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... -
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) )
-
Lisp pour créer des hachures non "carrées"
(gile) a répondu à un(e) sujet de Otarie dans AutoCAD 2020-2024
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) ) -
Lisp pour créer des hachures non "carrées"
(gile) a répondu à un(e) sujet de Otarie dans AutoCAD 2020-2024
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 -
Lisp pour créer des hachures non "carrées"
(gile) a répondu à un(e) sujet de Otarie dans AutoCAD 2020-2024
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 -
Lisp pour créer des hachures non "carrées"
(gile) a répondu à un(e) sujet de Otarie dans AutoCAD 2020-2024
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 -
Comment identifier l'imprimante utilisée pour une présentation ?
(gile) a répondu à un(e) sujet de PATRICE69 dans Pour aller plus loin en LISP
Ou encore (sans vla*) (getpropertyvalue (cdr (assoc 350 (member (cons 3 (getvar 'ctab)) (dictsearch (namedobjdict) "ACAD_LAYOUT")))) "PlotConfigurationName")
