-
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
-
Bonsoir, Un jour, un utilisateur voulait imprimer calque par calque ver un fichier EPS (pour faire un import vers PhotoShop) J'ai donc repris la routine que j'avais faite pour l'adapter ce coup-ci au vues Pour faire les tests j'ai gardé le format EPS ( économie de papier!) Sous 2002, cela fonctionne mais sous 2006 je ne sais pas si la commande PSOUT existe encore. Toujours est-il que le code peut s'adapter, mais il faudrait le faire sous une 2006 pour être sur et je ne l'ai pas. Quelqu'un pourra peut être prendre le relai au cas où? NB: Le format EPS peut être facilement converti au format PDF (defun epserr (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (command "_.undo" "_end") (if (<= sv_und 3) (command "_.undo" "_control" "_one")) (command "_.undo" "1") (setq *error* olderr) (setvar "expert" drap) (setvar "textfill" fill_txt) (setvar "filedia" dia_file) (setvar "cmdecho" 1) (princ) ) (defun c:view2eps ( / next_view name_view drap sv_und olderr fill_txt dia_file name_file typ_plot lst_view unit_plot scale_plot format_page prefix_folder) (setvar "cmdecho" 0) (setq drap (getvar "expert")) (setq fill_txt (getvar "textfill")) (setq dia_file (getvar "filedia")) (setvar "textfill" 1) (setvar "filedia" 0) (setvar "expert" 5) (if (<= (setq sv_und (getvar "undoctl")) 3) (command "_.undo" "_control" "_all") ) (command "_.undo" "_group") (setq olderr *error* *error* epserr) (setq name_file (getfiled "Créer un fichier PosScript" "0" "eps" 33)) (setq typ_plot "View" lst_view '()) (initget "Pouce Millimètre _Inches Millimeter") (if (not (setq unit_plot (getkword "\nEntrez les unités [Pouces/Millimètres] : "))) (setq unit_plot "Millimeter") ) (setq scale_plot (getstring "\nEntrez l'échelle de tracer sous la forme 1=2 ou F pour ajuster à la page: ")) (textscr) (princ "\nValeurs standard pour le format de sortie") (princ "\nFormat Largeur Hauteur") (princ "\nA 8.00 10.50") (princ "\nB 10.00 16.00") (princ "\nC 16.00 21.00") (princ "\nD 21.00 33.00") (princ "\nE 33.00 43.00") (princ "\nF 28.00 40.00") (princ "\nG 11.00 90.00") (princ "\nH 28.00 143.00") (princ "\nJ 34.00 176.00") (princ "\nK 40.00 143.00") (princ "\nA4 7.80 11.20") (princ "\nA3 10.70 15.60") (princ "\nA2 15.60 22.40") (princ "\nA1 22.40 32.20") (princ "\nA0 32.20 45.90") (princ "\nUTILISATEUR 10.75 15.59") (initget 8 "A B C D E F G H I J K A4 A3 A2 A1 A0 UTILISATEUR _A B C D E F G H I J K A4 A3 A2 A1 A0 USER") (if (null (setq format_page (getpoint "\nEntrez le format, ou la largeur,hauteur (en Pouces) : "))) (setq format_page "A4") ) (if (setq next_view (tblnext "VIEW" T)) (progn (setq name_view (cdr (assoc 2 next_view)) lst_view (cons name_view lst_view) ) (while (setq next_view (tblnext "VIEW")) (setq name_view (cdr (assoc 2 next_view)) lst_view (cons name_view lst_view) ) ) ) ) (setq prefix_folder (substr name_file 1 (- (strlen name_file) 5))) (repeat (length lst_view) (setq name_view (car lst_view)) (setq name_file (strcat prefix_folder name_view ".eps")) (command "_.psout" name_file (strcat "_" typ_plot)) (command name_view) (command "_none" (strcat "_" unit_plot) scale_plot) (if (listp format_page) (command (strcat (rtos (car format_page) 2 2) "," (rtos (cadr format_page) 2 2))) (command (strcat "_" format_page)) ) (setq lst_view (cdr lst_view)) ) (princ "\nTous les vues ont été tracées en fichiers EPS dans l'espace courant.\n Commande terminée...") (command "_.undo" "_end") (if (<= sv_und 3) (command "_.undo" "_control" "_one")) (command "_.undo" "1") (setq *error* olderr) (setvar "expert" drap) (setvar "textfill" fill_txt) (setvar "filedia" dia_file) (setvar "cmdecho" 1) (princ) )
-
On peut faire de 2 manières Soit a travers le lisp à l'aide de la fonction (initget), mais attention suivant la valeur de "SHORTCUTMENU" ce menu contextuel ne sera pas disponible. Fonctionne avec la valeur par défaut à 11 Soit à travers les menus Je n'ai pas réussi a retrouver le post de Patrick (le Webmaster) qui donnait un exemple: Je refais un copier-coller de son menu ***POP502 **CMEDIT [Menu contextuel pour le mode d'édition] [--] ID_Desactiver [»&Inactiver un calque]^P(setvar "EXPERT" 1)(setvar "USERS1" (cdr (assoc 8 (entget (ssname (cadr (ssgetfirst)) 0)))));_.-LAYER;_OFF;(getvar "USERS1");; ID_Isoler [»Iso&ler un calque]^P(setvar "EXPERT" 1)(setvar "USERS1" (cdr (assoc 8 (entget (ssname (cadr (ssgetfirst)) 0)))));_.-LAYER;_SET;(getvar "USERS1");_OFF;*;_ON;(getvar "USERS1");; ID_Calqcourant [»Rendre &courant un calque]^P(setvar "EXPERT" 1)(setvar "USERS1" (cdr (assoc 8 (entget (ssname (cadr (ssgetfirst)) 0)))));_.-LAYER;_SET;(getvar "USERS1");; ID_Allumertout [»All&umer tout et calque courant]^P(setvar "EXPERT" 1)(setvar "USERS1" (cdr (assoc 8 (entget (ssname (cadr (ssgetfirst)) 0)))));_.-LAYER;_ON;*;_SET;(getvar "USERS1");; ***HELPSTRINGS ID_DESACTIVER [Eteint le calque de l'objet sélectionné] ID_ISOLER [isole le calque de l'objet sélectionné] ID_CALQCOURANT [se met sur calque de l'objet sélectionné] ID_ALLUMERTOUT [Active tout les calques et rend le calque de l'objet sélectionné courant]
-
A cette adresse Regarder le fichier UCSImport. Je l'ai déjà essayé, il fonctionne. Par contre je ne me souviens plus si j'avais du le corriger au niveau des syntaxes de commande (rajouter le underscore "_" devant les commandes) N'étant jamais confronté au problème de la langue, les "englishs" oublient souvent cette syntaxe :mad:
-
Contrôle sur la commande DECALER
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Tu dois avoir une souris avec plein de bouton ;) avec la ligne suivante pour tester les codes retournés (while (and (setq key (grread T 4 0)) (not (member key '((2 13) (2 32))))) (print key)) Sous 2002 avec une souris 2 boutons et molette (d'ailleurs la molette n'est pas pris en charge par grread) j'ai pour : ckick gauche: (3 (x y z)) et CTRL+click gauche (3 (x y z)) click droit (25 n) et CTRL+Click droit (11 n) (12 (x y z)) (5 (x y z)) (25 n) Je pense que si on utilise une souris ou une tablette avec un nombre de boutons plus important le code de (grread) serait encore différent suivant comment ceux-ci sont affectés. Ha, je viens de trouver en rédigeant, la variable "SHORTCUTMENU" a une incidence sur l'interprétation des boutons (logique!) Ben volilà plus rien à ajouter, a part de faire le controle de cette variable dans la routine si on veut qu'elle reste homogème. -
Est ce temporaire, dût à un problème technique, ou définitif! Le site www.afralisp.com ne répond plus :mad: Quelqu'un a des infos???
-
Contrôle sur la commande DECALER
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Sous 2002, click droit ou gauche fonctionnent indifféremment :casstet: Lorque tu bascule d'un coté à l'autre de la ligne, il faut que le curseur passe par le point de sélection de l'objet. Une croix virtuelle est dessinée pour te rappeler là où il se trouve! La distance est calculée par rapport à ce point, se déplacer en conséquence... ;) -
Rourine pour renuméroter automatiquement
bonuscad a répondu à un(e) sujet de rvpas dans AutoCAD 2004
Salut, Il y a ce FIL ou tu pourras peut être avoir une partie de ce que tu désire. Merci encore à Patrick_35 qui m'avais bien aidé sur ce coup là. Si cela ne convient pas il existe d'autres routines plus sophistiquées, mais payantes! sur d'autres sites. -
Contrôle sur la commande DECALER
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Salut Patrick J'ai posé ma question un peu trop vite, dans ma tête je pensais trouver la réponse dans ERRNO ou une fonction comme (bherr) mais en fait; après une illumination, j'en suis arrivé au même raisonnement que toi (par entlast). Malgré t'avoir lu après, je te remercie de ta réponse qui a confirmé ma démarche. Pour ceux que ça interesseraient, voici le code plus abouti. Celui permet un décalage répétitif d'un objet sans faire d'innombrables clicks, il suffit juste de glisser le curseur et de clicker ou entrée pour achever le décalage à l'endroit voulu. Cela peut être pratique pour faire les lignes et colonnes d'un tableau. (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:dyn_offset ( / sel_ent pt_sel e_sel dxf_ent e_mark e_borne loop sav_osm dis_off key pt) (while (null (setq sel_ent (entsel "\nChoix de l'objet à décaler: ")))) (setq pt_sel (osnap (cadr sel_ent) "_near") e_sel (car sel_ent) dxf_ent (entget e_sel) e_mark e_sel e_borne (entlast) loop T sav_osm (getvar "osmode") ) (cond ((and (member (cdr (assoc 0 dxf_ent)) '("LWPOLYLINE" "POLYLINE" "LINE" "XLINE" "RAY" "ARC" "CIRCLE" "ELLIPSE" "SPLINE")) (if (cdr (assoc 70 dxf_ent)) (< (rem (cdr (assoc 70 dxf_ent)) 128) 8) T ) ) (if (< (getvar "offsetdist") 0.0) (initget 7) (initget 6)) (setq dis_off (getdist (strcat "\nDistance de décalage<" (rtos (getvar "offsetdist")) ">: "))) (if (not dis_off) (setq dis_off (getvar "offsetdist")) (setvar "offsetdist" dis_off)) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (setq pt (cadr key)) (draw_pt pt_sel) (cond ((>= (distance pt_sel pt) dis_off) (command "_.offset" "" e_sel pt "") (if (not (eq (entlast) e_sel)) (setq e_sel (entlast) dis_off (+ dis_off (getvar "offsetdist")) ) ) ) ((and (< (distance pt_sel pt) (- dis_off (getvar "offsetdist"))) (> (distance pt_sel pt) 0.0) (not (eq e_mark e_sel)) ) (entdel e_sel) (if (eq e_borne (entlast)) (setq e_sel (car sel_ent)) (setq e_sel (entlast)) ) (setq dis_off (- dis_off (getvar "offsetdist"))) ) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (setq loop nil)) ) ) (redraw) (setvar "osmode" sav_osm) (setvar "cmdecho" 1) ) (T (princ "\nL'objet ne peut pas être décalé.")) ) (prin1) ) -
Bonjour à tous Est-il possible de savoir par un quelconque moyen, le succés de l'achèvement d'une commande. Ici, il s'agirait de la commande décaler. Je voudrais savoir si l'objet a put être décalé. Ce problème se pose pour des arcs (ou autre courbe: ellipse, spline) décalés vers le centre. Ces renseignements me seraient utile pour essayer de finaliser une routine lisp dont en voici une ébauche. Bien que la routine n'avorte pas dans ce cas précis, je voudrait que ma variable dis_off ne soit pas incrémenté. Comme d'hab. elle utilise (grread) ;) Merci (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:dyn_offset ( / sel_ent pt_sel e_sel dis_off borne loop sav_osm key pt) (while (null (setq sel_ent (entsel "\nChoix de l'objet à décaler: ")))) (setq pt_sel (cadr sel_ent) e_sel (car sel_ent) borne (entlast) loop T sav_osm (getvar "osmode") ) (if (< (getvar "offsetdist") 0.0) (initget 7) (initget 6)) (setq dis_off (getdist (strcat "\nDistance de décalage<" (rtos (getvar "offsetdist")) ">: "))) (if (not dis_off) (setq dis_off (getvar "offsetdist")) (setvar "offsetdist" dis_off)) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (setq pt (cadr key)) (draw_pt pt_sel) (cond ((>= (distance pt_sel pt) dis_off) (command "_.offset" "" sel_ent pt "") ;;ICI je voudrais savoir si la commande a pu se réaliser (setq sel_ent (entlast) dis_off (+ dis_off (getvar "offsetdist")) ) ) ((and (< (distance pt_sel pt) dis_off) (> (distance pt_sel pt) 0.0) (not (eq (entlast) borne)) (not (eq (entlast) e_sel)) ) (entdel sel_ent) (setq sel_ent (entlast) dis_off (- dis_off (getvar "offsetdist")) ) ) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (setq loop nil)) ) ) (redraw) (setvar "osmode" sav_osm) (setvar "cmdecho" 1) (prin1) )
-
OK, compris pour les grips Personnellement je n'aime pas surperposer des sommets, cela peut créer des problèmes pour d'autres utilisations ultérieures: hachures, joindre d'autres segments, clore, régions etc..... Solution rapide, mais je suis pas entièrement convaincu
-
A moins que je n'ai pas compris les finesse de la question, il me semble que l'option "Linéair" dans l'édition des sommets de la commande PEDIT permet la suppression d'un sommet. Par contre Patrick, comment fait tu avec les grips?? :exclam:
-
choix de selection d\'entités superposées?
bonuscad a répondu à un(e) sujet de melino dans AutoCAD 2004
Salut Mister "GrMania" en remet une couche (Gilles comprendra) ;) C'est vrai que la touche CTRL ne donne aucune information :casstet: Donc en désespoir de cause j'avais pondu ceci: (defun c:what_select ( / l_ent e_sel pt_sel js l_js l_ent e_sel dxf_ent key) (while (null (setq e_sel (entsel)))) (setq pt_sel (osnap (cadr e_sel) "_nearest") js (ssget "_C" pt_sel pt_sel) l_js (ssnamex js) ) (foreach n l_js (if (eq (type (cadr n)) 'ENAME) (setq l_ent (cons (cadr n) l_ent)))) (setq e_sel (ssadd)) (sssetfirst nil (ssadd (car l_ent) e_sel)) (if (> (length l_ent) 1) (progn (setq dxf_ent (entget (car l_ent))) (grtext -1 (strcat "Entité: " (cdr (assoc 0 dxf_ent)) " Calque: " (cdr (assoc 8 dxf_ent)) (if (assoc 62 dxf_ent) (strcat " Couleur: " (itoa (cdr (assoc 62 dxf_ent)))) "") (if (assoc 6 dxf_ent) (strcat " TypeLigne: " (cdr (assoc 6 dxf_ent))) ""))) (princ "\n pour faire défiler entité suivante; /[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) 3) (setq l_ent (append (cdr l_ent) (list (car l_ent))) e_sel (ssadd)) (sssetfirst nil (ssadd (car l_ent) e_sel)) (setq dxf_ent (entget (car l_ent))) (grtext -1 (strcat "Entité: " (cdr (assoc 0 dxf_ent)) " Calque: " (cdr (assoc 8 dxf_ent)) (if (assoc 62 dxf_ent) (strcat " Couleur: " (itoa (cdr (assoc 62 dxf_ent)))) "") (if (assoc 6 dxf_ent) (strcat " TypeLigne: " (cdr (assoc 6 dxf_ent))) ""))) ) ) ) (grtext) ) ) (prin1) ) Si il y a plusieurs entités sous le curseur lors de la sélection, une info (type entité et calque) est affiché dans la barre d'état et un click gauche fait défiler l'entité suivante -
Pour le "Fun" Une ébauche de routine (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 c:chap_gendarme ( / pt_start key pt_end rad cc1 pt1 pt2 cc2 pt3 cc3 pt4 lst) (setq pt_start (getpoint "\nPoint de départ: ")) (princ "\nPoint final: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (redraw) (setq pt_end (cadr key)) (setq rad (/ (distance (list (car pt_start) (cadr pt_start)) (list (car pt_end) (cadr pt_end))) 2.0)) (if (not (zerop rad)) (progn (setq cc1 (polar pt_start (+ (angle pt_start pt_end) (/ pi 2.0)) (sqrt (- (* rad rad) (* (/ rad 2.0) (/ rad 2.0)))))) (setq pt1 (polar cc1 (angle cc1 pt_start) rad)) (setq pt2 (polar pt_start (angle pt_start pt_end) (/ rad 2.0))) (setq cc2 (polar cc1 (angle cc1 pt2) (* 2.0 rad))) (setq pt3 (polar pt_end (angle pt_end pt_start) (/ rad 2.0))) (setq cc3 (polar pt_end (- (angle pt_end pt_start) (/ pi 2.0)) (sqrt (- (* rad rad) (* (/ rad 2.0) (/ rad 2.0)))))) (setq pt4 (polar cc3 (angle cc3 pt_end) rad)) (fig_pts cc1 pt1 pt2 rad) (fig_pts cc2 pt3 pt2 rad) (fig_pts cc3 pt3 pt4 rad) (if lst (progn (grvecs lst) (grdraw pt_start pt_end 1))) (setq lst nil) ) ) ) ) ) (prin1) )
-
Première version d'Autocad utilisée: V9 Age 46 ans Trop de bouteilles derrière moi, j'utilise les CTB (on change pas une équipe qui gagne!)
-
Auriez vous une explication sur (vlax-curve ?
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Merci Tififonky, Je vais déjà regarder dans cette direction, ;) -
Auriez vous une explication sur (vlax-curve ?
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Merci de ta réponse, C'est vraiment a propos du code ActiveX que je voudrais une explication, Je dispose déjà de code dans le même style,monté avec la commande "_area" De plus j'ai déjà utiliser ce segment de code dans d'autres procédures, alors je voudrais bien comprendre, car comme je l'ai utilisé, il ne me pose pas de problème inséré dans la procédure suivante: (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:lg_curv ( / js ent vlaobj pt_org pt_end param_start param_end perim_obj mnpt mxpt minpt maxpt vmin vmax zt pt_brk abs_curv pt_tmp) (while (not (setq js (ssget "_+.:S" '((0 . "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE")(-4 . "")))))) (vl-load-com) (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_start param_end)) ) (vla-GetBoundingBox vlaobj 'mnpt 'mxpt) (setq minpt (trans (safearray-value mnpt) 0 1) maxpt (trans (safearray-value mxpt) 0 1) vmin (mapcar '- (getvar "viewctr") (list (/ (* (car (getvar "screensize")) (* 0.5 (getvar "viewsize"))) (cadr (getvar "screensize"))) (* 0.5 (getvar "viewsize")) 0.0)) vmax (mapcar '+ (getvar "viewctr") (list (/ (* (car (getvar "screensize")) (* 0.5 (getvar "viewsize"))) (cadr (getvar "screensize"))) (* 0.5 (getvar "viewsize")) 0.0)) ) (setq zt (or (< (car minpt) (car vmin)) (< (cadr minpt) (cadr vmin)) (> (car maxpt) (car vmax)) (> (cadr maxpt) (cadr vmax)))) (if zt (command "_.zoom" "_window" "_none" minpt "_none" maxpt)) (while (setq pt_brk (getpoint "\nChoix du point pour définir l'abscise curviligne ")) (setq pt_brk (vlax-curve-getClosestPointTo vlaobj (trans pt_brk 1 0))) (if pt_brk (progn (draw_pt (trans pt_org 0 1)) (draw_pt (trans pt_brk 0 1)) (setq abs_curv (vlax-curve-getDistAtPoint vlaobj pt_brk) ordon_y (caddr pt_brk)) (princ (strcat "\nAbscise curviligne du point = " (rtos abs_curv) " Z du point = " (rtos ordon_y))) (princ "\n pour inverser le sens de parcours; /[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) 3) (draw_pt (trans pt_org 0 1)) (draw_pt (trans pt_end 0 1)) (setq abs_curv (- perim_obj abs_curv) pt_tmp pt_org pt_org pt_end pt_end pt_tmp) (princ (strcat "\nAbscise curviligne du point = " (rtos abs_curv) " Z du point = " (rtos ordon_y))) ) ) ) (redraw) ) ) ) (if zt (command "_.zoom" "_previous")) (redraw ent 4) (prin1) ) -
Tu peux rajouter la fonction (defun compteur_err au tout début du fichier. En règle générale dans le lisp on déclare ses fonctions où on veut, du moment qu'elles soient définies avant leurs utilisation. Pour les fonctions et variables le lisp est moins rigide que d'autre language de programmation. Une variable peut être définie au début de la procédure ou juste au moment où tu en as besoin. Une remarque à propos des lignes (command "_.text" "_style" nom_style "_justify" pause position ht_style "0" lib_texte) (command "_.text" "_style" nom_style "_justify" pause position 0 lib_texte) Ces deux lignes poseront problème si on choisit l'option "Fixé" ou "Aligné"
-
Auriez vous une explication sur (vlax-curve ?
bonuscad a posté un sujet dans Pour aller plus loin en LISP
Bonjour, En faisant des tests sur un bout de code (longueur de périmètre), je viens d'avoir une désagréable surprise. Le code suivant à l'air d'être correct avec des: POLYLINE, LWPOLYLINE, LINE, CIRCLE, ELLIPSE et SPLINE. Mais sur des ARC le résultat est faux, un "liste" sur l'arc ne retourne pas le même périmètre. D'après vous, y a t-il une erreur dans le code? ou le problème est ailleurs Merci de vos éclaircissements (vl-load-com) (setq ent (car (entsel)) 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_start param_end)) ) -
Salut, Sans avoir vérifier ma modif, je changerais (if (= flag_ht 0) (command "texte" "st" nom_style position ht_style 0 lib_texte) (command "texte" "st" nom_style position 0 lib_texte) ) en (if (= flag_ht 0) (command "_.text" "_style" nom_style "_justify" "_middle" position ht_style 0 lib_texte) (command "_.text" "_style" nom_style '_justify" "_middle" position 0 lib_texte) ) Ceci pour que le texte soit au milieu du point fourni
-
Bonjour, Peut être quelque ligne de code à creuser encore si cela convient. Cette routine va inscrire la longueur du perimètre des objet selectionnés avec une pause pour chaque objet (polyligne, ligne, spline, ellipse, arc, cercle) pour placer le texte de cote. Cette cote n'est pas associative car elle contient la longueur curviligne des objets et non la distance droite d'extrèmité à extrèmité. (defun c:dim_perimeter ( / ent name_lay js n vlaobj pt_org pt_end param_start param_end perim_obj) (vl-load-com) (while (not (setq ent (entsel "\nChoix d'une entité sur le calque à coter: ")))) (setq name_lay (cdr (assoc 8 (entget (car ent))))) (setq js (ssget (append '((0 . "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE")(-4 . "< NOT")(-4 . "&") (70 . 112)(-4 . "NOT>")) (list (cons 8 name_lay)))) n 0) (cond (js (setvar "dimsd1" 1)(setvar "dimsd2" 1) (repeat (sslength js) (setq ent (ssname js n) 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_start param_end)) ) (command "_.dimaligned" pt_org pt_end "_text" (rtos perim_obj) pause) (setq n (1+ n)) ) (setvar "dimsd1" 0)(setvar "dimsd2" 0) ) (T (princ "\nPas de polyligne sur ce calque.")) ) (prin1) ) NB: ENLEVER l'espace entre le "<" et le NOT après le copier collé
-
aide s.v.p. : extruder texte de hachures
bonuscad a répondu à un(e) sujet de loupigne dans AutoCAD 2006
Regardes à cette discussion une autre solution avait été évoquée. Vois si elle t'interresse! -
Salut, Sous 2005, je n'ai pas rencontré ce problème, ça fonctionne. Par contre j'arrive à reproduire ce phénomème en jouant avec la variable "OSMODE" en utilisant un paramètre qui n'est plus accessible directement: le mode "rapide" (même en version 2002) Explication: Osmode à 64 = mode accrobj "insertion' Osmode à 1024 = mode accrobj "rapide" osmode à 1088 = mode accrobj "insertion, rapide" Donc à 64 cela fonctionne bien, je m'acrroche à chaque insertion de bloc, mais à 1088 effectivement je m'accroche à l'insertion du bloc multiple. Voilà, si cette remarque peut t'aider ;)
-
Salut Christian, Bien que je ne puisse tester, je n'ai pas la 2006, est ce que ce ne serait pas la variable SDI qui empêcherait le bon déroulement de ton script. Je dis ça, car tu disais que seule la 1ère ligne s'exécute (le 1er dessin) Enfin à voir quand même! ;)
-
Salut, Ce que dit Gile est juste, mais assez galère a appliquer pour des polylignes optimisées "LWPOLYLINE" car il va falloir que tu identifie le bout de segment sélectionné. Les anciennes serait plus facile à traiter avec la fonction (nentsel) puis un (entnext) pour acceder au sommet suivant. Donc si tu veut pouvoir mixer different type d'objet, je pense qu'il va falloir te tourner ver les fonction (vlax....) pour plus de facilité. Je te conseille de regarder un bout de code appeler VxGetInters et de l'utiliser pour essayer, sous la forme: (VxGetInters (vlax-ename->vla-object (car (entsel))) (vlax-ename->vla-object (car (entsel))) 0) tu peut changer 0 en 3, tu auras alors l'intersection projetée
-
De souvenir, je crois qu'il y a quelquechose relatant ce problème dans le lisez.moi que tu as à la fin de l'installation d'Autocad Je crois qu'il faut préferer l'usage des calques inactif au lieu des calques gelés. Recherche dans ce document, car ce problème est recensé pour les fenêtres polygonales.
