-
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)
-
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
(entlast) retourne le nom d'entité du dernier objet créé dans le dessin, du style : . J'attribue cette valeur à une variable dep (à une autre aussi, point, qui conservera le nom initial pour pouvoir la supprimer à la fin) De nouvelles entités sont créées avec PEDIT, des polylignes. (entnext dep) retourne le nom de la première entité créée après dep. Je fais une boucle en attribuant à dep successivement le nom d'entité de chaque entité créée après l'entité précédemment attribuée à dep : (while (setq dep (entnext dep)) ... et j'ajoute ce nom d'entité au nouveau jeu de sélection ss_region. Donc, en premier la poly créée après le point, puis la poly créée après celle-ci et ainsi de suite tant qu'il existe une poly créée après la précédente : ... (ssadd dep ss)) Dans ce cas, il s'agit "d'entités simples" si ent est une entité complexe (bloc avec attrbut, poly3D, surface maillée...) et qu'on fait un (entnext ent) il sera retourné la première "sous-entité" de ent (attribut, vertex ...). C'est aussi avec des boucles qu'on peut récupérer les attributs des blocs ou les sommets des polylignes non optimisées. -
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
Au temps pour moi, en utilisant l'option "multiple" de PEDIT tu traites tout ton jeu de sélection en une seule fois, je pensait que tu parcourais ta sélection et traitais les éléments un par un (d'où les exemples ci-dessus). Tu peux donc utiliser entnext, mais il faut tout d'abord mettre une "balise" pour le départ du entnext. Au début de ton LISP, avant (command "_pedit" ... tu crées une entité (un point par exemple) dont tu attribues le nom d'entité à 2 variables (dep et point par exemple) : (command "_.point" '(0 0 0)) (setq point (entlast) dep point ) Pour faire un jeu se sélection de toutes les entités créées depuis le point (les polylignes) à la place de (setq ss_region (ssget (list (cons 0 "LWPOLYLINE")))), tu fais : (setq ss_region (ssadd)) (while (setq dep (entnext dep)) (ssadd dep ss_region) ) À la fin du LISP tu supprimes le point : (entdel point) Comme çà, effectivement, tu utilises bien entlast et entnext. PS : dans ton code, tu as oublié les paranthèses de (entlast) [Edité le 12/3/2006 par (gile)] -
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
Comme je disais dans ma première réponse (entlast) ne retourne pas le dernier élément du jeu de sélection mais la dernière entité créée dans le dessin. Quand tu transformes une (ou plusieurs) ligne(s) en une polyligne (entlast) retourne le nom d'entité de la polyligne qui vient d'être créé. Si tu transformes cette polyligne en région (command "region" (entlast) "" ), (entlast) retournera le nom d'entité de la région qui viendra d'être créée. Tu pourra donc faire (command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" ""). -
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
Non, sel_poly existe toujours, il contient les noms d'entités du départ (les 4 elts) mais ces entités ne sont plus dans le dessin puisqu'elles ont été tranformées en une polyligne (si j'ai bien compris) un (entlast) juste après cette transformation retourne la dernière entité créée, soit la polyligne en question. Ce qu'il me manque, pour bien comprendre, c'est comment tu traites le premier jeu de sélection sel_poly pour transformer les entités en polylignes (joindre plusieurs entités ? 1 entité -> 1poly ? ...) -
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
S'il n'y a pas de création de région, le (entlast) de chprop s'appliquera à la derniére entité créée (qui ne sera pas la région ...). Je ne comprends toujours pas pourquoi tu fais un deuxième jeu de sélection ? Pourquoi ne crée tu as ta région juste après avoir créé la polyligne fermée : (command "region" (entlast) "" ) là, (entlast) retourne la dernière entité créée (la poly). Puis : (command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "") et là entlast retoune la région -
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
Re, Je ne suis pas sur de bien comprendre, mais si tu as transformé les entités du jeu de sélection sel_poy en polylignes fermées, les entités de sel_poly transformées n'existent plus dans le dessin. Tu peux récupérer chaque poly juste après sa création dans une liste poly_lst par un (setq poly_lst (cons (entlast) poly_lst)) et ensuite traiter toutes les entités de la liste : (foreach n poly_lst (command "region" n "" ) (command "_chprop" (entlast) "" "CO" "DUCALQUE" "CA" "toto" "EP" "0" "") ) -
J\'ai bcp de mal avec entnext entlast
(gile) a répondu à un(e) sujet de cadpolo dans Débuter en LISP
Salut, Il me semble que tu fais une confusion entlast et entnext dépendent de la création des entités. (entlast) c'est la dernière entité créée. (entnext) sans argument, retourne la première entité créée du dessin courant, avec un argument (entnext ent) l'entité (ou sous-entité) créée après ent. Pour parcourir un jeu de sélection, tu peux utiliser (ssname sel_poly n) où n est incrémenté de 0 à (sslength sel_poly) Par exemple pour appliquer une fonction (entdel par exemple, mais çà pourait être une fonction lambda) à toutes les entités d'un jeu de sélection (ss) tu peux faire : (repeat (setq n (sslength ss)) (apply 'entdel (list (ssname ss (setq n (1- n))))) ) -
Salut, Pour les vues, en Vlisp, on ajoute un objet View à la collection Views du document actif ActiveDocument de l'application AutoCAD. Pour ajouter la vue courante à la collection de vues : (vla-add (vla-get-Views (vla-get-ActiveDocument (vlax-get-acad-object) ) ) "NomDeLaVue" ) On peut aussi décomposer et utiliser des variables : le document actif : (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) la collection de vues : (setq Vues (vla-get-Views AcDoc)) la nouvelle vue : (setq Vue1 (vla-add Vues "NomDeLaVue")) On peut ensuite changer les propriétés de la vue Height, Width, Center, Target ... par exemple, mettre la largeur à 50.0: (vla-put-Width Vue1 50.0) ou la cible sur le point (50.0 200.0 150.0) (vla-put-Target Vue1 (vlax-3d-point '(50.0 200.0 150.0))) Si la vue n'est pas stoquée dans une variable, on peut y accéder par son nom (NomDeLaVue) (vla-Item (vla-get-Views AcDoc) "NomDeLaVue") En espérant avoir été clair ...
-
Salut, Le sujet à souvent été abordé. Tu peux, d'ors et déjà, trouver ici et là deux sujets où sont confrontés différentes méthodes. Tu peux aussi faire une recherche dans les forums avec "cotation".
-
Çà doit pas être çà, mais je participe ... pour celui de gauche, Extrait de la fenêtre : Pour celui de droite : avec l'accrochage à l'extrémité activé, les points de départ et de fin sont confondus.
-
Salut, Voilà, un peu tardivement, une version francisée pour les invites, internationalisée pour les commandes et [surligneur]universalisée[/surligneur] pour les SCU (les objets doivent être coplanaires et dans un plan parallèle au plan XY du SCU courant) ;;; ;;; TAN-ARCS.LSP A program to construct an arc that ;;; is tangent to any combination of two entities of ;;; type line, arc, circle, or polyline. The user ;;; indicates the approximate tangent locations. (defun err (s) (if (= s "Fonction annulée") (princ "\nTAN-ARCS - annulé: ") (progn (princ "\nTAN-ARCS - Erreur: ") (princ s) (terpri) ) ) ;_ if (resetting) (princ "les VARIABLES SYSTEME ont été restaurées.\n") (princ) ) ;_ err (defun setv (systvar newval) (setq x (read (strcat systvar "1"))) (set x (getvar systvar)) (setvar systvar newval) ) ;_ setv (defun setting () (setq oerr *error*) (setq *error* err) (setv "CMDECHO" 0) (setv "BLIPMODE" 0) ) ;_ end of setting (defun rsetv (systvar) (setq x (read (strcat systvar "1"))) (setvar systvar (eval x)) ) ;_ restv (defun resetting () (rsetv "CMDECHO") (rsetv "BLIPMODE") (setq *error* oerr) ) ;_ end of resetting (defun dxf (code ename) (cdr (assoc code (entget ename))) ) ;_ dxf (defun tanarc () (command "_UNDO" "_MARK") (convplne) ;; converts to old-style polylines (setq tadata (get-data) ;; gets tangents & rad tp1 (cadr (nth 0 tadata)) tp2 (cadr (nth 1 tadata)) rad (nth 2 tadata) ) ;_ setq (command "_CIRCLE" "_TTR" tp1 tp2 rad) (setq en (entlast) cenp [surligneur](trans (dxf 10 en) en 1)[/surligneur] ) ;_ setq (entdel en) (setq sp (getp cenp tp1)) (setq ep (getp cenp tp2)) (command "_UNDO" "_BACK") (command "_ARC" [surligneur]"_NON"[/surligneur] sp "_C" [surligneur]"_NON"[/surligneur] cenp [surligneur]"_NON"[/surligneur] ep) (princ) ) ;_ tanarc (defun convplne () (setq i (- 1)) (setq ss (ssget "_X" '((0 . "LWPOLYLINE")))) (if ss (progn (repeat (sslength ss) (setq ename (ssname ss (setq i (1+ i))) elist (entget ename) num-vert (cdr (assoc 90 elist)) flag-bit (cdr (assoc 70 elist)) elev (cdr (assoc 38 elist)) lyr (cdr (assoc 8 elist)) thick (cdr (assoc 39 elist)) const-wid (cdr (assoc 43 elist)) elist (member (assoc 10 elist) elist) ) ;_ setq (setv "THICKNESS" thick) (entmake (list '(0 . "POLYLINE") '(66 . 1) (cons 8 lyr) (list 10 0.0 0.0 elev) (cons 70 flag-bit) ) ;_ list ) ;_ entmake (repeat num-vert (setq vl10 (cdr (assoc 10 elist))) (setq vl40 (cdr (assoc 40 elist))) (setq vl41 (cdr (assoc 41 elist))) (setq vl42 (cdr (assoc 42 elist))) (setq elist (cdr elist) elist (member (assoc 10 elist) elist) ) ;_ setq (entmake (list '(0 . "VERTEX") (cons 10 vl10) (cons 40 vl40) (cons 41 vl41) (cons 42 vl42) ) ;_ list ) ;_ entmake ) ;_ repeat num-vert (entmake '((0 . "SEQEND"))) (entdel ename) (rsetv "THICKNESS") ) ;_ repeat sslength ) ;_ progn lwpolyline ) ;_ if (princ) ) ;_ convplne (defun get-data () (setvar "OSMODE" 512) (setq p1 (getpoint "\nPremier point tangent: ") p2 (getpoint "\nSecond point tangent: ") rad (getreal "\nRayon de l'arc: ") ent1 (nentselp p1) ent2 (nentselp p2) endata (list ent1 ent2 rad) ) ;_ end of setq (setvar "OSMODE" 0) endata ) ;_ end of defun (defun getp (cenp tp) (command "_LINE" cenp "_PER" tp "") (setq en (entlast) p [surligneur](trans (dxf 11 en) 0 1)[/surligneur] ) ;_ setq p ) ;_ getp (defun c:tac () (setting) (tanarc) (resetting) (princ) ) ;_ c:tac (prompt "\nCopyright (c) 2000, Tony Hotchkiss") (prompt "\nTaper TAC pour démarrer") PS : j'ai rajouté aussi des [surligneur]"_NON"[/surligneur] pour aucun accrochage aux objets lors de la création de l'arc de cercle. [Edité le 10/3/2006 par (gile)]
-
le TOP QUIZ des \"Galères\" AutoCAD, de nombreux problèmes répertoriés
(gile) a répondu à un(e) sujet de rebcao dans AutoCAD 2006
as-tu essayé COTREGEN ? -
Après quelques essai sur des splines : (vlax-curve-getParamAtPoint spline pt) sur les points de lissage retourne la longueur cummulée des segments de droite rejoignant ces points. par exemple : (vlax-curve-getEndParam spline) retourne la même valeur que : (vlax-curve-getDistAtPoint pline (vlax-curve-getEndPoint pline)) où pline est la polyligne (lw sans arcs ou 3D) dont les sommets sont confondus avec les points de lissage de la spline. http://img425.imageshack.us/img425/4650/param45uf.png Entre les points de lissage, le mystère reste entier pour moi. Le ParamAtPoint au milieu de deux points de lissage ne correspond ni à la distance jusqu'au milieu du segment correspondant ni à la longueur d'une poly qui finirait sur ce point. http://img512.imageshack.us/img512/9246/param55pi.png http://img333.imageshack.us/img333/6151/param67ka.png PS : Je confirme les fonctions vlax-curve acceptent aussi bien les arguments de type ENAME ou VLA-object. Par curiosité, j'ai essayé un vlax-3d-point à la place d'un "point 2D/3D", là, çà marche pas. [Edité le 9/3/2006 par (gile)]
-
le EndParam peut-être, mais d'après ce que j'ai pu voir hier soir (mais j'étais fatigué) le ParamAtPoint ressemblait à la longueur, mais c'était pas tout à fait çà. il faudrait comparer (vlax-curve-getParamAtPoint obj pt) et (vlax-curve-getDistAtParam obj (vlax-curve-getParamAtPoint obj pt)) J'essayerai ce soir. Là, je suis au boulot, et pas du tout sensé être devant un ordi ! [Edité le 9/3/2006 par (gile)]
-
La notion de "param" utlisée dans les fonctions (vlax-curve...) reste assez obscure pour moi (et il me semble que je ne suis pas le seul). En effet, vlax-curve-getParamAtPoint (par exemple) ne renvoie pas le même type d'information suivant le type d'entité à laquelle elle est appliquée. Bonuscad a éclairé ma lanterne avec ce LISP en ce qui concerne les param des polylignes. Je propose de regrouper dans ce fil les connaissances et découvertes de chacun à ce sujet. Dans les exemples suivants, obj est un vla-object correspondant au type d'entité de l'exemple et pt un point situé sur cet objet (les coordonnées de pt sont toujours dans le SCG). Pour les lignes (vlax-curve-getParamAtPoint obj pt) retourne la distance du point de départ de la ligne à pt. Pour les polylignes (lw ou 3D) -grâce aux lumières de Bonuscad- Les "params" entiers (0.0 1.0 2.0 ...) correspondent aux sommet de la polyligne. (vlax-curve-getPointAtParam obj 2.0) retourne les coordonnées du troisième sommet de la polyligne. Entre deux entiers, la décimale correspond à la proportion de la distance entre les sommets à laquelle se trouve le point par rapport au sommet précédent. (vlax-curve-getPointAtParam obj 1.5) retourne les coordonnées du point au milieu des deuxième et troisièmes sommets. Pour les cercles et les arcs param correspond à l'angle, en radians entre le rayon passant par le point et l'axe des X du SCG mesuré dans le sens trigonométrique (quelques soient les réglages de ANGDIR et ANGBASE) Pour les ellipses et arcs elliptiques Param correspond au paramètre de l'ellipse. Le paramètre d'une ellipse est l'angle entre le grand axe (du centre au point de départ) et la ligne qui joint le centre à l'intersection de la projection perpendiculaire au grand axe du point avec le cercle de même centre et d'un rayon égal au demi grand axe (ou l'intersection de la projection parallèle au grand axe du point avec le cercle de même centre et d'un rayon égal au demi petit axe). C'est aussi une méthode de traçage des ellipses consistant à tracer deux cercles concentriques de rayons égaux respectivement au demi grand axe et au demi petit axe et ensuite pour chaque rayon tracé à projeter l'intersection du rayon avec le petit cercle parallèlement au grand axe et celle avec le grand cercle perpendiculairement au grand axe, l'intersection de ces deux lignes est un point de l'ellipse. Le rapport entre le paramètre de l'ellipse et l'angle entre le grand axe et la ligne joignant le centre au point peut s'écrire sous la forme de l'équation : tg Angle = tg Param * (petit axe / grand axe) Pour les autres entités ? Je ne vois pas, je bute toujours ... ... j'espère que d'autres viendront compléter la liste et/ou corriger les bétises que j'ai pu dire. [Edité le 9/3/2006 par (gile)]
-
Salut, La variable système pour activer ou désctiver les grips est GRIPS (1 = activé, 0 = desactivé) Tu peux mettre cette macro dans un bouton : grips;$M=$(if,$(getvar,grips),0,1); [Edité le 8/3/2006 par (gile)]
-
Il me semble qu'il est possible de condenser encore un tout petit peu. Tu fais deux (vlax-curve-getClosestPointTo ... et un (osnap (cadr obj) "_near"). J'ai essayé : (setq pt_sel (vlax-curve-getClosestPointTo obj_vlax (trans (cadr obj) 1 0) ) par (vlax-curve-getParamAtPoint obj_vlax pt_sel ) ) Çà semble suffire. Encore bravo !
-
Encore un coup, Bonuscad a été EXCELLENT !!! :D Adoptée comme sous-fonction, pour le même résultat, je bidouillais lamentablement avec des test de linéarité entre le point acquis par (osnap (cadr (entsel )) "_near") et les sommets de la polyligne.
-
Salut, Pour rappeler une commande avec des options comme couper au point ou arc, centre départ, fin on peut faire un clic droit et en haut du menu contextuel, il y a la dernière commande avec les options.
-
Hachures et ...Personnalisation, macros, DIESEL
(gile) a répondu à un(e) sujet de Tramber dans CADxp, vos souhaits
Çà supposerait que l'on trie les anciens sujets pour les ventiler dans les deux nouveaux forums, non ? Il n'y en a que 3 pages ! En fait en parcourant juste les titres, il n'y a pas tant de sujet que çà sur les hachures ou les lignes dans le forum Personnalisation, macros, DIESEL [Edité le 5/3/2006 par (gile)] -
Objet graphique TRACE = Au secours !!!
(gile) a répondu à un(e) sujet de lecrabe dans Personnalisation, macros, DIESEL
S'il n'est pas précisé dans la table DXF que les sommets des SOLIDE sont définis dans le SCO, ce doit être un oubli. un (entget(car(entsel))) sur un SOLIDE créé dans un SCU pivoté montre que c'est bien le cas. -
À tout hasard, les objets ne sont pas sur un calque vérouillé ?
-
Salut, Tu peux faire une Recherche dans les forums avec hachures, le sujet a très souvent été abordé Tu trouveras ici un LISP qui marche plutôt pas mal (bien que limité) pour créer tes propres motifs (explications ici).
-
Objet graphique TRACE = Au secours !!!
(gile) a répondu à un(e) sujet de lecrabe dans Personnalisation, macros, DIESEL
Oui, je connais MAINLEV, mais je dessine encore plus mal avec une souris qu'avec un crayon :cool: Le fait que TRACE soit géré dans le SCO comme les lwpolylignes m'a facilité la vie pour les LISP ci-dessus, ils fonctionnent même si les traces ont été dessinée dans des SCU différents, sans faire aucun trans :) -
Objet graphique TRACE = Au secours !!!
(gile) a répondu à un(e) sujet de lecrabe dans Personnalisation, macros, DIESEL
C'est moi qui te remercie, lecrabe, tu m'as fait découvrir une entité AutoCAD dont je ne soupçonnais pas l'existence, même si son intérêt semble fort désuet ;) . J'ai modifié le dernier LISP pour plus de polyvalence. L'utilisateur peut maintenant choisir entre sélectionner certaines trace ou toutes celles du dessin et de générer, pour les traces jointives et de même largeur, soit une polyligne unique soit une succession de segments.
