Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Sorry, Message inutile Malgré que j'ai essayé plusieurs fois avant de faire le message (pour etre sûr) Force est de constater que ca fonctionne.
  2. Bonjour Patrick, L'accès aux derniers messages n'a pas l'air de fonctionner. Tu vas nous remettre ça "d'équerre" d'ici peu de temps ;)
  3. Bonjour Patrick, L'accès aux derniers messages n'a pas l'air de fonctionner. Tu vas nous remettre ça "d'équerre" d'ici peu de temps ;)
  4. Je ne sais si ca peut répondre a ton souhait! Mais si tu es allergique aux "WIPEOUT" des express, une alternative est possible en s'inspirant de la fonction TBOX de la R12 pour du texte. Voici un code qui cré un solide pour un cadre de texte ou texte multiligne. Les objets TEXT ou MTEXT sont limités aux scu parallèle au SCG. (defun transpts (apt matrix / ) (list (+ (* (car (nth 0 matrix)) (car apt)) (* (car (nth 1 matrix)) (cadr apt)) (* (car (nth 2 matrix)) (caddr apt)) (cadddr (nth 0 matrix)) ) (+ (* (cadr (nth 0 matrix)) (car apt)) (* (cadr (nth 1 matrix)) (cadr apt)) (* (cadr (nth 2 matrix)) (caddr apt)) (cadddr (nth 1 matrix)) ) (+ (* (caddr (nth 0 matrix)) (car apt)) (* (caddr (nth 1 matrix)) (cadr apt)) (* (caddr (nth 2 matrix)) (caddr apt)) (cadddr (nth 2 matrix)) ) ) ) (defun v_matr (dpt alphax alphay alphaz echx echy echz / ) (list (list (* echx (cos alphaz) (cos alphay)) (- (sin alphaz)) (sin alphay) (car dpt) ) (list (sin alphaz) (* echy (cos alphaz) (cos alphax)) (- (sin alphax)) (cadr dpt) ) (list (- (sin alphay)) (sin alphax) (* echz (cos alphax) (cos alphay)) (caddr dpt) ) (list 0.0 0.0 0.0 1.0) ) ) (defun c:box_text ( / ent_txt dxf_ent ins_point ht_txt lg_box ht_box ang_box pt_just lst_box transform diag_box sv_osm sv_cmd sv_blp cur_col mask_txt) (while (null (setq ent_txt (entsel "\nChoix d'un MultiTEXTE ou TEXTE: ")))) (setq dxf_ent (entget (car ent_txt))) (cond ((and (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 dxf_ent)) "MTEXT")) (setq ins_point (cdr (assoc 10 dxf_ent)) ht_txt (/ (cdr (assoc 40 dxf_ent)) 5.0) lg_box (cdr (assoc 42 dxf_ent)) ht_box (cdr (assoc 43 dxf_ent)) ang_box (cdr (assoc 50 dxf_ent)) pt_just (cdr (assoc 71 dxf_ent)) ) (setq lst_box (list (list (- ht_txt) ht_txt 0.0) (list (+ lg_box ht_txt) ht_txt 0.0) (list (+ lg_box ht_txt) (- 0.0 ht_box ht_txt) 0.0) (list (- ht_txt) (- 0.0 ht_box ht_txt) 0.0) ) ) (cond ((eq pt_just 1) (setq transform (v_matr (list 0.0 0.0 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 2) (setq transform (v_matr (list (- (/ lg_box 2.0)) 0.0 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 3) (setq transform (v_matr (list (- lg_box) 0.0 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 4) (setq transform (v_matr (list 0.0 (+ (/ ht_box 2.0)) 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 5) (setq transform (v_matr (list (- (/ lg_box 2.0)) (/ ht_box 2.0) 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 6) (setq transform (v_matr (list (- lg_box) (/ ht_box 2.0) 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 7) (setq transform (v_matr (list 0.0 ht_box 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 8) (setq transform (v_matr (list (- (/ lg_box 2.0)) ht_box 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ((eq pt_just 9) (setq transform (v_matr (list (- lg_box) ht_box 0.0) 0.0 0.0 0.0 1.0 1.0 1.0)) ) ) (setq lst_box (mapcar '(lambda (x) (transpts x transform)) lst_box)) (setq transform (v_matr (trans ins_point 0 1) 0.0 0.0 (- ang_box) 1.0 1.0 1.0)) (setq lst_box (mapcar '(lambda (x) (transpts x transform)) lst_box)) ) ((and (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) (eq (cdr (assoc 0 dxf_ent)) "TEXT")) (setq diag_box (textbox dxf_ent) ins_point (cdr (assoc 10 dxf_ent)) ht_txt (/ (cdr (assoc 40 dxf_ent)) 5.0) ang_box (cdr (assoc 50 dxf_ent)) ) (setq lst_box (list (list (- (caar diag_box) ht_txt) (- (cadar diag_box) ht_txt) 0.0) (list (+ (caadr diag_box) ht_txt) (- (cadar diag_box) ht_txt) 0.0) (list (+ (caadr diag_box) ht_txt) (+ (cadadr diag_box) ht_txt) 0.0) (list (- (caar diag_box) ht_txt) (+ (cadadr diag_box) ht_txt) 0.0) ) ) (setq transform (v_matr ins_point 0.0 0.0 (- ang_box) 1.0 1.0 1.0)) (setq lst_box (mapcar '(lambda (x) (transpts x transform)) lst_box)) (setq lst_box (mapcar '(lambda (x) (trans x 0 1)) lst_box)) ) (T (princ "\nN'est pas un TEXTE/TEXTE MultiLigne, ou non parallèle au SCG.") (setq lst_box nil) ) ) (cond (lst_box (setq sv_osm (getvar "osmode") sv_cmd (getvar "cmdecho") sv_blp (getvar "blipmode") cur_col (getvar "CECOLOR") ) (setvar "cmdecho" 0) (setvar "blipmode" 0) (setvar "osmode" 0) (setvar "CECOLOR" "255") (command "_.solid" (car lst_box)) (setq lst_box (cdr lst_box)) (repeat 3 (command (car lst_box)) (setq lst_box (reverse (cdr lst_box))) ) (command "") (setq mask_txt (entlast)) (setvar "CECOLOR" cur_col) (command "_.draworder" (cdar dxf_ent) "" "_above" mask_txt) (setvar "cmdecho" sv_cmd) (setvar "blipmode" sv_blp) (setvar "osmode" sv_cmd) (princ "\nCadre de texte colorisé en gris/blanc - 255") ) ) (princ) )
  5. Salut, Effectivement il y a eu un problème lors du copier-coller: les symbole '<' ont étés interprétés (je suppose par le BBCode) et ne figure plus dans le message. 2 Solutions tu pourras trouver dans la zone téléchargement free "Bonuscad.zip" et extraire cette routine. Soit tu me donne ton adresse pour envoi. Voili voilou ;)
  6. Suite à la diccussion concernant la construction d'un cercle par 2 points et de rayon ou diamètre connu, voir: http://www.cadxp.com/sujetXForum-2488.htm Je vous propose d'examiner le code si-dessous. C'est un programme court, et facile à décortiquer. Vous pourrez vous attarder sur l'emploi de la fonction (grread) qui est un peu plus complexe, mais pouvant vous servir d'exemple pour une autre fonction écrite par vos soins. (Sélection alternative par déplacement de la souris) E allant voir la dicussion, vous pourrez voir l'évolution de ce code en plusieurs étapes, et les différentes solutions apportées. (Il y a tellement de façons de faire) (defun c:CD2P ( / p1 p2 pc1 pc2 rad ss1 ss2 s_osm key) (initget 1) (setq p1 (getpoint "\n1er point obligé: ")) (initget 33) (setq p2 (getpoint p1 "\n2eme point obligé: ") rad "Radius") (initget 3 "Diametre Rayon _Diameter Radius") (setq rad (getdist (strcat "\n[Diamètre/Rayon]<" rad "> ?: "))) (while (or (eq (type rad) 'STR) (< (* rad 2.0) (distance p1 p2))) (cond ((eq (type rad) 'STR) (initget 3 "Diametre Rayon _Diameter Radius") (setq rad (if(eq rad "Diameter") (eval '(/ (getdist (strcat "\n[Diamètre/Rayon]<" rad "> ?: ")) 2.0)) (eval '(getdist (strcat "\n[Diamètre/Rayon]<" rad "> ?: "))) ) ) ) (T (princ " **Incorrect** Valeur du rayon trop faible !") (initget 3 "Diametre Rayon _Diameter Radius") (setq rad (getdist (strcat "\n[Diamètre/Rayon]<" (rtos rad) "> ?: "))) ) ) ) (setvar "CMDECHO" 0) (setq s_osm (getvar "OSMODE")) (setvar "OSMODE" 0) (if (zerop (getvar "PICKFIRST")) (setvar "PICKFIRST" 1)) (command "_.arc" p1 "_en" p2 "_radius" rad) (setq ss1 (ssget "_L")) (command "_.arc" p2 "_en" p1 "_radius" (- rad)) (ssadd (entlast) ss1) (setq pc1 (cdr (assoc 10 (entget (entlast))))) (command "_.arc" p1 "_en" p2 "_radius" (- rad)) (setq ss2 (ssget "_L")) (command "_.arc" p2 "_en" p1 "_radius" rad) (ssadd (entlast) ss2) (setq pc2 (cdr (assoc 10 (entget (entlast))))) (setvar "OSMODE" s_osm) (if (and ss1 ss2 (= 0 (getvar "CMDACTIVE"))) (progn (sssetfirst nil ss2) (princ "\n pour choix; /[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 pc1 (cadr key)) (distance pc2 (cadr key))) (sssetfirst nil ss1) (sssetfirst nil ss2) ) ) ) ) ) ) (command "_.erase") (setvar "CMDECHO" 1) (princ "\n*Cercle coupé aux points obligés* by me!!\n") (princ) )
  7. Pour le "Fun" j'ai rajouté le choix de la solution qu'on veut retenir. Et puis ça peut donner des idées pour d'autre fonction!. (defun c:CD2P ( / p1 p2 rad ss1 ss2 s_osm key) (initget 1) (setq p1 (getpoint "\n1er point obligé: ")) (initget 1) (setq p2 (getpoint p1 "\n2eme point obligé: ")) (initget 3) (while (< (setq rad (getdist p1 "\nDiamètre ?: ")) (distance p1 p2)) (princ " **Incorrect** ") (initget 3)) (setq rad (/ rad 2.0)) (setvar "CMDECHO" 0) (setq s_osm (getvar "OSMODE")) (setvar "OSMODE" 0) (if (zerop (getvar "PICKFIRST")) (setvar "PICKFIRST" 1)) (command "_.arc" p1 "_en" p2 "_radius" rad) (setq ss1 (ssget "_L")) (command "_.arc" p2 "_en" p1 "_radius" (- rad)) (ssadd (entlast) ss1) (command "_.arc" p1 "_en" p2 "_radius" (- rad)) (setq ss2 (ssget "_L")) (command "_.arc" p2 "_en" p1 "_radius" rad) (ssadd (entlast) ss2) (setvar "OSMODE" s_osm) (if (and ss1 ss2 (= 0 (getvar "CMDACTIVE"))) (progn (sssetfirst nil ss2) (princ "\n touche 1 ou 2 pour choisir |Entrée| pour fin.") (while (not (member (setq key (grread)) '((2 13) (2 32)))) (cond ((equal key '(2 49)) (sssetfirst nil ss1) ) ((equal key '(2 50)) (sssetfirst nil ss2) ) ) ) ) ) (setvar "CMDECHO" 1) (princ "\n*Cercles coupés aux intersections * by me!!") (princ) )
  8. Comme j'ai dis une "connerie" avec cercle 3p qui ne marche pas. Je donne ma solution qui réalise les 2 cercles coupés aux intersections (se sont des arc) (defun c:CD2P (/ p1 p2 rad) (initget 1) (setq p1 (getpoint "\n1er point obligé: ")) (initget 1) (setq p2 (getpoint p1 "\n2eme point obligé: ")) (initget 3) (while (< (setq rad (getdist p1 "\nDiamètre ?: ")) (distance p1 p2)) (princ " **Incorrect** ") (initget 3)) (setq rad (/ rad 2.0)) (setvar "cmdecho" 0) (command "_.arc" p1 "_en" p2 "_radius" rad) (command "_.arc" p1 "_en" p2 "_radius" (- rad)) (command "_.arc" p2 "_en" p1 "_radius" rad) (command "_.arc" p2 "_en" p1 "_radius" (- rad)) (setvar "cmdecho" 1) (princ "\n*Cercles coupés aux intersections * by me!!") (princ) )
  9. Salut, Tu peux ruser avec l'option 3P de la commande cercle Tu donne ton 1er point de passage obligé, pour le 2eme point tu donne le diamètre en relatif ex: @0,50 (pour un diamètre de 50 et pour le 3eme point, tu clique sur ton 2eme point de passage obligé.
  10. Pour ceux qui n'aime pas intervenir dans la base de registre. Vous pouvez essayer de déplacer vos barres ancrées dans la zone graphique. Cette manip réagence automatiquement les barres restantes dans la zone restante. Bien sûr comme il y a plusieurs zone d'ancrage, il faut déplacer les barres et des fois les réancrer dans la bonne zone pour que le réagencement ait lieu. Disons en résumé que vous déplacez toutes vos barre (et même votre de barre de commande) dans tous les sens (graphique et ancrage) jusqu'à la réapparition de la vilaine barre qui s"etait cachée. :D
  11. Salut, Pour convertir des spline en polylignes, il y a la routine S2P.lsp de: ;;CADALYST 12/03 AutoLISP Solutions SPLINE-TO-PLINE.LSP ;;© 2003 Tony Hotchkiss pour linéariser cette polyligne je te propose ma routine, si celle ci peut faire l'affaire (elle vaut ce qu'elle vaut) Bon courage! ;) (defun lxperr (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (setq *error* olderr) (princ) ) (defun c:lxpedit ( / olderr jspl nbr n tol ent_nam ent_sel ent_dxf vrtx1 vtrx2 a1 a2 ang lst_a tst_vrtx lst_pt nbs cnt nw count) (setvar "cmdecho" 0) (setq olderr *error* *error* lxperr) (setq jspl (ssget '((-4 . " (-4 . " (0 . "POLYLINE") (-4 . " (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>") (-4 . " (0 . "LWPOLYLINE") (-4 . " (-4 . "&") (70 . 128) (-4 . "NOT>") (-4 . "AND>") (-4 . "OR>")) ) nbr 0 n 0 ) (cond (jspl (setq tol (getangle (strcat "\nAppliquer la linéarisation aux sommets dont l'angle intérieur est > à ?<" (angtos (angtof "179.0" 0)) ">: " ) ) ) (if (not tol) (setq tol (angtof "179.0" 0))) (if (zerop (getvar "WORLDUCS")) (command "_.ucs" "_save" "lxpedit")) (command "_.zoom" "_vmax") (prompt "\nRecherche des sommets concernés en cours ...\\") (repeat (sslength jspl) (setq ent_sel (ssname jspl nbr) ent_nam ent_sel) (setq ent_dxf (entget ent_nam)) (if (not (equal (assoc 210 ent_dxf) '(210 0.0 0.0 1.0))) (command "_.ucs" "_e" ent_nam) (command "_.ucs" "_w") ) (if (eq (cdr (assoc 0 (entget ent_nam))) "POLYLINE") (while (/= (cdr (assoc 0 (setq ent_dxf (entget (entnext ent_nam))))) "SEQEND") (cond ((or (/= (cdr (assoc 70 ent_dxf)) 1) (/= (cdr (assoc 70 ent_dxf)) 8)) (if vrtx1 (progn (setq vrtx2 (cdr (assoc 10 ent_dxf))) (if a1 (setq a2 (angle vrtx1 vrtx2) ang (- a2 a1) a1 (+ a2 pi)) (setq a1 (angle vrtx2 vrtx1)) ) (setq vrtx1 vrtx2) ) (setq vrtx1 (cdr (assoc 10 ent_dxf))) ) (if ang (progn (if (< ang 0.0) (setq ang (abs (+ (* 2 pi) ang)))) (if (> ang pi) (setq ang (abs (rem (- (* 2 pi) ang) pi)))) (setq lst_a (cons ang lst_a)) (setq tst_vrtx (reverse (mapcar '(lambda (x) (> x tol)) lst_a))) ) ) ) ) (setq ent_nam (cdar ent_dxf)) (cond ((eq n 0) (prompt "\rRecherche des sommets concernés en cours ...|") ) ((eq n 1) (prompt "\rRecherche des sommets concernés en cours .../") ) ((eq n 2) (prompt "\rRecherche des sommets concernés en cours ...-") ) ((eq n 3) (prompt "\rRecherche des sommets concernés en cours ...\\") ) ) (setq n (rem (1+ n) 4)) ) ) (if (eq (cdr (assoc 0 (entget ent_nam))) "LWPOLYLINE") (progn (setq ent_nam (entget ent_nam) nbs (cdr (assoc 90 ent_nam)) cnt 0 lst_pt nil ) (while (< cnt nbs) (cond ((/= (cdr (assoc 70 ent_nam)) 1) (if (= (caar ent_nam) 10) (setq lst_pt (cons (cdar ent_nam) lst_pt) cnt (1+ cnt) ) ) (setq ent_nam (cdr ent_nam)) ) ) ) (while (> (length lst_pt) 1) (if a1 (setq a2 (angle (car lst_pt) (cadr lst_pt)) ang (- a2 a1) a1 (+ a2 pi)) (setq a1 (angle (cadr lst_pt) (car lst_pt))) ) (if ang (progn (if (< ang 0.0) (setq ang (abs (+ (* 2 pi) ang)))) (if (> ang pi) (setq ang (abs (rem (- (* 2 pi) ang) pi)))) (setq lst_a (cons ang lst_a)) (setq tst_vrtx (mapcar '(lambda (x) (> x tol)) lst_a)) ) ) (setq lst_pt (cdr lst_pt)) (cond ((eq n 0) (prompt "\rRecherche des sommets concernés en cours ...|") ) ((eq n 1) (prompt "\rRecherche des sommets concernés en cours .../") ) ((eq n 2) (prompt "\rRecherche des sommets concernés en cours ...-") ) ((eq n 3) (prompt "\rRecherche des sommets concernés en cours ...\\") ) ) (setq n (rem (1+ n) 4)) ) ) ) (cond (tst_vrtx (setq count 0) (command "_.pedit" ent_sel "_edit") (while (member T tst_vrtx) (if (nth count tst_vrtx) (progn (command "_straight") (command "_next") (while (nth count tst_vrtx) (command "_next") (setq nw (cdr (member T tst_vrtx))) (repeat (- (length tst_vrtx) (length (member T tst_vrtx))) (setq nw (cons nil nw)) ) (setq tst_vrtx nw) ) (command "_go" "_x" "_edit") (setq count 0) ) (progn (command "_next") (setq count (1+ count)) ) ) ) (command "_x" "_x") ) ) (setq nbr (1+ nbr) vrtx1 nil vtrx2 nil a1 nil a2 nil lst_a nil ang nil) ) (if (tblsearch "UCS" "LXPEDIT") (progn (command "_.ucs" "_restore" "lxpedit") (command "_.ucs" "_delete" "lxpedit") ) ) (command "_.zoom" "_previous") (prompt (strcat "\n" (itoa (sslength jspl)) " entité(s) soumises à la commande. TERMINE !" ) ) ) (T (prompt "\nPas d'entités conformes sélectionnées..!")) ) (setq *error* olderr) (setvar "cmdecho" 1) (prin1) )
  12. Cette routine n'apporte pas grand chose. Je voulais juste monter un emploi un peu particulier des menus contextuesl ("clik droit" pour ceux qui n'ont rien pu observer). Elle peut être utile pour ceux qui font des contructions avec "DECALER" de façon répétitive en employant souvant les mêmes paramètres, par ex: un coup on décale avec 4.5 puis 7.125 puis 10.3337 et de nouveau avec 4.5 (que l'on rappelle avec click droit et qu'on sélectionne dans la liste). Cette liste est parametrée avec 10 éléments (peut être changée), pour cela j'utilise la variable USERI5 (valeur entière) pour stocker le nombre d'élément concaténé dans la variable chaine. Je stocke les paramètre rentrés à l'aide de la variable USERS5 (valeur chaîne caractère) que je concatène au fur et à mesure. Pour m'assurer que le paramètre saisie ne figure 2 fois ou plus dans la chaine de caractères, car il est inutile de stocker plusieur fois le même paramètre, j'utilise la fonction (wcmatch) pour vérifier que cette chaine n'existe pas déjà. L'emploi et similaire au joker de sélection de fichier dans l'explorateur: * = n'importe quel caractère dans la chaine ? = n'importe quel caractère à la position n dans la chaine et d'autre comme # @ . ~ (voir l'aide de wcmatch) NB: l'emploi des variables USER?? aurait put être remplacé par des variables non déclarées en global ou local: (defun C:XX ( / var1 var2 ....)) var1 et var2 déclarées, donc mise à nil à la fin de l'execution (non conservée) (defun C:XX ( / )) aucune variable déclarée, la valeur des variables utilisée sera conservée à la fin de l'execution. Voila pour ceux qui n'aurait pas compris la démarche.
  13. Pour les anciennes versions d'autocad, des lisp avaient été développer pour recréer par exemple la commande "RACCORD" qui stockaient les rayons précédemment saisis dans un MNU pour pouvoir les rappeler à tout moment. L'idée etait bonne mais necessitait l'emploi d'un MNU. (un peu lourd) Je vous propose la même démarche en utilisant les menus contextuels. Le code suivant crée une commande MYOFFSET identique à DECALER mais stoke les valeur dans le menu contextuel (paramétré à 10 valeurs, peut être changé) Vous pouvez envisager la même chose pour la commande RACCORD ou CHAMFREIN. (defun c:myoffset ( / mess_offset key_offset tmp_str ) (if (or (not (wcmatch (getvar "USERS5") "Par/*")) (zerop (strlen (getvar "USERS5")))) (progn (setvar "USERI5" 0) (setvar "USERS5" "Par" )) ) (setq mess_offset (getvar "USERS5")) (initget 6 "Par _Through") (setq key_offset (getdist (strcat "\nSpécifiez la distance de décalage ou [" mess_offset "]<" (if (> (getvar "OFFSETDIST") 0) (rtos (getvar "OFFSETDIST")) "Par" ) ">:" ) ) ) (if (null key_offset) (setq key_offset (getvar "OFFSETDIST"))) (cond ((and (/= key_offset -1.0) (/= key_offset "Through")) (if (or (not (wcmatch (getvar "USERS5") (strcat "*/" (rtos key_offset 2 4) "/*"))) (not (wcmatch (getvar "USERS5") (strcat "*/" (rtos key_offset 2 4) "*"))) ) (progn (setvar "USERS5" (strcat (getvar "USERS5") "/" (rtos key_offset 2 4))) (setvar "USERI5" (1+ (getvar "USERI5"))) (cond ((> (getvar "USERI5") 10) (setvar "USERI5" 10) (setq tmp_str (substr (getvar "USERS5") 5)) (while (/= (substr tmp_str 1 1) "/") (setq tmp_str (substr tmp_str 2)) ) (setvar "USERS5" (strcat "Par" tmp_str)) ) ) ) ) (command "_.offset" key_offset) ) (T (command "_.offset" "_Through") ) ) (prin1) )
  14. Info peut être inutile, mais sous AutoCAD la commande "_PSOUT" (vérifié sous 2002) permet de générer un fichier EPS Dans la boite de dialogue du nom de fichier, penser à aller faire un tour sur le bouton "options" pour configurer correctement la sortie du fichier EPS. (mm, pouce , format papier, zone étendue, zone fenêtre, etc..) Sous photoshop ce fichier sera pixelisé à l'ouverture sous la résolution voulue (72 pour écran, 300 pour jet d'encre ou 600 pour laser par exemple)
  15. (defun c:rotarendu () (if (not (member "acrender.arx" (arx))) (arxload "acrender") ) (c:rfileopt "TIFF" 1280 1024 1.0 C24 nil) (c:rdpref "DEST" "FILE") (command "_rotate" "g" "rotation" "" "0,0,0" "-3") (c:render "001" p1 p2) (command "_rotate" "g" "rotation" "" "0,0,0" "-3") (c:render "002" p1 p2) (command "_rotate" "g" "rotation" "" "0,0,0" "-3") (c:render "003" p1 p2) (command "_rotate" "g" "rotation" "" "0,0,0" "-3") (c:render "004" p1 p2) ) Ca à l'air de fonctionner, sauf que ca me fait du BMP au lieu du TIFF, mais je te laisse chercher. Voir l'aide en ligne de "la documentation du développeur" Référence Autolisp Externally Defined Commands rpref
  16. Salut Boris, Insère ces quelques lignes dans ton lisp et ça devrait aller ;) (if (not (member "acrender.arx" (arx))) (arxload "acrender") ) (c:render)
  17. Désolé mais je trouve tes explications encore pas claires. Ce que je pense avoir compris, c'est que tu te heurte à un problème de sélection d'objet. Dans les macros le symbole pause(\) ne permet qu'une pause, si tu veux sélectionner plusieurs objet, il te faudra autant de pause que d'objet. :casstet: Ce cas est insoluble en macro. Cependant tu peut créer un bouton avec la syntaxe suivante: ^C^C_.pedit;m;\\;o;j;0.0;; Ce bouton te permettra de faire une séléction par fenêtre ou capture et joindra tous cette séléction. (2 pause pour définir ta fenêtre de sélection) En espérant avoir répondu a ton problème.
  18. Si t'es puriste (setq ent_name (fhatch (getpoint "\nPoint Interieur: "))) NB: (fpoly) est identique pour créer un contour.
  19. Salut Le DOC, Essaie de monter ton code comme suit: NB: J'ai changé l'option "Decalage" par "Ecart" car l'opion Decalage (Je ne sais pourquoi posait problème, je devais taper decalage en entier sur la ligne de commande pour que ça fonctionne) :casstet: (initget " Configuration Justification Ecart") (while (eq (type (setq p1 (entsel "\nChoisissez la cloison à moduler ou [Configuration/Justification/Ecart] : "))) 'STR) (cond ((eq p1 "Configuration") (princ p1) ) ((eq p1 "Justification") (princ p1) ) ((eq p1 "Ecart") (princ p1) ) ) (initget " Configuration Justification Ecart") ) (if (and (listp p1) (not (null p1))) (princ (setq p1 (car p1))) (princ "\nSélection vide.")) Bonne continuation ;)
  20. Bonjour, Après 1 semaine de repos, mes neurones retrouvent leur "network". Ce que j'ai pu identifier sur la fonction (acet-str-format), c'est une fonction dévelopée pour les ExpressTools qui est une fonction améliorée pour afficher une chaîne de caractère. Un (princ) évoluée en quelque sorte. Cette fonction je pense (sous réserve) ce trouve dans le dossier des express: soit dans acetutil.fas (qui est un fichier à chargement rapide de lisp en mode compilé) soit dans acetutil.arx. Donc si tu as toujours le dossier Express sur ton PC avec un chemein de recherche sur ce dossier, cela explique pourquoi tu as accés a cette fonction sous 2004. Ce qui n'est peut être pas le cas de tes collègues. Conseil: Revois ton code pour remplacer cet appel par une fonction standard, il sera plus facilement portable d'une machine à l'autre. ;)
  21. Salut le DOC, Je suis supris par ton problème, mais il y a peut être une explication. Je te conseille de regarde l'aide à: >Guide de personalisation >Interfaces de programmation > AutoLISP et Visual LISP >Chargement et execution automatiques de sous-programmes AutoLISP >?acad.mnl -Chargement automatique de fonctions de menu AutoLISP D'ailleurs ce chapitre te renseignera aussi sur startup J'espère que cela t'éclairera sur la procédure. Sur ce, je suis en congé et vous souhaite une bonne Pâques et une bonne semaine à ceux qui triment (il en faut !) ;)
  22. :( Bon je ne suis pas clair. J'ai remarqué une confusion sur la fonction s::startup Cette fonction sert principalement à executer SANS intervention de l'utilisateur, une fonction prédéfinie ET préalablement chargée en mémoire. A l'ouverture d'un dessin existant ou à la création d'un nouveau dessin cette fonction sera executée, cela peut être par exemple une procédure de configuration du dessin, l'insertion d'un cartouche à renseigner, ou donner des informations sur l'environnement du dessin etc... Suivant la fonction définie (par exemple aucun message ou aucune possibilité d'annuler l'action) l'utilisateur ne pourra passer outre cette fonction d'autoexecution. Je déconseille d'ailleurs cette façon de faire, donner à l'utilisateur une possibilité ne de pas executer cette fonction. Donc en résumé STARTUP sert à EXECUTER plutôt qu'a loader un prog. Le (defun -q s::startup permet de cumuler les autoexecutions En effet si vous utilisez d'autres applicatifs "maison" qui utilise le même procédé sans cette option, seule la 1ere fonction startup rencontrée sera executé, les suivante seront avortée avec un message d'erreur, qui explique d'ailleur qu'il faut utiliser (defun -q Est ce plus clair?
  23. Salut à tous, Pour les chargements automatiques il y a plein de solutions. Laquelle est la plus judicieuse? Je ne sais pas. Pour ma part (comme je veux pouvoir facilement porter mes applications d'1 poste à 1 autre), j'utilise un dossier propre ou je réuni tous ce qui m'est nécessaire. Je déclare ce dossier dans les chemin de recherches d'AutoCad Ayant fait un menu, j'utilise le fichier .MNL pour autochargé. Extrait pour exemple: (autoload "decalpl.lsp" '("decalpl")) (autoarxacedload "cal.arx" '("cal")) (load "record.lsp") (if s::startup (setq s::startup (append s::startup '((record)))) (defun-q s::startup () (record)) ) (princ "\nBonusCAD chargé.\n") (princ) Je tiens à souligné a Tramber l'utilisation de (defun -q , cela pour pouvoir cumuler avec d'autre startup; autrement message d'erreur :casstet: (j'ai découvert ca reçemment) Quant au DVB je l'utilise peu. Celui que je me sert je l'ai intégrer comme suis dans mon MNU [_Button("DDraccord", "raccord_16.bmp", "raccord_24.bmp")]^C^C(command "_-vbarun" "raccord.dvb!raccord_vba.raccord") Voilà j'espère avoir été clair :D Bruno
  24. Bonjour, Si ceci peut te rendre service; http://www.securiteroutiere.equipement.gouv.fr/infos-ref/route/signalisation/consultez-la-base-de-donnees-des-signaux-routiers.html Je crois qu'en récupérant l'image et en l'attachant sous autoCad c'est OK :P Je dis ça car je ne l'ai pas encore utilisé. Je dispose pour l'instant d'une biblio en dwg mais celle ci est en diffusion interne limitée au ministère, désolé! :( Bruno
  25. Merci pour vos commentaires. :D J'espère de ne pas avoir démotivé les futurs lispeurs du forum en ayant empiété sur leur exercice. De tout façon cette routine a certainement des failles. Celles que j'ai remarqués sont; le mode arc en mode ORTHO (tangante 0) et/ou le mode ACCROBJ (ext => point départ=point d'arrivée) qui font avorter la routine par un message *incorrect*. Donc a vos claviers pour la corriger et l'améliorer. Le DCL peut être envisagé si de nombreuses options sont ajoutées. Tel qu'elle est je trouve que c'est inutile car le menu contextuel (click droit) et largement suffisant (à mon avis), mais le challenge reste ouvert ;) .
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité