-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Le voici refait dans cet optique, ça fonctionne déjà mieux! Quelques problèmes d'affichage dans l'EP mais bon, c'est pas super important vu l'utilité du code. Ca ma permis de voir qu'en remontant la base avec (entnext) depuis (entlast) on obtient les entités de l'EO ET celles du dernier onglet activé dans l'EP. Comme c'est étrange :P Autre chose que j'ai remarqué, c'est que (redraw [ent] [mode]) ne fonctionne qu'en mode filaire 2D. Voilà si ces remarques peuvent vous evitez de vous cassez la tête... dans d'autres situations. Rappel: ce code permet de se "ballader" dans l'ordre chonologigue pour voir à quel moment a pu être créé une entité. Les infos de l'entité en court d'affichage à l'écran sont donnés dans la barre d'état. Ce code ne modifie en rien le dessin. (defun c:back_trace ( / e_first dxf_ent name_ent hd_ent lst_hd lght_lst n ent dxf_67 dxf_0 dxf_8 dxf_410 key) (if (setq e_first (entnext)) (setq dxf_ent (entget e_first) name_ent (cdar dxf_ent) hd_ent (cdr (assoc 5 dxf_ent)) lst_hd (list hd_ent) ) ) (while name_ent (if (setq e_next (entnext name_ent)) (setq dxf_ent (entget e_next) name_ent (cdar dxf_ent) hd_ent (cdr (assoc 5 dxf_ent)) lst_hd (cons hd_ent lst_hd) ) (setq name_ent nil) ) ) (cond (lst_hd (setvar "cmdecho" 0) (if (eq (getvar "ctab") "Model") (command "_.shademode" "_2d") ) (foreach n lst_hd (redraw (handent n) 2)) (setq lght_lst (length lst_hd) n 0) (princ "\n<+/-> pour remonter ou redescendre la base du dessin; < Entrée >/[Espace] pour finir!.") (while (and (>= n 0) (< n lght_lst)) (setq ent (handent (nth n lst_hd)) dxf_ent (entget ent) dxf_67 (assoc 67 dxf_ent) dxf_0 (cdr (assoc 0 dxf_ent)) dxf_8 (cdr (assoc 8 dxf_ent)) dxf_410 (cdr (assoc 410 dxf_ent)) ) (if (/= (getvar "ctab") dxf_410) (progn (setvar "ctab" dxf_410) (if (eq (getvar "ctab") "Model") (command "_.shademode" "_2d") ) (foreach n lst_hd (redraw (handent n) 2)) ) ) (cond ((and (= (getvar "ctab") dxf_410) (member dxf_0 (list "3DFACE" "3DSOLID" "ACAD_PROXY_ENTITY" "ARC" "ARCALIGNEDTEX" "ATTDEF" "BODY" "CIRCLE" "DIMENSION" "ELLIPSE" "HATCH" "IMAGE" "INSERT" "LEADER" "LINE" "LWPOLYLINE" "MLINE" "MTEXT" "OLEFRAME" "OLE2FRAME" "POINT" "POLYLINE" "RAY" "REGION" "RTEXT" "SHAPE" "SOLID" "SPLINE" "TEXT" "TOLERANCE" "TRACE" "VIEWPORT" "WIPEOUT" "XLINE" ) ) ) (setq key (grread nil 2 1)) (cond ((member key '((2 13) (2 32))) (setq n -1) ) ((eq (cadr key) 43) (setq n (1- n)) (redraw ent 2) (if (< n 0) (progn (setq n 0) (alert "Dernière entité du dessin atteinte!") ) ) ) ((eq (cadr key) 45) (setq n (1+ n)) (redraw ent 1) (if (= n lght_lst) (progn (setq n (1- n)) (alert "Première entité du dessin atteinte!") ) ) ) ) (grtext -1 (strcat "Entité: " dxf_0 " - Calque: " dxf_8)) ) (T (cond ((eq (cadr key) 43) (setq n (1- n)) (if (< n 0) (setq n 0) ) ) ((eq (cadr key) 45) (setq n (1+ n)) (if (= n lght_lst) (setq n (1- n)) ) ) (T (setq n (1+ n)) ) ) ) ) ) (grtext) (command "_.regenall") (setvar "cmdecho" 1) ) (T (alert "Le dessin est vide!")) ) (prin1) )
-
Fait une recherche avec "raccordement progressif", tu auras peut être plus de succés pour trouver d'autre infos. Les seules tables de clothoïde que je possède sont d'une édition Allemande (heureusement que ce n'est pas génant pour lire les nombres :P ) La formule principale est A²=RL ou : A est le parmètre de la clothoïde R le rayon du cercle a raccorder L la longueur développée de la clothoïde J'ai aussi beaucoup utilisé "Highway design", si l'anglais ne te rebute pas trop, fais une recherche avec ces termes.
-
Tu peux aussi utilisé la variable "errno" [surligneur] Immédiatement [/surligneur] après l'erreur d'exécution tu fais un (getvar "errno") qui te renverra un numéro d"erreur. Dand l'aide (Documentation du développeur) d'autocad fait une recherche avec également (getvar "errno") tu auras les explication (en Anglais) de ces erreurs. Cette variable n'est pas toujours évidente a interroger car sa valeur change facilement lors de l' execution d'un code (surtout si le code a aussi sa propre gestion d'erreur). Dans ce cas désactiver temporairement celui-ci pour être sur d'obtenir un code d'erreur valable.
-
En fait le propriétaire conduit un escalier mobile dans un aeroport :P Mais il s'est "planté" car il rentre par les velux :casstet: Autre détail singulier la porte d'entrée (la vraie) s'ouvre par le batant gauche (pas classique) :( Il faut pas être "bourré" pour chercher la clanche en rentrant de nuit :D
-
J'utiliserais une supercherie ;) Je dessinerais un arc proche d'un alignement droit (très tendu) dans le sens voulu Avec texte en arc des ExpressTools, j'écrirais mon texte. Je décompose ensuite celui ci. Je sélectionne toutes mes lettres décomposées et avec propriété, je remet l'angle d'orientation à zéro. Solution "batarde" mais qui devrait le faire pour un besoin occasionnel.
-
Difficile de t'aider comme ça! Mais en utilisant ceci, pratique trouvé sur le Net :) ;;; TESTDCL.LSP .... by M.P.Saju. ;;; This is a gratuiciel. License for use of this application is granted for ;;; distribution, provided it is not mutilated. If there are problems please ;;; feel free to contact the author at mpsaju@yahoo.com ;;; ;;; Testing *.DCL files becomes a necessity when developing a good sized lisp ;;; application for easy input and understanding. This routine in lisp was ;;; written for just such a necessity. ;;; ;;; Usage is very simple... Just type "Testdcl" in Autocad text screen and press ;;; "enter". A file selection dialog box will open up to select the DCL file. ;;; On entering, the DCL under test will open. This application works under ;;; the assumption that there is an active "accept" or "cancel" button. ;;; ;;; I have tried to solve all problems that I have encountered. However if there ;;; are any further issues please feel free to contact me. (defun c:testdcl (/ nam$ nam id loop) ;;; lisp for checking dialogboxes at the beginning of their design (setq nam$ (getfiled "Select a DCL file" "" "dcl" 0)) (setq nam (identify nam$)) ) (defun identify (nam$ / file x dd dd$) (setq file (open nam$ "r") dd$ nil dd nil x 0 ) (while (setq dd (read-line file)) (if (wcmatch dd "*: dialog {") (progn (setq dd$ (substr dd 1 (- (strlen dd) 11))) (if (wcmatch dd$ " *") (setq dd$ (substr dd$ 2 (strlen dd$))) ;; added for eliminating blank ) (rundcl nam$ dd$) ) ) ) (close file) dd$ ) (defun rundcl (nam$ nam) (setq id (load_dialog nam$)) (if (not (new_dialog nam id)) (exit) ) (action_tile "cancel" "(done_dialog 0)") ;;; cancel button dialog.. normally in all DCLs (action_tile "accept" "(done_dialog 0)") ;;; accept button dialog.. normally in all DCLs (setq loop (start_dialog)) ) A priori, tu aurais un problème de redéfintion de "pt_width" et "pt_length"
-
Arff! :P Le premier qui trouve le n° de Patrick EMIN à Lyon a gagné :exclam: [Edité le 2/5/2006 par bonuscad]
-
Récupérer Valeur SCU dans présentation
bonuscad a répondu à un(e) sujet de sergeluc dans Pour aller plus loin en LISP
Jette un oeil à ce SUJET . Il ne répond pas à toutes tes attentes, mais à une partie ;) -
Oui pourquoi pas! C'est vrai que ce genre d'entité est obsolète mais elles restent encore générées facilement par Autocad. La commande PEDIT option Lissage vous transforme une LwPolyligne en Polyligne 2D :mad: A moins que ceci est changé avec la version actuelle ? Ces types de polylignes changeant sont un vrais casse-tête :casstet:
-
Une suggestion: Place tes fichiers VBA et ceux qui en découlent, dans un dossier de recherche (ou crée en un!) Peut être cela fonctonnera t-il. C'est le mot "introuvable" qui me fais dire ceci :P Mais le problème peut être autre :(
-
J'admet avoir été un peu généraliste, je ne veux pas remettre en cause ces formations car elles peuvent être une très bonne chose, surtout avec des d'excellents formateurs. ;) Mais certaine personnes (10 - 25% ??) excellent pour masquer leur compétence lors du tri effectué pour la formation. (dure loi du marché du travail oblige, tout les moyens sont bons et c'est normal !). Je n'ai pas d'exemple concret pour la DAO, mais j'en ai un pour une personne qui veut être gestionnaire de réseaux. Je dirais donc, ceci existe mais n'est certainement pas une généralité. Mon pourcentage n'a aucune source, et je pense qu'il est difficile de l'estimer. Pour finir je pense que ce phénomène est observable pour tout autre domaine, c'est un duel offres-demandes qui engendre ceci. :(
-
Je me range aussi sous l'avis de Winfield. Le pire, je trouve, sont ses stages de "reconversion" qu'on peut proposer à des chomeurs. Si à certain celà peut être une "voie de salut", pour d'autre; vous les retouvez sur le marché du travail des dessinateurs (ils étaient cuisinier, loueur de voiture....) Vous imaginez le résultat après une paire de mois de formation. Sans jeter la pierre, on retrouve beaucoup de jeunes qui "se cherchent" et croyent tout connaitre après ce genre de stage. Illusion, illusion !!!! pour beaucoup de jeunes: DAO=informatique, mais ce n'est pas que cela.... mais ça, les personnes qui fréquentent ce forum le savent (enfin j'espère !)
-
Essayes en copiant, avec par exemple, l'entité qui suit, tu comprendras mieux mon problème avec mon ancien code ou le tiens que tu as proposé. (Fais le test sur un segment d'arc) (entmake '( (0 . "POLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDb2dPolyline") (66 . 1) (10 0.0 0.0 -771.251) (70 . 1) (40 . 0.0) (41 . 0.0) (210 -0.0430226 -0.365126 0.929964) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0) ) ) (entmake '( (0 . "VERTEX") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -1539.2 2741.34 -771.251) (40 . 0.0) (41 . 0.0) (42 . 0.0) (70 . 0) (50 . 0.0) ) ) (entmake '( (0 . "VERTEX") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -1539.44 2708.26 -771.251) (40 . 0.0) (41 . 0.0) (42 . 0.0) (70 . 0) (50 . 0.0) ) ) (entmake '( (0 . "VERTEX") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -1562.56 2694.69 -771.251) (40 . 0.0) (41 . 0.0) (42 . 0.554956) (70 . 0) (50 . 0.0) ) ) (entmake '( (0 . "VERTEX") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -1563.14 2673.14 -771.251) (40 . 0.0) (41 . 0.0) (42 . -0.85506) (70 . 0) (50 . 0.0) ) ) (entmake '( (0 . "VERTEX") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -1572.97 2651.61 -771.251) (40 . 0.0) (41 . 0.0) (42 . -0.524086) (70 . 0) (50 . 0.0) ) ) (entmake '( (0 . "VERTEX") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -1603.34 2739.41 -771.251) (40 . 0.0) (41 . 0.0) (42 . -0.488099) (70 . 0) (50 . 0.0) ) ) (entmake '( (0 . "SEQEND") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") ) )
-
Salut Gilles, Cela peut être interressant de voir comment d'autres ont appréhendé la conversion. Personnellement je n'ai testé ni l'un, ni l'autre (pas encore concerné) ;) A VOIR ?!
-
Enlever des sommets sur une Lwpolyligne
bonuscad a répondu à un(e) sujet de Titifonky dans Pour aller plus loin en LISP
Touvé ça sur le forum US, ça fonctionne bien, mais qu'avec des LWPOLYLINE. Merci à l'auteur ;) ;Reply From: Jeff Mishler ;Date: Apr/20/06 - 21:25 (GMT) ;Re: Removing Polyline Vertices by Selection (defun c:vtx-del (/ bulges coords ent idx param pt) (vl-load-com) (defun removenth (n lst / i rtn) (reverse (progn (setq i -1) (foreach x lst (if (/= n (setq i (1+ i))) (setq rtn (cons x rtn)) ) ) rtn ) ) ) (command "_.undo" "_begin") (while (and (setq ent (entsel "\nSelect vertex to remove: ")) (eq (cdr (assoc 0 (entget (car ent)))) "LWPOLYLINE") (setq pt (osnap (cadr ent) "_near") ent (vlax-ename->vla-object (car ent))) ) (setq param (atoi (rtos (vlax-curve-getparamatpoint ent pt) 2 0))) (setq coords (vlax-get ent 'coordinates) idx -1 bulges nil) (repeat (/ (length coords) 2) (setq bulges (cons (vla-getbulge ent (setq idx (1+ idx))) bulges)) ) (setq bulges (removenth param (reverse bulges))) (repeat 2 (setq coords (removenth (* 2 param) coords)) ) (vlax-put ent 'coordinates coords) (setq idx -1) (foreach bulge bulges (vla-setbulge ent (setq idx (1+ idx)) bulge) ) ) (command "_.undo" "_end") (princ) ) -
Ayant rencontré des problèmes a l'utilisation avec ma fonction. Elle "plantait" lorsqu'on sélectionnait un segment d'arc créé dans un SCU non parrallèle au SCG. J'ai décelé que le problème était du a l'utilisation de (osnap (cadr (entsel)) "_near"), ce point ainsi obtenu et sousmi aux fonctions (vlax-curve n'était pas valide. Voici comment j'ai pu contourner ce problème pour qu'elle fonctionne de façon plus fiable. Routine principale pouvant servir de sous-routine pour toute autre fonction Elle retourne les cordonnées du point précédent et suivant et son paramètre de coubure d'un segment (vertex) de LWPOLYLINE ou POLYLINE2D-3D (non splinée) (defun draw_pt (pt / rap) (setq rap (/ (getvar "viewsize") 50)) (foreach n (mapcar '(lambda (x) (list ((eval (car x)) (car pt) rap) ((eval (cadr x)) (cadr pt) rap))) '((+ +) (+ -) (- +) (- -)) ) (grdraw pt n -1) ) ) (defun c:near_vertex ( / old_osmd pt_sel obj dxf_obj obj_vlax par pt_first pt_snd i bulge e_next) (setq old_osmd (getvar "osmode")) (setvar "osmode" 2) (initget 9) (setq pt_sel (getpoint "\nSélectionnez le segment de polyligne à utiliser: ")) (while (null (setq obj (nentselp pt_sel))) (initget 9) (setq pt_sel (getpoint "\nSélectionnez le segment de polyligne à utiliser: ")) ) (setvar "osmode" 0) (setq dxf_obj (entget (car obj))) (if (eq (cdr (assoc 0 (setq dxf_obj (entget (car obj))))) "VERTEX") (setq dxf_obj (entget (cdr (assoc 330 dxf_obj)))) ) (cond ((or (eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (and (eq (cdr (assoc 0 dxf_obj)) "POLYLINE") (zerop (boole 1 116 (cdr (assoc 70 dxf_obj)))) ) ) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (cdar dxf_obj)) pt_sel (vlax-curve-getClosestPointTo obj_vlax (trans pt_sel 1 0)) par (vlax-curve-getParamAtPoint obj_vlax pt_sel) pt_first (trans (vlax-curve-getPointAtParam obj_vlax (fix par)) 0 1) pt_snd (vlax-curve-getPointAtParam obj_vlax (1+ (fix par))) i 0 ) (if (null pt_snd) (setq pt_snd (trans (vlax-curve-getEndPoint obj_vlax) 0 1)) (setq pt_snd (trans pt_snd 0 1)) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (while (or (/= (caar dxf_obj) 42) (if (< i (fix par)) (setq i (1+ i)))) (setq bulge (cdadr dxf_obj) dxf_obj (cdr dxf_obj)) ) ) (T (setq e_next (entnext (cdar dxf_obj))) (repeat (fix par) (setq e_next (entnext e_next))) (setq bulge (cdr (assoc 42 (entget e_next)))) ) ) (redraw) (draw_pt pt_first) (draw_pt pt_snd) (princ (list pt_first pt_snd bulge)) ) (T (princ "\nN'est pas une polyligne valable pour cette fonction!") ) ) (setvar "osmode" old_osmd) (princ) ) Voici une autre routine montrant l'emploi qui peut être fait de cette fonction utilisée en fonction secondaire. Ici un exemple pour interroger le rayon de tout morceau d'arc ou cercle depuis n'importe quel SCU depuis n'importe quel SCO: (defun near_vertex_arr (dxf_ent pt_sel / obj_vlax pt_id par pt_first pt_snd i bulge e_next) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (cdar dxf_ent)) pt_id (vlax-curve-getClosestPointTo obj_vlax (trans pt_sel 1 0)) par (vlax-curve-getParamAtPoint obj_vlax pt_id) pt_first (trans (vlax-curve-getPointAtParam obj_vlax (fix par)) 0 1) pt_snd (vlax-curve-getPointAtParam obj_vlax (1+ (fix par))) i 0 ) (if (null pt_snd) (setq pt_snd (trans (vlax-curve-getEndPoint obj_vlax) 0 1)) (setq pt_snd (trans pt_snd 0 1)) ) (cond ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE") (while (or (/= (caar dxf_ent) 42) (if (< i (fix par)) (setq i (1+ i)))) (setq bulge (cdadr dxf_ent) dxf_ent (cdr dxf_ent)) ) ) (T (setq e_next (entnext (cdar dxf_ent))) (repeat (fix par) (setq e_next (entnext e_next))) (setq bulge (cdr (assoc 42 (entget e_next)))) ) ) (list pt_first pt_snd bulge) ) (defun c:q_ray ( / old_osmd pt_sel ent dxf_ent typ_ent id_rad l_2pt) (setvar "cmdecho" 0) (setq old_osmd (getvar "osmode")) (setvar "osmode" 2) (initget 9) (setq pt_sel (getpoint "\nInterroger le rayon du segment arrondi: ")) (while (null (setq ent (nentselp pt_sel))) (initget 9) (setq pt_sel (getpoint "\nInterroger le rayon du segment arrondi: ")) ) (setvar "osmode" 0) (setq dxf_ent (entget (car ent)) typ_ent (cdr (assoc 0 dxf_ent))) (if (eq typ_ent "VERTEX") (setq dxf_ent (entget (setq ent (cdr (assoc 330 dxf_ent)))) typ_ent (cdr (assoc 0 dxf_ent)) ) ) (cond ((or (eq typ_ent "ARC") (eq typ_ent "CIRCLE")) (setq id_rad (cdr (assoc 40 dxf_ent))) ) ((or (eq typ_ent "LWPOLYLINE") (and (eq typ_ent "POLYLINE") (zerop (boole 1 116 (cdr (assoc 70 dxf_ent)))) ) ) (setq l_2pt (near_vertex_arr dxf_ent pt_sel)) (if (zerop (caddr l_2pt)) (progn (setq id_rad nil) (princ "\nCe segment est droit et ne peut être interrogé!") ) (setq id_rad (/ (distance (car l_2pt) (cadr l_2pt)) (sin (* 2.0 (atan (caddr l_2pt)))) 2.0)) ) ) (T (setq id_rad nil) (princ "\nCet objet ne peut être interrogé!") ) ) (setvar "osmode" old_osmd) (if (eq (type id_rad) 'REAL) (progn (alert (strcat "\nRayon = " (rtos (abs id_rad) 2 3) ) ) (princ (strcat "\nRayon = " (rtos (abs id_rad) 2 3) ) ) ) ) (setvar "cmdecho" 1) (princ) )
-
Je pourrais dire idem pour moi, mes interventions sur le forum ne sont aucunement lucratives. Je partage ce que je sais, je pourrais le garder pour moi, ou essayer de le vendre (mais je suis un piètre vendeur, ce n'est pas ma nature). Et puis la valeur que l'on peut donner à des services ou des objets de nos jours me semble complétement "décalé" par rapport à certaines choses essentielles qui elles sont sous-estimés à leur valeur intraséque. .Un nostalgique ?!, j''été aussi un dessinateur et non un opérateur de saisie sur ordinateur. Quand cela est apparu, j'ai choisis de faire le "pas" dans cette direction pour assurer mon avenir professionnel. Je suis pas responsable de cet état de fait. Le dessin "pur" est maintenant réservé aux Arts, qui a mon avis se fera aussi "bouffé" petit à petit par le numérique. Est-ce un bien?, un mal? c'est comme ça, après c'est un choix personnel ou imposé. Reprenez votre tire-ligne ou votre fusain, c'est votre droit, votre plaisir et votre honneur. ;) J'epère avoir lu correctement entre les lignes de votre post. Bonne retraite ;)
-
Encore un autre moyen très concis (vu sur le forum US d'AutoDesk) (last (trans '(0 0 1) 3 2)) Qui trouvera plus court ? :P
-
Utilises la valeur stockée dans la variable "SCREENSIZE", elle donne la taille de l'écran en pixel. Je pense que celle-ci t'aideras
-
Transformer un arc ou cercle en segments
bonuscad a répondu à un(e) sujet de Bruno.abc dans CAO, généralités
Si c'est ponctuel, manuellement tu peux utiliser la commande "polygone" en spécifiant 24 cotés et en choisissant l'option "inscrit" au cercle. On pourrait automatiser si il y en a beaucoup comme ceci: c'est une ébauche rapide, il faut encore la paufiner (surtout pour les arc; points de coupures) ((lambda ( / dxf_ent cen_cir rad_cir dxf_210 lay_cur) (while (null (setq js (ssget "_:S" '((0 . "CIRCLE,ARC"))))) (princ "\nSélection vide ou ce n'est pas un cercle/arc!") ) (setq dxf_ent (entget (ssname js 0)) cen_cir (cdr (assoc 10 dxf_ent)) rad_cir (cdr (assoc 40 dxf_ent)) dxf_210 (cdr (assoc 210 dxf_ent)) lay_cur (getvar "clayer") ) (setvar "clayer" (cdr (assoc 8 dxf_ent))) (if (not (equal dxf_210 '(0.0 0.0 1.0))) (command "_.ucs" "_entity" (cdar dxf_ent)) ) (entdel (cdar dxf_ent)) (command "_.polygon" "24" (trans cen_cir dxf_210 1) "_inscribed" rad_cir) (if (eq (cdr (assoc 0 dxf_ent)) "ARC") (command "_break" (entlast) (trans (polar cen_cir (cdr (assoc 50 dxf_ent)) rad_cir) dxf_210 1) (trans (polar cen_cir (cdr (assoc 51 dxf_ent)) rad_cir) dxf_210 1) ) ) (if (not (equal dxf_210 '(0.0 0.0 1.0))) (command "_.ucs" "_previous") ) )) -
Devis estimatif & quantitatif à partir de l\'Autocad 2006 3D
bonuscad a répondu à un(e) sujet de Ckycia dans AutoCAD 2006
Sur CadXp ICI Téléchargements proposés par les membres -
Seul inconvénient de ton astuces, et de refaire la manip à chaque fois que tu rajoute une cotation. Mais surtout tu perd la propriété non imprimable de defpoints, et si tu as PDMODE a une valeur différente de 0 ou 1, ben ca risque de ne pas être joli à l'impression. Je dis ça sans avoir fait de test :P Tu veux remplacé Eric dans son jeu de la semaine :exclam:
-
J'ai oublié de préciser que pour le forum j'ai rajouter un espace après le < . IL N'EN FAUT PAS. [Edité le 18/4/2006 par bonuscad]
-
Au fait ton style "illuminé" fonctionne bien. Il est surtout beaucoup plus concis et lisible. ;) Le pire c"est que j'y avais pensé à ce genre de liste, mais j'ai du m'embrouiller avec ma méthode, je voulais utiliser (assoc) d'une autre façon :mad:
-
bien (gile) ta nouvelle version ;) Plus fiable. Par contre le temps de traitement peut finir par nous interroger :( Un simple sablier serait le bienvenu. Pour le temps de traitement j'ai essayé d'améliorer la mienne car je trouvais idiot de faire 2 fois un balayage de sélection. Donc j'ai remplacé: (if (not (member typ_ent lst_ents)) (setq lst_ents (cons typ_ent lst_ents)) ) par (if (not (member typ_ent lst_ents)) (progn (setq lst_ents (cons typ_ent lst_ents)) (eval (read (strcat "(setq nbr_" typ_ent " (cons 1 typ_ent))"))) ) (eval (read (strcat "(setq nbr_" typ_ent " (cons (1+ (car nbr_" typ_ent ")) typ_ent))"))) ) et: (princ (itoa (sslength (ssget "_X" (list (cons 0 x) (cons 8 e)))))) par: (princ (itoa (eval (read (strcat "(car nbr_" x ")"))))) Mais j'ai pas constaté une réelle amélioration, a part que j'ai fais un bon execice sur l'attribution de variable avec (eval) :mad:
