-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
209
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
(defun jeu1 (s / f) (defun f (l a) (if (cdr l) (f (cddr l) (vl-list* (car l) (cadr l) a)) a ) ) (vl-list->string (f (vl-string->list s) nil)) ) (defun jeu2 (s / l r) (setq l (vl-string->list s)) (while (cdr l) (setq r (vl-list* (car l) (cadr l) r) l (cddr l) ) ) (vl-list->string r) ) (defun jeu3 (str / f) (defun f (s r) (if (< 1 (strlen s)) (f (substr s 3) (strcat (substr s 1 2) r)) r ) ) (f str "") ) (defun jeu4 (s / r) (setq r "") (while (< 1 (strlen s)) (setq r (strcat (substr s 1 2) r) s (substr s 3) ) ) r ) Pour ce challenge : (defun vlax-curve-getPolylineCoordinates (pl / i pts) (repeat (setq i (if (vlax-curve-isClosed pl) (fix (vlax-curve-getEndParam pl)) (1+ (fix (vlax-curve-getEndParam pl))) ) ) (setq pts (cons (vlax-curve-getPointAtParam pl (setq i (1- i))) pts)) ) )
-
Salut, on peut utiliser plusieurs modèles (pattern) en les séparant par une virgule : "TestCalques*,Test2Calques*"
-
Problème de perte de boite de dialogue
(gile) a répondu à un(e) sujet de FormaBois dans AutoCAD 2012
Salut, CMDDIA = 1 -
Si le rayon est imposé, on ne peut pas conserver les trois autres contraintes (les deux tangences et le point sur la ligne). S'il ne faut conserver que les tangences aux deux lignes, la commande RACCORD (_FILLET) fait ce que tu demandes.
-
Salut, ARCTAN fait très bien ce qui est demandé (CF ce screencast) et le lien a été mis à jour pour une version compatible 2013-2021 (désinstaller l'ancienne version avant d'installer la nouvelle).
-
Je suis preneur aussi...
-
Lister des blocs par le nom d'attributs
(gile) a répondu à un(e) sujet de jujugeometre dans LISP et Visual LISP
Salut, Pour le fonctions récursives, tu peux voir la section 13.3 de Introduction à AutoLISP téléchargeable sur cette page. -
Salut, D'après l'aide : Signature (setpropertyvalue ename propertyname value [or collectionName index name val]) Autrement dit : (setpropertyvalue e3 "Vertices" 0 "EndWidth" 1.0)correspond à : (setpropertyvalue ename collectionName index name val) et : (setpropertyvalue thelast1 "AcDbDynBlockPropertyLARGEUR COTE" largeurprofil1)correspond à : (setpropertyvalue ename propertyname value) Mais en aucun cas il n'est question de traiter plusieurs propriétés dans la même expression (setpropertyvalue ...).
-
Modifier des blocs existant calque et couleur du calque
(gile) a répondu à un(e) sujet de passi54 dans LISP et Visual LISP
Salut, Edit_bloc sur cette page devrait répondre à tes attentes. -
Lister des blocs par le nom d'attributs
(gile) a répondu à un(e) sujet de jujugeometre dans LISP et Visual LISP
Salut, On ne peut filtrer directement avec les attributs. Il faut traiter la sélection a posteriori. ;; sélectionner tous les blocs avec attribut (setq s (ssget "_X" '((0 . "INSERT") (66 . 1)))) ;; parcourir le jeu de sélection pour écarter le blocs n'ayant pas d'attribut "MAT (repeat (setq i (sslength s)) (setq b (ssname s (setq i (1- i)))) (if (vl-catch-all-error-p (vl-catch-all-apply 'getpropertyvalue (list b "MAT")) ) (ssdel b s) ) ) -
Salut, Voir ce sujet. Dans ton cas, pour chaque nom de calque à rendre non-purgeable, faire : (gc:SetUnPurgeable "layer" "nom_du_calque")
-
Comment exploiter les MARQUEURS DE POSTION
(gile) a répondu à un(e) sujet de rebcao dans LISP et Visual LISP
Salut, Avec Visual LISP, il y a souvent moyen d'accéder directement à une liste LISP en utilisant : (vlax-get object 'Property) à la place de : (vla-getProperty object). Voir ce sujet. Exemple : (vlax-get name 'Position) On peut aussi utiliser la bibliothèque AutomationHelpers en bas de cette page. Exemple : (gc:VariantToLispData (vla-get-position name)) En ce qui concerne les champs, on obtient l'ObjectId sous forme de chaîne (string) avec la fonction vla-GetObjectIdString. Exemple: (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *util* (setq *util* (vla-get-Utility *acdoc*))) (defun c:GEOPOS (/ ent obj pt ms id) (and (setq ent (car (entsel))) (setq obj (vlax-ename->vla-object ent)) (= (vla-get-ObjectName obj) "AcDbGeoPositionMarker") (setq pt (getpoint "\nPoint d'insertion: ")) (setq ms (vla-get-Modelspace (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq id (vla-GetObjectIdString *util* obj :vlax-false)) (vla-AddMText (vla-get-Modelspace *acdoc*) (vlax-3d-point (trans pt 1 0)) 0. (strcat "Latitude : " "%<\\AcObjProp Object(%<\\_ObjId " id ">%).Latitude>%" "\\PLongitude : " "%<\\AcObjProp Object(%<\\_ObjId " id ">%).Longitude>%" ) ) ) (princ) ) -
[RESOLU] Exporter les FILTRES et GROUPES de calques
(gile) a répondu à un(e) sujet de rebcao dans AutoCAD 2020-2024
On est de gros flemmards (moi, en tout cas). Et puis on s'est tapé tout le boulot, l'utilisateur peut bien faire l'effort d'ouvrir le source ; comme ça il peut au moins se rendre compte de ce à quoi ça ressemble et au mieux, apprendre à coder par lui même... -
[RESOLU] Exporter les FILTRES et GROUPES de calques
(gile) a répondu à un(e) sujet de rebcao dans AutoCAD 2020-2024
Salut, Pour l'imoprt/export des filtres de calque, il y a aussi ce sujet. Ce n'est pas du LISP (mais c'est plus puissant). -
Salut, Je préfère me tenir loin et me contenter de suivre la course réelle. Me connaissant, si je m'inscris, je risque d'être sur le pont 24 heures sur 24 en ne m'accordant que des petites siestes...
-
Au temps pour moi, il faut un saut de ligne entre les deux attributs : -inserer DT 23200,6100,1 1 1 0 Z3/4 LOCAL
-
Salut, Essaye avec des guillemets -inserer DT 23200,6100,1 1 0 "Z3/4" "LOCAL"
-
macro pour sélectionner plusieurs blocs
(gile) a répondu à un(e) sujet de Jbrosteaux dans AutoCAD 2018
Nouvelle version avec une list_box (on a les barres de défilement mais plus les cases à cocher) et qui prend en compte les blocs dynamiques (anonymes). Modifier la largeur de la boite de dialogue : width = 80; Modifier la hauteur de la boite de dialogue : height = 20; (defun c:selblocks (/ str2lst lst2str lst tmp file dcl_id choice pattern ss i) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun lst2str (lst sep) (apply 'strcat (cons (car lst) (mapcar (function (lambda (x) (strcat sep x))) (cdr lst)) ) ) ) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst)) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line "getblocks:dialog { label=\"Choisir les blocs\"; width = 80; spacer; :list_box{ height = 20; key = \"lst\"; multiple_select = true; } spacer; ok_cancel; }" file ) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "getblocks" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list lst) (end_list) (action_tile "accept" "(if (/= (get_tile \"lst\") \"\") (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) lst) choice)) ) ) ) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) (if (and choice (setq pattern (lst2str choice ",")) (setq ss (ssget "_X" (list (cons 0 "INSERT") (cons 410 (getvar 'ctab)) (cons 2 (strcat "`*U*," pattern)) ) ) ) ) (progn (repeat (setq i (sslength ss)) (if (not (wcmatch (getpropertyvalue (getpropertyvalue (setq block (ssname ss (setq i (1- i)))) "BlockTableRecord" ) "Name" ) pattern ) ) (ssdel block ss) ) ) (sssetfirst nil ss) ) (sssetfirst nil nil) ) (princ) ) -
macro pour sélectionner plusieurs blocs
(gile) a répondu à un(e) sujet de Jbrosteaux dans AutoCAD 2018
C'est qu'il y a trop de blocs dans le dessin pour les afficher tous dans la boite de dialogue (il n'y a pas de barres de défilement en DCL). Sinon, en ligne de commande la routine donnée par lecrabe est très bien si tu veux utiliser des caractères génériques pour les noms de blocs (on peut en mettre plusieurs séparés par des virgules). -
macro pour sélectionner plusieurs blocs
(gile) a répondu à un(e) sujet de Jbrosteaux dans AutoCAD 2018
En une seule routine plus concise. Pour la largeur de la boite de dialogue, à la ligne : width = 80; tu remplaces 80 par la valeur que tu veux. (defun c:selblocks (/ lst2str lst tmp file dcl_id choice ss) (defun lst2str (lst sep) (apply 'strcat (cons (car lst) (mapcar (function (lambda (x) (strcat sep x))) (cdr lst)) ) ) ) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst)) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line "getblocks :dialog{ label = \"Choisir les blocs\"; width = 80; :boxed_column{" file ) (mapcar (function (lambda (x) (write-line (strcat ":toggle{ key = \"" x "\";label = \"" x "\"; }") file ) ) ) lst ) (write-line "spacer; :button{ label = \"Tout sélectionner\"; key = \"all\"; fixed_width = true; alignment = centered; }} spacer; ok_cancel; }" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "getblocks" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list lst) (end_list) (action_tile "all" "(foreach x lst (set_tile x \"1\"))" ) (action_tile "accept" "(foreach x lst (if (= \"1\" (get_tile x)) (setq choice (cons x choice)))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) (if choice (sssetfirst nil (ssget "_X" (list (cons 0 "INSERT") (cons 410 (getvar 'ctab)) (cons 2 (lst2str choice ","))) ) ) (sssetfirst nil nil) ) (princ) ) -
macro pour sélectionner plusieurs blocs
(gile) a répondu à un(e) sujet de Jbrosteaux dans AutoCAD 2018
Si tu dois coller les blocs un par un dans le nouveau fichier, je ne vois pas l'intérêt d'une automatisation. Autant utiliser le Design Center. -
macro pour sélectionner plusieurs blocs
(gile) a répondu à un(e) sujet de Jbrosteaux dans AutoCAD 2018
Salut, Essaye ça. Tu charges le LISP dans le dessin source, tu lances la commande COPYTODWG, tu choisis le dessin cible (il doit être fermé) et c'est tout. Remplace "XXX,YYY" par les noms de blocs à sélectionner (séparés par une virgule). (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (defun c:copyToDwg (/ progId majVer ss filename axdbdoc i blocs) (if (and (setq ss (ssget "_X" '((0 . "INSERT") (410 . "Model") (2 . "XXX,YYY")))) ; <- remplacer "XXX,YYY" par les noms de blocs (setq filename (getfiled "Fichier cible" "" "dwg" 0)) (setq progId (if (< (setq majVer (substr (getvar 'acadver) 1 2)) "16") "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." majVer) ) ) (setq axdbdoc (vla-GetInterfaceObject *acad* progId)) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-Open (list axdbdoc filename)))) ) (progn (repeat (setq i (sslength ss)) (setq blocs (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) blocs)) ) (vlax-invoke *acdoc* 'CopyObjects blocs (vla-get-ModelSpace axdbdoc)) (vla-SaveAs axdbdoc filename) (vlax-release-object axdbdoc) ) (progn (alert "Impossible d'accéder au fichier cible") (vl-catch-all-apply 'vlax-release-object (list axdbdoc)) ) ) (princ) ) -
Salut, Si j'ai bien compris, utilise les variables système : OSNAPZ = 1 ELEVATION = 0.0
-
Ben si, justement. Sur les versions récentes, pour retrouver une interface "classique", il faut un peu bidouiller. ;)
-
Un petit screencast pour illustrer la méthode donnée par didier.
