-
Compteur de contenus
1 489 -
Inscription
-
Dernière visite
-
Jours gagnés
19
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par zebulon_
-
Renommer certains calques
zebulon_ a répondu à un(e) sujet de charlie69 dans Pour aller plus loin en LISP
Bonjour, un cond à la place de la série de if serait déjà mieux amicalement Vincent -
Masque d\'arrière plan - ligne de repère multiple
zebulon_ a répondu à un(e) sujet de zebulon_ dans AutoCAD 2010
Bonjour, c'est un lisp qui contient un "réacteur" qui, comme son nom l'indique, doit réagir. Dans notre cas, il réagit à la commande "MLEADER", plus exactement, à la fin de cette commande. Le principe du réacteur est d'être chargé en début de session (soit avec un load manuel, soit en le chargeant automatiquement ce qui serait mieux), puis il réagira de lui-même après chaque commande MLEADER et fera ce qu'on lui demande de faire, dans notre cas la fonction EndMtextMleader. Amicalement Vincent -
Masque arrière plan ligne de repère multiple
zebulon_ a répondu à un(e) sujet de Demixav dans AutoCAD 2011
a priori, si on met le dxf 291 à 0 et le dxf 91 dans la couleur désirée, ça marche. Sauf que la définition de la couleur, c'est un peu compliqué : le rouge c'est par exemple -1023410175 ! Sinon, le plus simple c'est peut être de faire un mleader dans un coin du fichier, puis faire comme expliqué par hey_bapt pour définir un masque et une couleur, puis faire un "copier les propriétés" Amicalement Vincent -
Masque arrière plan ligne de repère multiple
zebulon_ a répondu à un(e) sujet de Demixav dans AutoCAD 2011
Bonjour, j'ai aussi regretté l'impossibilité de mettre un masque d'arrière plan dans le style de LR, comme on peut le faire avec les styles de cotes. On est, me semble-t-il, toujours obligé de modifier les propriétés de la LR après coup pour rajouter le masque, d'où l'intérêt d'un réacteur. voir ici Concernant la couleur d'arrière plan d'une LR, je n'ai pas essayé. il y a peut être un code dxf correspondant ? Amicalement Vincent -
voir les fonctions vlax-curve en particulier vlax-curve-getpointatdist amicalement Vincent
-
On meurt tous un peu quand on apprend la mort des autres ! Je pleure un ami et m'associe à vos messages de condoléance à sa famille.
-
Bonjour, j'adhère au club 66. j'ai commencé à travailler en 1989, ça va donc faire 30 ans ! En trimestres ça en fait 120 et il en faut 170. Il me faut donc encore 12 ou 13 ans, soit en 2032 ! Amicalement Vincent
-
[RESOLU] - Nom des entités vues de dessin
zebulon_ a répondu à un(e) sujet de LElemurien dans LISP et Visual LISP
Bonjour, concernant la fonction ssget, il faut fournir le code dxf qui correspond à ce qu'on cherche. Si on ne le connait pas et qu'on ne trouve pas son bonheur dans la documentation, on peut consulter directement le contenu dxf d'une entité existante en la sélectionnant par un (setq e (car (entsel))). Puis un (entget e) nous donnera tout le contenu dxf de l'entité en question. Il suffira de copier la ou les paires qui sont intéressantes, notamment la paire (0 . "....") Amicalement Vincent -
Bonjour, on essaie tous de gravir la même montagne ! Le problème avec les voies un peu "exotiques", c'est qu'elles peuvent très bien ne mener nulle part ! C'est un peu ma façon d'être en général : quand j'ai quelque chose à bricoler, je me mets d'abord devant mon établi (qui tient plus du bordel, car je ne jette rien...) et je regarde ce que j'ai en magasin qui pourrait convenir. Ensuite, je fais avec ce que j'ai. En algorithmique, c'est pareil. En l’occurrence, j'ai toujours trouvé que le codage binaire des variables Autocad était quelque chose de malin pour spécifier plusieurs combinaisons avec un seul nombre. Et là je me suis dit que je pouvais réutiliser ce principe que j'avais en magasin. Et en matière d'ouverture d'esprit, on est au moins deux ! Et j'en vois encore quelques autres ! Merci à toi ! Amicalement Vincent
-
Creer un Arc tangent à deux Elements et qui passe par un point donne
zebulon_ a répondu à un(e) sujet de lecrabe dans Routines LISP
Bonjour, pour ma part, je suis parti sur une solution très "graphique". Contrairement à celle de Didier, elle utilise une foule de constructions temporaires. Cela m'a permis de découvrir la construction de Wallis Amicalement Vincent -
Bonsoir, j'ai essayé de faire un truc basé sur une sorte d'indexation binaire qui permet de jouer avec des logand et des logior. Mais cela comporte de ce fait une faiblesse intrinsèque, compte tenu que le codage se fait sur des entiers sous la forme 2^n. Forcément, si n (qui est la "population" qui compose la liste) est grand, un moment ou un autre 2^n va dépasser ce qui est autorisé pour un entier. Les fonctions proposées par (gile) sont donc nettement plus robustes et efficaces (et courtes !) Amicalement Vincent
-
Creer un Arc tangent à deux Elements et qui passe par un point donne
zebulon_ a répondu à un(e) sujet de lecrabe dans Routines LISP
la fonction vlax-curve-getClosestPointTo pourrait être utile ? Mais ce n'est pas du lisp pur, alors je ne sais pas si ça conviendra. aide autocad Amicalement Vincent -
j'ai tenté quelque chose... ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (cond ((null lst) nil) (T (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) ) (defun famille (nlst / suite) (setq n (length nlst)) (setq I 0) (repeat (- n 1) (setq J (+ I 1)) (repeat (- n I 1) (if (not (zerop (logand (nth I nlst) (nth J nlst)))) (setq suite T) ) (setq J (+ J 1)) ) (setq I (+ I 1)) ) suite ) (defun voisinproc (lst) (setq idx (remove_doubles (apply 'append lst))) (setq nlst (mapcar '(lambda (x) (logior (expt 2 (vl-position (car x) idx)) (expt 2 (vl-position (cadr x) idx)) ) ) lst ) ) (while (famille nlst) (setq lstfam nil) (setq fam (car nlst)) (setq nlst (cdr nlst)) (setq lstand (mapcar '(lambda (x) (logand fam x)) nlst)) (setq lstor (mapcar '(lambda (x) (logior fam x)) nlst)) (setq I 0) (repeat (length lstand) (setq valand (nth I lstand)) (setq valor (nth I lstor)) (setq e (nth I nlst)) (if (zerop valand) (setq lstfam (cons e lstfam)) (setq fam (logior fam valor)) ) (setq I (+ I 1)) ) (setq nlst (cons fam lstfam)) ) (setq nnlst nil) (while nlst (setq lstfam nil) (setq e (car nlst)) (setq nlst (cdr nlst)) (setq I 0) (repeat (length idx) (setq x (nth I idx)) (if (not (zerop (logand (expt 2 I) e))) (setq lstfam (cons x lstfam))) (setq I (+ I 1)) ) (setq nnlst (cons lstfam nnlst)) ) (setq nnlst (mapcar '(lambda (x) (vl-sort x '<)) nnlst)) ) (defun c:voisin () (setq lst '(("A" "B") ("B" "C") ("B" "D") ("D" "E") ("F" "G") ("A" "E") ("X" "Y"))) (print (voisinproc lst)) (setq lstlocauxvoisins '(("J/02/110" "J/02/111") ("J/02/109" "J/02/110") ("J/02/108" "J/02/109") ("B/02/107" "J/02/108") ("A/02/003" "A/02/002"))) (print (voisinproc lstlocauxvoisins)) (princ) ) Amicalement Vincent
-
Bonjour, à partir de cet liste quelle est la liste souhaitée en résultat ? Cela serait peut être plus simple à comprendre à partir d'un exemple. Amicalement Vincent
-
Creer un Arc tangent à deux Elements et qui passe par un point donne
zebulon_ a répondu à un(e) sujet de lecrabe dans Routines LISP
J'ai commencé à travailler avec MicroStation 3.0, puis V4 dans les années 1990. Mais comme, au bout d'un moment, les clients du bureau d'études qui m'employait voulaient récupérer des fichiers dwg, notre patron a décidé de nous passer sur Autocad V12. Je me souviens d'avoir pleuré amèrement également... Amicalement, Vincent -
Creer un Arc tangent à deux Elements et qui passe par un point donne
zebulon_ a répondu à un(e) sujet de lecrabe dans Routines LISP
Ma contribution avec deux segment droits, sans fonctionnement dynamique et sans contrôle des cas particuliers (defun vlax-list->3D-point (lst / nlst) (while lst (setq nlst (cons (list (car lst) (cadr lst) (caddr lst)) nlst)) (setq lst (cdddr lst)) ) (reverse nlst) ) (defun c:cttp () (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (setq S (getpoint "\nSommet : ")) (setq SG (trans S 1 0)) (setq d1 (trans (getpoint S "\nExtrémité d1 : ") 1 0)) (setq seg1 (vla-addLine space (vlax-3d-point SG) (vlax-3d-point d1))) (setq d2 (trans (getpoint S "\nExtrémité d2 : ") 1 0)) (setq seg2 (vla-addLine space (vlax-3d-point SG) (vlax-3d-point d2))) (setq A (trans (getpoint "\nPoint de passage : ") 1 0)) ;; bissectrice (setq PT1 (polar SG (angle SG d1) 1)) (setq PT2 (polar SG (angle SG d2) 1)) (setq PTC (polar PT1 (angle PT1 PT2) (/ (distance PT1 PT2) 2.0))) (setq bissec (vla-addXline space (vlax-3d-point SG) (vlax-3d-point PTC))) ;; cercle de centre J (setq J (vlax-curve-getClosestPointTo bissec A)) (setq C1 (vla-addCircle Space (vlax-3d-point J) (distance A J))) ;; Cercle de centre I (setq I1 (inters J A SG d1 nil)) (setq I2 (inters J A SG d2 nil)) (if (< (distance A I1) (distance A I2)) (setq I I1 seg seg1) (setq I I2 seg seg2) ) (setq C2 (vla-addCircle Space (vlax-3d-point (polar J (angle J I) (/ (distance I J) 2.0))) (/ (distance I J) 2.0) ) ) ;; points d'intersection des deux cercles (setq lstpt (vlax-list->3d-point (vlax-invoke C1 'IntersectWith C2 acExtendNone))) ;; on prend le premier point d'intersection (setq K (car lstpt)) ;; et on trace le cercle de centre I qui passe par K (setq C3 (vla-addCircle Space (vlax-3d-point I) (distance I K))) ;; on trouve les points d'intersection avec seg, je considère qu'il y en a deux sauf cas particuliers que je n'étudie pas (setq lstpt (vlax-list->3d-point (vlax-invoke seg 'IntersectWith C3 acExtendBoth))) (setq T1 (car lstpt)) (setq T2 (cadr lstpt)) ;; tracer les perpendiculaires (setq perp1 (vla-addXline Space (vlax-3d-point T1) (vlax-3d-point (polar T1 (+ (angle T1 SG) (/ pi 2)) 1)))) (setq perp2 (vla-addXline Space (vlax-3d-point T2) (vlax-3d-point (polar T2 (+ (angle T2 SG) (/ pi 2)) 1)))) ;; trouver les centres (setq lstpt (vlax-list->3d-point (vlax-invoke perp1 'IntersectWith bissec acExtendNone))) (setq O1 (car lstpt)) (setq lstpt (vlax-list->3d-point (vlax-invoke perp2 'IntersectWith bissec acExtendNone))) (setq O2 (car lstpt)) ;; points symétriques (setq T10 (vlax-curve-getClosestPointTo bissec T1)) (setq T20 (vlax-curve-getClosestPointTo bissec T2)) (setq T11 (polar T10 (angle T1 T10) (distance T1 T10))) (setq T21 (polar T20 (angle T2 T20) (distance T2 T20))) ;; tracer les arcs (setq arc1 (vla-addArc Space (vlax-3d-point O1) (distance O1 T1) (angle O1 T1) (angle O1 T11))) (setq arc11 (vla-addArc Space (vlax-3d-point O1) (distance O1 T1) (angle O1 T11) (angle O1 T1))) (if (< (distance A (vlax-curve-getClosestPointTo arc1 A)) (distance A (vlax-curve-getClosestPointTo arc11 A))) (vla-delete arc11) (vla-delete arc1) ) (setq arc2 (vla-addArc Space (vlax-3d-point O2) (distance O2 T2) (angle O2 T21) (angle O2 T2))) (setq arc21 (vla-addArc Space (vlax-3d-point O2) (distance O2 T2) (angle O2 T2) (angle O2 T21))) (if (< (distance A (vlax-curve-getClosestPointTo arc2 A)) (distance A (vlax-curve-getClosestPointTo arc21 A))) (vla-delete arc21) (vla-delete arc2) ) ;; supprimer les constructions (vla-delete bissec) (vla-delete C1) (vla-delete C2) (vla-delete C3) (vla-delete perp1) (vla-delete perp2) (princ) ) Amicalement Vincent -
Pouvoir modifier la valeur tous les attribut d'une présentation
zebulon_ a répondu à un(e) sujet de Tryks dans AutoCAD 2013
Bonjour, un exemple serait le bienvenu afin de clarifier la demande Amicalement Vincent -
Bonjour, Les "_non" que j'ai rajouté comme le remarque très justement Didier, c'est avant chaque saisie de point, pour éviter qu'un éventuel accrochage aux objets ne vienne positionner le point ailleurs qu'à l'endroit voulu. Rien à voir, donc, avec le passage du "_r" à la commande "_rotate" C'est une fonction incontournable, il faut vraiment t'y intéresser ! Je confirme, d'autant plus que cela correspond à ce que j'ai écrit et j'ai aussi testé sur 2014 et 2019 avec succès. Amicalement Vincent
-
L'objectif, tel que je l'ai compris, c'est d'avoir toujours le même angle entre les copies, comme un réseau polaire. C'est possible avec DIESEL et les grips ? Amicalement Vincent
-
Pas de réseau, on peut comprendre : c'est une commande un peu compliquée... Concernant le trans, il faudrait ne le faire que si c'est nécessaire. Ici, sans doute que non. Personnellement, je ferais comme ça : (defun c:rtf (/ PTC PT1 PT2 REP) (setq ss (ssget)) (setq PTC (getpoint "\nPoint de rotation : ")) (setq PT1 (getpoint PTC "\nPremier point de l'angle de référence : ")) (setq PT2 (getpoint PTC "\nDeuxième point de l'angle de référence : ")) (setq ANG (- (angle PTC PT2) (angle PTC PT1))) (while (/= REP "Non") (command "_rotate" ss "" "_non" PTC "_c" "_r" "_non" PTC "_non" PT1 "_non" PT2) (initget "Oui Non") (setq REP (getkword "\nPoursuivre ? [Oui/Non] <Oui> : ")) (setq PT2 (polar PTC (+ (angle PTC PT2) ANG) 1)) ) (princ) ) l'avantage d'utiliser la fonction polar est qu'elle utilise toujours le radian. Cela tombe bien, c'est ce que renvoie la fonction angle. On n'a pas à faire de transformations entre degrés, grades ou je ne sais quoi. Par ailleurs, je ne connaissais pas la commande MOCORO. C'est issu des Express Tools qu'il faut avoir installé. Amicalement Vincent
-
_rotate comprend cette séquence, à moins d'avoir une version antique ! Amicalement Vincent
-
Bonjour, avec un réseau polaire, on devrait y arriver sans lisp ? En jouant sur les paramètres "ANgle entre" et "angle à remPlir". Ton problème ne viendrait-il pas des accrochages aux objets ? Par ailleurs, pourquoi faire un trans ? Si après tu fais un command, tu peux rester en coordonnées locales. Concernant la variable ANG, je préfère donner un point à la commande _rotate plutôt qu'un angle (qu'il faut calculer, sans se tromper de sens ni d'unité...) Sinon, j'ai fait quelque chose de similaire, mais avec un angle différent entre chaque copie (il faut cliquer un nouveau point entre chaque copie et c'est le point qui détermine l'angle, l'unité d'angle n'est pas importante, et le sens de rotation positif ou négatif non plus) (defun c:ricm (/ ss PTC PT1 PT2 CPT) (setvar "CMDECHO" 0) (prompt "\nRICM") (setq ss (ssget)) (setq PTC (getpoint "\nPoint de rotation : ")) (setq PT1 (getpoint PTC "\nAngle de référence : ")) (setq PT2 nil) (setq CPT 0) (while (/= PT2 "Q") (if (zerop CPT) (progn (initget "Q") (setq PT2 (getpoint PTC "\nSpécifier le second point ou [Quitter] <Quitter> : ")) ) (progn (initget "Q R") (setq PT2 (getpoint PTC "\nSpécifier le second point ou [Quitter/Rétablir] <Quitter> : ")) ) ) (cond ((= PT2 "R") (command "_undo" "1") (setq CPT (- CPT 1)) ) ((= (type PT2) 'LIST) (command "_rotate" ss "" "_non" PTC "_c" "_r" "_non" PTC "_non" PT1 "_non" PT2) (setq CPT (+ CPT 1)) ) (T (setq PT2 "Q")) ) ) (princ) ) Amicalement Vincent
-
oui, mais c'est mieux que ce soit quelqu'un de compétent qui te dise que c'est bien. Si c'est quelqu'un qui n'a aucune notion qui te dis que c'est bien, son avis n'a que peu de valeur ! Bon Noël à tous ! Amicalement Vincent
-
ou des Amicalement Vincent
-
Bonjour, on peut aussi repérer des Amicalement Vincent
