-
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
-
Salut, Une discussion ou j'ai donné une réponse pour une solution simple avec des polylignes. Bien que cette solution soit exacte que pour des polylignes SANS arrondis, elle peut suffire pour placer un texte "a peu près" au centre (même en cas d'arrondi) Enfin à voir, l'avantage est que cela n'utilise pas les fonction activeX (vl-load-com) et que tu n'auras pas besoin de conversion en région. Alternative en macro Diesel: ^C^C_.undo;_begin;_.id;\_.-boundary;_none;@;;_.area;_object;_last;_.erase;_last;;_.-text;_justify;_bcenter;_none;@;;;$M=Surface=$(getvar,area);_.move;_last;;_none;@;\_.undo;_end;^Z [Edité le 18/11/2005 par bonuscad]
-
Bonjour, J'ai vu un post sur le forum US L'idée me plaisait, mais surtout la fonction (factor, que j'ai trouvé géniale. A prioris c'est une retranscription en lisp d'une équation de Newton, d'après les liens donnés. J'ai donc "pompé" cette fonction pour faire, à ma façon, le lisp suivant. (defun factor (arclen chordlen / k n c e) (setq k (/ chordlen arclen)) (setq n 0) (repeat 6 (if (= n 0) (setq c (sqrt (- 6 (* 6 k)))) (setq c (- c (/ (- (sin c) (* k c)) (- e k)))) ) (setq e (cos c)) (setq n (1+ n)) ) c ) (defun fig_pts (pt_cen pt_begin pt_end rad / inc ang nm p1 p2 p3) (setq inc (angle pt_cen pt_begin) ang (+ (* 2.0 pi) (angle pt_cen pt_end)) nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 36.0))) ) (repeat nm (setq p1 (polar pt_cen inc rad) inc (+ inc (/ (* pi 2.0) 36.0)) p2 (polar pt_cen inc rad) lst (append lst (list p1 p2)) ) ) (if lst (setq p3 (polar pt_cen ang rad) lst (append lst (list p2 p3)) ) ) ) (defun gr-osmode (pt-i str-md / n pt md rap pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt56 pt67 pt78 pt85 one_o) (setq n (/ (cadr (getvar "screensize")) 5.0)) (setq pt (osnap pt-i str-md)) (while (and (eq (strlen (setq md (substr str-md 1 4))) 4) (not one_o)) (repeat 2 (setq rap (/ (getvar "viewsize") n) pt1 (list (- (car pt) rap) (- (cadr pt) rap) (caddr pt)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap) (caddr pt)) pt3 (list (+ (car pt) rap) (+ (cadr pt) rap) (caddr pt)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap) (caddr pt)) pt5 (list (car pt) (- (cadr pt) rap) (caddr pt)) pt6 (list (+ (car pt) rap) (cadr pt) (caddr pt)) pt7 (list (car pt) (+ (cadr pt) rap) (caddr pt)) pt8 (list (- (car pt) rap) (cadr pt) (caddr pt)) pt56 (polar pt (- (/ pi 4.0)) rap) pt67 (polar pt (/ pi 4.0) rap) pt78 (polar pt (- pi (/ pi 4.0)) rap) pt85 (polar pt (+ pi (/ pi 4.0)) rap) n (- n 16) ) (if (equal (osnap pt-i md) pt) (setq one_o T)) (cond ((and (eq "_end" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt3 1) (grdraw pt3 pt4 1) (grdraw pt4 pt1 1) ) ((and (eq "_mid" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt7 1) (grdraw pt7 pt1 1) ) ((and (eq "_cen" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt5 pt7 7) (grdraw pt6 pt8 7) ) ((and (eq "_nod" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt1 pt3 1) (grdraw pt2 pt4 1) ) ((and (eq "_qua" md) one_o) (grdraw pt5 pt6 1) (grdraw pt6 pt7 1) (grdraw pt7 pt8 1) (grdraw pt8 pt5 1) ) ((and (eq "_int" md) one_o) (grdraw pt1 pt3 1) (grdraw pt2 pt4 1) ) ((and (eq "_ins" md) one_o) (grdraw pt5 pt2 1) (grdraw pt2 pt6 1) (grdraw pt6 pt8 1) (grdraw pt8 pt4 1) (grdraw pt4 pt7 1) (grdraw pt7 pt5 1) ) ((and (eq "_per" md) one_o) (grdraw pt1 pt2 1) (grdraw pt1 pt4 1) (grdraw pt8 pt 1) (grdraw pt pt5 1) ) ((and (eq "_tan" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt3 pt4 1) ) ((and (eq "_nea" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt4 1) (grdraw pt4 pt3 1) (grdraw pt3 pt1 1) ) ) ) (setq str-md (substr str-md 6) n (/ (cadr (getvar "screensize")) 5.0)) ) ) (defun c:arc_length ( / o mod sv_shmnu p_begin p_end chord_length p_mid p_cen1 p_cen2 x_rad arc_length i_ang value loop key pt_drag lst dxf_210 ss1 ss2) (setq o (getvar "osmode")) (if (or (zerop o) (eq (boole 1 o 16384) 16384)) (setq mod "_none") (progn (setq mod "") (mapcar '(lambda (xi xs) (if (not (zerop (boole 1 o xi))) (if (zerop (strlen mod)) (setq mod (strcat mod xs)) (setq mod (strcat mod "," xs)) ) ) ) '(1 2 4 8 16 32 64 128 256 512) '("_end" "_mid" "_cen" "_nod" "_qua" "_int" "_ins" "_per" "_tan" "_nea") ) ) ) (setq sv_shmnu (getvar "SHORTCUTMENU")) (setvar "SHORTCUTMENU" 11) (initget 9) (setq p_begin (getpoint "\n1er point: ")) (initget 41) (setq p_end (getpoint p_begin "\n2ème point: ")) (setq p_end (list (car p_end) (cadr p_end) (caddr p_begin)) chord_length (distance p_begin p_end) p_mid (mapcar '/ (mapcar '+ p_begin p_end) '(2.0 2.0 2.0)) p_cen1 p_mid p_cen2 p_mid x_rad (/ chord_length 2.0) arc_length (* pi x_rad) i_ang pi value "" loop T ) (setvar "USERR3" chord_length) (princ (strcat "\nSpécifiez la longueur de l'arc <" (rtos (getvar "USERR3"))">: ")) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (redraw) (if (and (/= mod "_none") (osnap (cadr key) mod)) (progn (gr-osmode (cadr key) mod) (setq pt_drag (osnap (cadr key) mod) pt_drag (list (car pt_drag) (cadr pt_drag) (caddr p_begin)) ) ) (setq pt_drag (list (caadr key) (cadadr key) (caddr p_begin))) ) (setq arc_length (distance p_begin pt_drag)) (grtext -2 (rtos arc_length)) (if (> arc_length chord_length) (progn (setq lst nil i_ang (factor arc_length chord_length) x_rad (/ chord_length 2.0 (sin i_ang)) p_cen1 (polar p_begin (+ (angle p_begin p_end) (- (/ pi 2.0) i_ang)) x_rad) p_cen2 (polar p_begin (- (angle p_begin p_end) (- (/ pi 2.0) i_ang)) x_rad) ) (setq lst (fig_pts p_cen1 p_begin p_end x_rad)) (setq lst (fig_pts p_cen2 p_end p_begin x_rad)) (if lst (progn (grvecs lst) (grdraw p_begin (cadr key) 3))) ) (progn (setq lst nil i_ang pi x_rad (/ chord_length 2.0) p_cen1 p_mid p_cen2 p_mid ) (setq lst (fig_pts p_cen1 p_begin p_end x_rad)) (setq lst (fig_pts p_cen2 p_end p_begin x_rad)) (if lst (progn (grvecs lst) (grdraw p_begin (cadr key) 1))) ) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (if (and (not (zerop (strlen value))) (or (eq (type (read value)) 'INT) (eq (type (read value)) 'REAL))) (setvar "USERR3" (read value)) ) (setq arc_length (getvar "USERR3")) (princ "\n") (if (> arc_length chord_length) (setq lst nil i_ang (factor arc_length chord_length) x_rad (/ chord_length 2.0 (sin i_ang)) p_cen1 (polar p_begin (+ (angle p_begin p_end) (- (/ pi 2.0) i_ang)) x_rad) p_cen2 (polar p_begin (- (angle p_begin p_end) (- (/ pi 2.0) i_ang)) x_rad) loop nil ) (progn (princ (strcat "\nValeur doit être plus grande que <" (rtos chord_length) ">: ")) (setq value "") ) ) ) (T (if (eq (cadr key) 8) (progn (setq value (substr value 1 (1- (strlen value)))) (princ (chr 8)) (princ (chr 32)) ) (setq value (strcat value (chr (cadr key)))) ) (princ (chr (cadr key))) ) ) ) (grtext -2 "") (redraw) (if (zerop (getvar "PICKFIRST")) (setvar "PICKFIRST" 1)) (setq dxf_210 (list (caddr (trans '(1.0 0.0 0.0) 0 1 0)) (caddr (trans '(0.0 1.0 0.0) 0 1 0)) (caddr (trans '(0.0 0.0 1.0) 0 1 0)) ) ) (entmake (list '(0 . "ARC") '(100 . "AcDbEntity") (if (eq (getvar "CVPORT") 1) '(67 . 1) '(67 . 0) ) (cons 410 (getvar "CTAB")) (cons 8 (getvar "CLAYER")) '(100 . "AcDbCircle") (cons 10 (trans p_cen1 1 dxf_210)) (cons 40 x_rad) (cons 210 dxf_210) '(100 . "AcDbArc") (cons 50 (angle (trans p_cen1 1 dxf_210) (trans p_begin 1 dxf_210))) (cons 51 (angle (trans p_cen1 1 dxf_210) (trans p_end 1 dxf_210))) ) ) (setq ss1 (ssadd)) (ssadd (entlast) ss1) (entmake (list '(0 . "ARC") '(100 . "AcDbEntity") (if (eq (getvar "CVPORT") 1) '(67 . 1) '(67 . 0) ) (cons 410 (getvar "CTAB")) (cons 8 (getvar "CLAYER")) '(100 . "AcDbCircle") (cons 10 (trans p_cen2 1 dxf_210)) (cons 40 x_rad) (cons 210 dxf_210) '(100 . "AcDbArc") (cons 50 (angle (trans p_cen2 1 dxf_210) (trans p_end 1 dxf_210))) (cons 51 (angle (trans p_cen2 1 dxf_210) (trans p_begin 1 dxf_210))) ) ) (setq ss2 (ssadd)) (ssadd (entlast) ss2) (if (and ss1 ss2 (= 0 (getvar "CMDACTIVE"))) (progn (sssetfirst nil ss2) (princ "\n<Déplacer Curseur> pour choix; <Entrée>/[Espace]/Click+droit pour finir!.") (while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25)) (cond ((eq (car key) 5) (if (< (distance p_cen1 (cadr key)) (distance p_cen2 (cadr key))) (sssetfirst nil ss1) (sssetfirst nil ss2) ) ) ) ) ) ) (command "_.erase") (setvar "SHORTCUTMENU" sv_shmnu) (prin1) ) Ce code devrait fonctionné même dans un SCU non parralèle au SCG. (je suis assez content de moi sur ce coup là), j'ai réussi a déterminer le vecteur d'extrusion (code DXf 210) du scu courant. PS: lors de la saisie de la longueur en dynamique (l'accroche objet est possible) si le trait virtuel est rouge (la longueur est alors le demi-cercle par défaut), vert (la distance dynamique est valable pour la fonction) Les 2 solutions possibles sont proposées, il faut mettre en surbrillance celle qu'on veut écarter. Qu'en pensez vous?
-
Question d\'un machot du code
bonuscad a répondu à un(e) sujet de Concombre_masque dans Débuter en LISP
Bonjour, Une ébauche de code pour te donner le corps principal de la fonction. Il ne te reste plus qu'a paufiner. (remplacer la commande "_.point" par "_.-insert" avec un bloc existant de ton dessin) ((lambda peut être remplacé par un (defun c:macommande, enlever dans ce cas la paranthèse fermante supplémentaire à la fin. Rappel ((lambda est une fonction anonyme qui n'est executé qu'une seule fois lors de son chargement ou appel, elle ne reste pas en mémoire. ((lambda ( / ent vlaobj pt_org pt_end param_start param_end perim_obj x lst_pt x1) (while (not (setq js (ssget "_+.:S" '((0 . "POLYLINE")(-4 . "< NOT")(-4 . "&") (70 . 112)(-4 . "NOT> ")))))) (vl-load-com) (setvar "pdmode" 32) (redraw (setq ent (ssname js 0)) 3) (setq vlaobj (vlax-ename->vla-object ent) pt_org (vlax-curve-getStartPoint vlaobj) pt_end (vlax-curve-getEndPoint vlaobj) param_start (vlax-curve-getStartParam vlaobj) param_end (vlax-curve-getEndParam vlaobj) perim_obj (vlax-curve-getDistAtParam vlaobj param_end) ) (setq x (getdist "\nAbscisse de départ: ")) (setq lst_pt (list (vlax-curve-getPointAtParam vlaobj (vlax-curve-getParamAtDist vlaobj x)))) (while (< x perim_obj) (setq x1 (+ (/ (* x 2.0) 5.0) x)) (setq lst_pt (cons (vlax-curve-getPointAtParam vlaobj (vlax-curve-getParamAtDist vlaobj x1)) lst_pt)) (setq x x1) ) (foreach n lst_pt (command "_.point" n)) (redraw ent 4) (prin1) )) NB: Enlever les espace aprés le symbole "> " et "< " [Edité le 18/11/2005 par bonuscad] -
Au delà de 8 décimales et avec une LT, je pense qu'un est obligé de faire une manip intermédiaire pour s'apercevoir que le facteur Z est différent de 1. Ce qu'on peut faire est de changer l'échelle du bloc en lui affectant par exemple un facteur multiplicatif élevé (100 000 000 par exemple) et là l'info sera retourné par un liste. Mais ça il faut y penser quand on est confronté à ce genre de problème :mad:
-
Il faut mettre le format des unités avec 8 décimale, et après faire un "liste" ou "propriété" des 2 bloc insérés. On voit alors que l'insertion en Z du bloc de droite est différente de 1.
-
Je crois avoir la réponse. Si je fais (rtos (cdr (assoc 43 (entget (car (entsel))))) 2 8) sur le bloc de gauche, j'obtiens "1" sur celui de droite, j'obtiens "1.00000001" J'en déduis que celui de droite a été inserer avec un facteur d'échelle en Z différent de X et Y. Ce qui explique que lors de la décomposition on obtient des lignes. Finaud le Eric pour essayer de nous pieger. ;)
-
Je connais. Seul regret, est qu'il est impossible d'identifier la sélection si les caractéristiques (de couleur principalement) sont identiques. Une petite info dans la barre d'état serait par exemple la bienvenue! Par exemple; pour des fenêtres polygonales, je me sert de la fenêtre de propriété pour isoler la fenêtre de la polyligne de contour, c'est plus facile qu'avec le Cycle ou j'ai une chance sur 2 de me "planter".
-
Cercles ou Ellipse -> Arcs & vice-versa
bonuscad a répondu à un(e) sujet de (gile) dans Routines LISP
Salut (gile). Essayé sous 2000-2002 et 2005, pas de surprise, ça fonctionne nickel. Bravo! En cas de seuils multiples d'ajustement coupant plusieurs fois l'objet, ta commande peut remplacer avantageusement la commande "_trim". Est tu sûr que la commande "_regen" soit indispensable dans ton code? Je dirais que non (pas d'entité complexe, ou d'imbrication), mais tu as peut être une bonne raison de l'avoir fait. ;) Le gang des "Lispeurs" de CadXp s'étoffe. :D @+ -
couleur transparente sur une image couleur
bonuscad a répondu à un(e) sujet de ric73 dans AutoCAD 2005
A l'écran, il n'est pas possible du fusionner les couleurs. C'est suivant l'une ou l'autre mais pas les deux. Par contre à l'impression cela peut être posssible. Pour les traceurs le permettant, il y a une option soit de fusion, soit de surimpression. Bien sur l'option est valide pour l'ensemble du dessin, c'est soit fusion, soit surimpression, ce dernier par contre est influencé par "ordretrace" d'autocad. -
Bonjour, Suite à la dicussion ICI, j'ai été amené a trouvé une fonction pour générer des arrondis de nombres. En effet (rtos) permet de faire des arrondis mais seulement après la virgule. La fonction ci-dessous permet des arrondis de toutes sortes: (defun round_number (xr n / ) (* (fix (atof (rtos (* xr n) 2 0))) n) ) format d'appel (round_number [nombre] [précision]) NB: avec précision /= de zéro exemple: (round_number 1234.56789 (/ 1 25.0)) -> 1225.0 (arrondi à 25 unité la plus proche) (rtos (round_number 1234.56789 (/ 1 0.001)) 2 8) -> "1234.56800000" (arrondi à 0.001 unité la plus proche) alors que (round_number 1234.56789 (/ 1 0.001)) -> 1234.57 (renvoyé à l'écran mais avec 1234.568 comme valeur calculé, preuve ci-dessus) Qu'en pensez vous? Un autre moyen ? Une simplification possible? Merci de vos commentaires.
-
Maillage polyface en polyligne
bonuscad a répondu à un(e) sujet de alainterieur dans AutoCAD 2000 à 2002
Merci Boris de ton encouragement. Ce retour est fort apprécié, alors que tu n'es même pas le demandeur. (Et ce n'est pas la première fois que tu le fais) ;) -
Conversion de chaines de caractères
bonuscad a répondu à un(e) sujet de argilles dans Pour aller plus loin en LISP
Bonsoir, messieurs, Didier et Lecrabe Je suis moi aussi proche du demi-siecle. ;) mais suis heureux de pouvoir vous apprendre encore quelque chose. Mon avantage sur vous et peut être que je me suis mis vraiment au lisp à partir de la version 10.0 Déjà confronter a ce problème de formatage de texte à cause de COTZP (aujourd'hui DIMZIN). J'avais des impression (donc formatage!) de résultat de métré à faire, donc fouiller la doc papier pour résoudre ce problème. En plus je traitais des séquences ANSI (ça n'existe plus) en lisp Hé oui un forum internet m'aurais bien rendu service à cette époque. L'info est divisée: Dans l'aide autolisp à la fonction (rtos une réfèrence est faite à DIMZIN sans expliquer vraiment en quoi?. Par contre dans l'aide pour DIMZIN il est expliqué clairement le lien avec les convertion faite par (rtos et (angtos. Faut reconnaître que l'info n'est pas au meilleur endroit, et cela depuis un quart de siècle... :P -
Maillage polyface en polyligne
bonuscad a répondu à un(e) sujet de alainterieur dans AutoCAD 2000 à 2002
Bonjour, En continuant sur ta lancée dès que tu as tes 3DFaces, utilises la routine suivante. (de préférence dans le SCG, pas testé dans un SCU) (defun C:3dfto3dpo ( / js ind e_name ent dxf_10 dxf_11 dxf_12 dxf_13) (setvar "cmdecho" 0) (princ "\nChoix des 3Dfaces.") (setq js (ssget '((0 . "3DFACE"))) ind 0) (cond (js (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384))) (while (setq e_name (ssname js ind)) (setq ind (1+ ind) ent (entget e_name) dxf_10 (cdr (assoc 10 ent)) dxf_11 (cdr (assoc 11 ent)) dxf_12 (cdr (assoc 12 ent)) dxf_13 (cdr (assoc 13 ent)) ) (if (not (equal dxf_12 dxf_13 1E-012)) (command "_.3dpoly" dxf_10 dxf_11 dxf_12 dxf_13 "_close") (command "_.3dpoly" dxf_10 dxf_11 dxf_12 "_close") ) ) (princ (strcat "\n" (itoa ind) " 3Dpoly crées à partir de 3Dface.")) (setvar "osmode" (rem (getvar "osmode") 16384)) ) (T (prompt "\nAucune sélection valide.")) ) (setvar "cmdecho" 1) (prin1) ) -
Conversion de chaines de caractères
bonuscad a répondu à un(e) sujet de argilles dans Pour aller plus loin en LISP
Regarde la variable "DIMZIN" (elle doit être au moins à 8 pour supprimer les zéros de fin, la mettre à une valeur inférieure.) -
J'ai essayé de créer une routine plus générale et plus souple. Peut être un peut trop générale, car ce genre de routine utilisé à l'aveugle pour tester peut se révéler falacieuse. Les changements peuvent être imperceptiples (donc on ne s'en apercoit pas) mais hélas effectué dans la base de données du dessin. Cette routine modifiée pourra être plus restrictive. Par exemple enlever les entités ARC et CIRCLE de la liste de filtre, le groupe 40 pour les rayon et les hauteurs de texte. (defun round_number (xr n / ) (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n)) ) (defun c:regular_draw ( / js n_count prec ent dxf_ent dxf_lst) (setq js (ssget '((0 . "FACE3D,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,INSERT,LINE,POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE"))) n_count -1) (cond (js (initget 7) (setq prec (getreal "\nFacteur d'arrondi à appliquer au point de définition des objets, rayon et hauteur de texte ?: ")) (setq prec (/ 1 prec)) (setvar "cmdecho" 0) (command "_.undo" "_group") (while (setq ent (ssname js (setq n_count (1+ n_count)))) (setq dxf_ent (entget ent)) (cond ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE") (setq dxf_lst (cdr dxf_ent) dxf_ent (list (car dxf_ent))) (while (cdr dxf_lst) (if (eq 10 (caar dxf_lst)) (setq dxf_ent (cons (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdar dxf_lst))) dxf_ent)) (setq dxf_ent (cons (car dxf_lst) dxf_ent)) ) (setq dxf_lst (cdr dxf_lst)) ) (setq dxf_ent (reverse dxf_ent)) ) ((eq (cdr (assoc 0 dxf_ent)) "POLYLINE") (while (eq (cdr (assoc 0 (setq dxf_ent (entget (entnext (cdar dxf_ent)))))) "VERTEX") (setq dxf_ent (subst (cons 10 (mapcar '(lambda (x) (round_number x prec)) (cdr (assoc 10 dxf_ent)))) (assoc 10 dxf_ent) dxf_ent)) (entmod dxf_ent) ) ) (T (foreach n dxf_ent (if (member (car n) '(10 11 12 13 40)) (if (listp (cdr n)) (setq dxf_ent (subst (cons (car n) (mapcar '(lambda (x) (round_number x prec)) (cdr n))) (assoc (car n) dxf_ent) dxf_ent)) (setq dxf_ent (subst (cons (car n) (round_number (cdr n) prec)) (assoc (car n) dxf_ent) dxf_ent)) ) ) ) ) ) (entmod dxf_ent) (entupd ent) ) (command "_.undo" "_end") (setvar "cmdecho" 1) (princ (strcat "\n" (itoa n_count) " objet(s) transformé(s).")) ) (T (princ "\Aucun objet valide trouvé.")) ) (prin1) )
-
Très bien (gile) mais 2 remarques. Tu veux utiliser (entmake) cela n'est que mieux! Mais pourquoi ne récupéres-tu pas des infos de ton arc? code 8 6 62 48 (si existant) et ....67? (pas justifié vu qu'il y a une selection auparavant qui te détermine l'espace courant) Quand tu utilises (entmake) tu n'as pas besoin de te préoccuper des variables. Ici l'usage de "osmode" n'a aucune importance. Comme tu pourrais ignorer "clayer" si tu utilises le code dxf (8 . "non du calque")
-
Une ébauche pour une ligne, il faudra améliorer et compléter pour d'autre entités. ((lambda ( / e_line dxf_line dxf_10 dxf_11) (setq e_line (entsel "\nChoix d'une ligne: ") dxf_line (entget (car e_line)) dxf_10 (mapcar '(lambda (x) (atof (rtos x 2 0))) (cdr (assoc 10 dxf_line))) dxf_11 (mapcar '(lambda (x) (atof (rtos x 2 0))) (cdr (assoc 11 dxf_line))) dxf_line (subst (cons 10 dxf_10) (assoc 10 dxf_line) dxf_line) dxf_line (subst (cons 11 dxf_11) (assoc 11 dxf_line) dxf_line) ) (entmod dxf_line) (entupd (car e_line)) (princ) ))
-
Est tu sûr de ne pas avoir créé ton texte sur un calque verrouillé.?
-
Est ce que la barre verticale pourrait faire l'affaire? Tu l'obtiens par [Alt Gr] 6 (pas celui du pavé numérique)
-
Esbe, Si tu utilise la commande distance sur un affichage sur 2 lignes, pour avoir toutes les infos sans faire F2, tu dois changer tes unités. Dès qu'une précision décimale angulaire est demandée cela s'affiche sur 3 lignes. Donc précision angulaire sans décimale Pour les unités de longueur na pas dépasser 7 décimales de précision pour rester sur 2 lignes. Changer la taille de la police d'affichage ne changera rien pour ce problème de nombre de lignes. A moins d'avoir choisi une taille énorme ;)
-
Sous 2005 pas de problème! Peux tu essayer de copier-coller en ligne de commande (dans un nouveau dessin), les lignes suivantes. Tu rends le style de cotation CAD-XP en style courant et tu essayes de coter. La cotation est-elle correcte? (entmake '( (0 . "DIMSTYLE") (100 . "AcDbSymbolTableRecord") (100 . "AcDbDimStyleTableRecord") (2 . "CAD-XP") (70 . 0) (3 . "\\X\\P") (4 . "") (5 . "") (6 . "") (7 . "") (40 . 1.0) (41 . 2.5) (42 . 0.625) (43 . 3.75) (44 . 1.25) (45 . 0.0) (46 . 0.0) (47 . 0.0) (48 . 0.0) (140 . 2.5) (141 . 2.5) (142 . 0.0) (143 . 0.0393701) (144 . 1.0) (145 . 0.0) (146 . 1.0) (147 . 0.625) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0) (76 . 0) (77 . 1) (78 . 8) (170 . 1) (171 . 3) (172 . 1) (173 . 0) (174 . 0) (175 . 0) (176 . 0) (177 . 0) (178 . 0) (270 . 2) (271 . 2) (272 . 2) (273 . 6) (274 . 3) (275 . 0) (280 . 0) (281 . 0) (282 . 0) (283 . 0) (284 . 8) (285 . 0) (286 . 0) (287 . 3) (288 . 0) ))
-
Une autre SOLUTION avec la variable "CMDACTIVE"
-
Ton code fonctionne dans un dessin test "bateau". Pour un débug: Je suggère que tu essayes en 1er lieu d'utiliser le motif "SOLID" (tu contourneras le problème de l'échelle des hachures) En effet des hachures trop ou pas assez dense peut mettre la commande hachure en erreur. Un conseil qui peut avoir son importance sur le comportement du code: Déclares tes variables globales et locales; (defun c:fonction ( arg1 / var1 var2 var3....) En effet ssget peut refuser de fonctionner au delà de 128 jeux de collections d'objets déclaré et non-remis à nil. (Si tu utilises durant la même session divers lisp qui auraient le même défaut, la limite peut être vite atteinte) Je n'est pas fait de test, mais peut être des contours constitués avec des morceaux courts d'entités complexes style Spline Ellipse?!!
-
Voici un LIEN que j'avais déjà donné. Je pense que les caractères de contrôle sont difficile à gérer. De souvenir, il me semble aussi qu'au dessus d'un certain nombre de caractères, d'autres caractères se rajoutent pour le formatage du Mtext dans la définition DXF. Je connais pas les limitations de la routine "StripMtext" donné en lien ci dessus, mais elle me semble être déjà un bon outil (car elle peut être sélective sur les caractères a ôter).
-
Aire d\'une zone avec Autocad 2004
bonuscad a répondu à un(e) sujet de dracenois83 dans AutoCAD Architecture
Tu as la commande CONTOUR (_boundary) et tu interroges le dernier objet. Tu peux, comme le dit Christian automatiser ça avec des Macros et du Diesel dans un bouton. exemple pour interroger la surface: ^C^C_.undo;_begin;_.id;\_.-boundary;_none;@;;_.area;_object;_last;_.undo;_end;_.undo;1;^Z pour ecrire la surface (1 point, 1 surface) ^C^C_.undo;_begin;_.id;\_.-boundary;_none;@;;_.area;_object;_last;_.erase;_last;;_.-text;_justify;_bcenter;_none;@;;;$M=Surface=$(getvar,area);_.move;_last;;_none;@;\_.undo;_end;^Z [Edité le 25/10/2005 par bonuscad]
