Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

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

  1. (gile)

    test

    (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)) ) )
  2. Salut, on peut utiliser plusieurs modèles (pattern) en les séparant par une virgule : "TestCalques*,Test2Calques*"
  3. Salut, CMDDIA = 1
  4. (gile)

    construction arc

    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.
  5. (gile)

    construction arc

    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).
  6. (gile)

    Retraite J1

    Je suis preneur aussi...
  7. Salut, Pour le fonctions récursives, tu peux voir la section 13.3 de Introduction à AutoLISP téléchargeable sur cette page.
  8. 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 ...).
  9. Salut, Edit_bloc sur cette page devrait répondre à tes attentes.
  10. 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) ) )
  11. (gile)

    Ne pas supprimer calque vide

    Salut, Voir ce sujet. Dans ton cas, pour chaque nom de calque à rendre non-purgeable, faire : (gc:SetUnPurgeable "layer" "nom_du_calque")
  12. 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) )
  13. 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...
  14. 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).
  15. (gile)

    Vendée Globe Virtuel

    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...
  16. (gile)

    Script Fontion Inserer

    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
  17. (gile)

    Script Fontion Inserer

    Salut, Essaye avec des guillemets -inserer DT 23200,6100,1 1 0 "Z3/4" "LOCAL"
  18. 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) )
  19. 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).
  20. 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) )
  21. 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.
  22. 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) )
  23. (gile)

    Du 2D sur du 3D

    Salut, Si j'ai bien compris, utilise les variables système : OSNAPZ = 1 ELEVATION = 0.0
  24. (gile)

    Variable nom du calque

    Ben si, justement. Sur les versions récentes, pour retrouver une interface "classique", il faut un peu bidouiller. ;)
  25. (gile)

    Variable nom du calque

    Un petit screencast pour illustrer la méthode donnée par didier.
×
×
  • 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é