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. Pas tout saisi :( Je te propose de regarder à l'adresse suivante (en anglais) voir si ca rejoint ton problème. http://cadtutorforum.net/forum/viewtopic.php?t=477 Si c'est bien cela, et que tu veux récuper le code, il faudra corriger quelques oublis d'othographe international (underscore) devant les options des commandes utilisées. Correction faite, il à l'air de fonctionner (j'ai fait un test rapide).
  2. bonuscad

    SOLPROFIL

    Une solution est possible, est ce qu'elle va te convenir? Installe une imprimantre HPGL générique. Imprime avec cette imprimante dans un fichier PLT puis à l'aide du lisp suivant (récupéreé sur le net) récupère le résultat du tracage dans un dwg. NB: Ce procédé peut servir aussi pour mettre à plat (Z=0) des entités 3D récalcitrantes. ;HPGIN.LSP Procedure to convert HPGL to AutoCAD commands (defun C:HPGIN (/ hpgitem hpgistr hpgcha hpgchi hpgfile hpgpen hpgprev hpgx0 hpgx0s hpgY0 hpgY0s hpgx1 hpgx1s hpgY1 hpgY1s hpgscale hpgxoffs hpgYoffs hpgxstr hpgystr hpgtest hpgcomma hpgp0s hpgp1s ) (setq oldecho (getvar "CMDECHO")) ; Save command echo status (setvar "CMDECHO" 0) ; Turn off command echo ;Get the HPGL file name from the user ;(setq hpgname (getstring T "What is the HPGL file name? ")) ;(princ " HPGL file -> ") ;(princ hpgname) (setq hpgname (getfiled "Sélectionner un fichier HPGL en format ASCII" "/dao/" "plt" 12)) (setq hpgfile (open hpgname "r")) ; Check for file error (if (= hpgfile nil) (princ " ... ne peut ouvrir le fichier! \n") ; Quit if open fails ; else (progn (princ " ... fichier ouvert! \n") ; Initialize/define variables (setq hpgitem 0) ; Clear item status (setq hpgistr "") ; Clear item string (setq hpgcha "") ; Clear first char (setq hpgchi 0) ; Read Character (integer) (setq hpgpen 0) ; Set Pen Up (Pen Down = 1) (setq hpgprev 0) ; Previous Pen Status (setq hpgx0 0.0 hpgy0 0.0) ; Default x0,Y0 (line start) (setq hpgx0s "" hpgy0s "") ; Default x0,Y0 strings (setq hpgx1 0.0 hpgy1 0.0) ; Default x1,Y1 (line end) (setq hpgx1s "" hpgy1s "") ; Default x1,Y1 strings (setq hpgscale 0.001) ; scale factor (setq hpgxoffs 0.0 hpgYoffs 0.0) ; x,y offsets ; Read Each char in the file (while (setq hpgchi (read-char hpgfile)) (progn ; Convert integer read to ascii char (setq hpgcha (chr hpgchi)) ; check to see if we are between HPGL commands (if (or (< hpgchi 32) (= hpgcha ";")) (progn (setq hpgitem 1) ; We are between commands now ) ; else We are part of an Item and not between commands (progn ; Check to see if we just finished a reading a command (if (= hpgitem 1) (progn ; Yes, we have a command so let's do it! ; Parse Commands Section ; Force the command item into UPPER CASE (setq hpgistr (strcase hpgistr)) ; Use this print command if you want to see the HPGL Item for debug ; (princ hpgistr) ; (princ "\n") ; Check for HPGL Select Pen (if (= (substr hpgistr 1 2) "SP") (progn ; Make a layer for each pen with color=pen color (if (> (strlen hpgistr) 2) (progn ; (setvar "CMDECHO" 1) (command "_.Layer" "_make" (strcat "pen" (substr hpgistr 3 1)) "_color" (substr hpgistr 3 1) "" "") ; (setvar "CMDECHO" 0) ) ) ) ) ; end Select Pen Check ; Check for HPGL Pen Commands, first save previous pen status (setq hpgprev hpgpen) ; Check for HPGL Pen Up (if (= (substr hpgistr 1 2) "PU") (progn (setq hpgpen 0) ; set pen up status = 0 ) ) ; end of Pen Up ; Check for HPGL Pen Down (if (= (substr hpgistr 1 2) "PD") (progn (setq hpgpen 1) ; set pen down status = 1 ) ) ; end of Pen Down ; Check for coordinate in command by looking for a comma(,) (setq hpgtest 0) ; initial incremental test position (setq hpgcomma 0) ; initial comma position (setq hpgxstr "" hpgystr "") ; initialize coordinates ; Do for each char at test position in item string (while (< hpgtest (strlen hpgistr)) (progn (setq hpgtest (+ hpgtest 1)) ; next test position (if (= (substr hpgistr hpgtest 1) ",") ; If we find a comma .. (setq hpgcomma hpgtest) ; record the position ) ; end if comma found (if (= 0 hpgcomma) ; if no comma yet ... (progn ; x coordinate (if (> hpgtest 2) ; Skip first 2 letters (progn ; Record x coordinate (setq hpgxstr (strcat hpgxstr (substr hpgistr hpgtest 1))) ) ) ; end if (hpgtest > 2) ) ; else (progn ; if comma ... (if (< hpgtest (strlen hpgistr)) ; Y coordinate (progn ; Skip comma by adding 1 to position (setq hpgystr (strcat hpgystr (substr hpgistr (+ 1 hpgtest) 1))) ) ) ; end if (hpgtest < length of item) ) ) ; end if hpgcomma ) ) ; end of coordinate check while ; Check to see if the coordinates from the above comma test are good (if (> hpgcomma 2) (progn ; we have a good coordinate! ; Multiply each coordinate by hpgscale and add offset (if (= 0 hpgpen) (progn ; The Pen is UP, use the ending coordinates (setq hpgx1 (+ hpgxoffs (* hpgscale (atof hpgxstr)))) (setq hpgY1 (+ hpgYoffs (* hpgscale (atof hpgystr)))) ) ; else The Pen is DOWN (progn ; shift old ending coordinates to start (setq hpgx0 hpgx1) (setq hpgY0 hpgY1) ; use ending coordinates (setq hpgx1 (+ hpgxoffs (* hpgscale (atof hpgxstr)))) (setq hpgY1 (+ hpgYoffs (* hpgscale (atof hpgystr)))) ; If the Pen was previously DOWN then ... (if (= hpgprev 1) (progn ; Do the AutoCAD LINE command! ; Convert coordinate values to coordinate strings (setq hpgx0s (rtos hpgx0 1 8)) (setq hpgY0s (rtos hpgY0 1 8)) (setq hpgp0s (strcat (strcat hpgx0s ",") hpgY0s)) (setq hpgx1s (rtos hpgx1 1 8)) (setq hpgY1s (rtos hpgY1 1 8)) (setq hpgp1s (strcat (strcat hpgx1s ",") hpgY1s)) ; (setvar "CMDECHO" 1) (command "_.Line" hpgp0s hpgp1s "") ; (setvar "CMDECHO" 0) ) ) ; end if hpgprev =1 Pen was DOWN ) ) ; end if hpgpen Up or Down ) ) ; end if comma and good coordinate ; End of Parse Commands Section ; Go on with the rest of the program ; Clear Item status and Item string (setq hpgitem 0) (setq hpgistr "") ) ) ; end of command do it ; Here, we have either done and cleared a command or ; we are still building a command from file read chars. (setq hpgistr (strcat hpgistr hpgcha)) ) ; end of inside an HPGL item ) ; end if hpgchi = control char ) ) ; end while file read loop ; Clean up (close hpgfile) ) ; end of else (file opened) ) ; end of if hpgfile ; Restore environment changes (setvar "CMDECHO" oldecho) (princ) ) ; end of C:hpgin() program
  3. bonuscad

    SOLPROFIL

    Une solution est possible, est ce qu'elle va te convenir? Installe une imprimantre HPGL générique. Imprime avec cette imprimante dans un fichier PLT puis à l'aide du lisp suivant (récupéreé sur le net) récupère le résultat du tracage dans un dwg. NB: Ce procédé peut servir aussi pour mettre à plat (Z=0) des entités 3D récalcitrantes. ;HPGIN.LSP Procedure to convert HPGL to AutoCAD commands (defun C:HPGIN (/ hpgitem hpgistr hpgcha hpgchi hpgfile hpgpen hpgprev hpgx0 hpgx0s hpgY0 hpgY0s hpgx1 hpgx1s hpgY1 hpgY1s hpgscale hpgxoffs hpgYoffs hpgxstr hpgystr hpgtest hpgcomma hpgp0s hpgp1s ) (setq oldecho (getvar "CMDECHO")) ; Save command echo status (setvar "CMDECHO" 0) ; Turn off command echo ;Get the HPGL file name from the user ;(setq hpgname (getstring T "What is the HPGL file name? ")) ;(princ " HPGL file -> ") ;(princ hpgname) (setq hpgname (getfiled "Sélectionner un fichier HPGL en format ASCII" "/dao/" "plt" 12)) (setq hpgfile (open hpgname "r")) ; Check for file error (if (= hpgfile nil) (princ " ... ne peut ouvrir le fichier! \n") ; Quit if open fails ; else (progn (princ " ... fichier ouvert! \n") ; Initialize/define variables (setq hpgitem 0) ; Clear item status (setq hpgistr "") ; Clear item string (setq hpgcha "") ; Clear first char (setq hpgchi 0) ; Read Character (integer) (setq hpgpen 0) ; Set Pen Up (Pen Down = 1) (setq hpgprev 0) ; Previous Pen Status (setq hpgx0 0.0 hpgy0 0.0) ; Default x0,Y0 (line start) (setq hpgx0s "" hpgy0s "") ; Default x0,Y0 strings (setq hpgx1 0.0 hpgy1 0.0) ; Default x1,Y1 (line end) (setq hpgx1s "" hpgy1s "") ; Default x1,Y1 strings (setq hpgscale 0.001) ; scale factor (setq hpgxoffs 0.0 hpgYoffs 0.0) ; x,y offsets ; Read Each char in the file (while (setq hpgchi (read-char hpgfile)) (progn ; Convert integer read to ascii char (setq hpgcha (chr hpgchi)) ; check to see if we are between HPGL commands (if (or (< hpgchi 32) (= hpgcha ";")) (progn (setq hpgitem 1) ; We are between commands now ) ; else We are part of an Item and not between commands (progn ; Check to see if we just finished a reading a command (if (= hpgitem 1) (progn ; Yes, we have a command so let's do it! ; Parse Commands Section ; Force the command item into UPPER CASE (setq hpgistr (strcase hpgistr)) ; Use this print command if you want to see the HPGL Item for debug ; (princ hpgistr) ; (princ "\n") ; Check for HPGL Select Pen (if (= (substr hpgistr 1 2) "SP") (progn ; Make a layer for each pen with color=pen color (if (> (strlen hpgistr) 2) (progn ; (setvar "CMDECHO" 1) (command "_.Layer" "_make" (strcat "pen" (substr hpgistr 3 1)) "_color" (substr hpgistr 3 1) "" "") ; (setvar "CMDECHO" 0) ) ) ) ) ; end Select Pen Check ; Check for HPGL Pen Commands, first save previous pen status (setq hpgprev hpgpen) ; Check for HPGL Pen Up (if (= (substr hpgistr 1 2) "PU") (progn (setq hpgpen 0) ; set pen up status = 0 ) ) ; end of Pen Up ; Check for HPGL Pen Down (if (= (substr hpgistr 1 2) "PD") (progn (setq hpgpen 1) ; set pen down status = 1 ) ) ; end of Pen Down ; Check for coordinate in command by looking for a comma(,) (setq hpgtest 0) ; initial incremental test position (setq hpgcomma 0) ; initial comma position (setq hpgxstr "" hpgystr "") ; initialize coordinates ; Do for each char at test position in item string (while (< hpgtest (strlen hpgistr)) (progn (setq hpgtest (+ hpgtest 1)) ; next test position (if (= (substr hpgistr hpgtest 1) ",") ; If we find a comma .. (setq hpgcomma hpgtest) ; record the position ) ; end if comma found (if (= 0 hpgcomma) ; if no comma yet ... (progn ; x coordinate (if (> hpgtest 2) ; Skip first 2 letters (progn ; Record x coordinate (setq hpgxstr (strcat hpgxstr (substr hpgistr hpgtest 1))) ) ) ; end if (hpgtest > 2) ) ; else (progn ; if comma ... (if (< hpgtest (strlen hpgistr)) ; Y coordinate (progn ; Skip comma by adding 1 to position (setq hpgystr (strcat hpgystr (substr hpgistr (+ 1 hpgtest) 1))) ) ) ; end if (hpgtest < length of item) ) ) ; end if hpgcomma ) ) ; end of coordinate check while ; Check to see if the coordinates from the above comma test are good (if (> hpgcomma 2) (progn ; we have a good coordinate! ; Multiply each coordinate by hpgscale and add offset (if (= 0 hpgpen) (progn ; The Pen is UP, use the ending coordinates (setq hpgx1 (+ hpgxoffs (* hpgscale (atof hpgxstr)))) (setq hpgY1 (+ hpgYoffs (* hpgscale (atof hpgystr)))) ) ; else The Pen is DOWN (progn ; shift old ending coordinates to start (setq hpgx0 hpgx1) (setq hpgY0 hpgY1) ; use ending coordinates (setq hpgx1 (+ hpgxoffs (* hpgscale (atof hpgxstr)))) (setq hpgY1 (+ hpgYoffs (* hpgscale (atof hpgystr)))) ; If the Pen was previously DOWN then ... (if (= hpgprev 1) (progn ; Do the AutoCAD LINE command! ; Convert coordinate values to coordinate strings (setq hpgx0s (rtos hpgx0 1 8)) (setq hpgY0s (rtos hpgY0 1 8)) (setq hpgp0s (strcat (strcat hpgx0s ",") hpgY0s)) (setq hpgx1s (rtos hpgx1 1 8)) (setq hpgY1s (rtos hpgY1 1 8)) (setq hpgp1s (strcat (strcat hpgx1s ",") hpgY1s)) ; (setvar "CMDECHO" 1) (command "_.Line" hpgp0s hpgp1s "") ; (setvar "CMDECHO" 0) ) ) ; end if hpgprev =1 Pen was DOWN ) ) ; end if hpgpen Up or Down ) ) ; end if comma and good coordinate ; End of Parse Commands Section ; Go on with the rest of the program ; Clear Item status and Item string (setq hpgitem 0) (setq hpgistr "") ) ) ; end of command do it ; Here, we have either done and cleared a command or ; we are still building a command from file read chars. (setq hpgistr (strcat hpgistr hpgcha)) ) ; end of inside an HPGL item ) ; end if hpgchi = control char ) ) ; end while file read loop ; Clean up (close hpgfile) ) ; end of else (file opened) ) ; end of if hpgfile ; Restore environment changes (setvar "CMDECHO" oldecho) (princ) ) ; end of C:hpgin() program
  4. J'ai déjà utilisé "SAUVEPS" ("_PSOUT") et le résultat était execellent! Dans la boite de dialogue "Créer un fichier PostScript", penser à aller faire un tour dans "Outils" puis "Options" pour bien paramètrer la sortie. Dans Photoshop tu choisi la résolution de la pixelisation de l'image lors de l'ouverture d'un fichier EPS. (Tu peux façilement obtenir un fichier énorme de plusieurs Meg (600dpi), tant la résolution est excellente) NB Le fichier EPS généré par AutoCAD est, par contre tout petit, facile a transmettre à un atelier de PAO (imprimeur etc..).
  5. bonuscad

    Cotation type plan topo

    Salut Va voir le sujet suivant: http://www.cadxp.com/sujetXForum-2792.htm ATTENTION: la routine BORNE fera la cotation XY obligatoirement dans le SCG
  6. bonuscad

    Select Lisp (help)

    Voilà trés rapidement (defun c:ccb ( / selec nbel ent pt) (setq selec (ssget "X" '((2 . "BINC")))) (if selec (progn (setq nbel (sslength selec) i 0) (repeat nbel (setq ent (entget (ssname selec i))) (setq pt (cdr (assoc 10 ent))) (command "_.circle" pt "_diameter" "2.0") (setq i (1+ i)) ) ) (alert "AUCUNE BORNE D'INCENDIE SÉLECTIONNÉ") ) (princ) ) Y A PU KA ;)
  7. Merci de m'avoir rafraichi la mémoire! :D Comme dirait Dutronc J'y pense puis j'oublie, c'est la, c'est la vie!
  8. Bien saisi l'état d'un attdef par le code 70. Mais le problème n'était pas là, je voulais connaitre l'état des drapeaux AVANT de lancer la commande ATTDEF et de définir de nouvaux attributs. Ces drapeaux prennent la dernière valeur qui leur ont été attribués lors des précédentes utilisations dans la même session. Trouver le dernier attribut qui a été créer pour récupérer l'état des drapeaux n'est pas évident et pas fiable (si cela a été fait sous une autre session)
  9. En effet J'ai refait un copier coller et cela ne vas pas. Un espace supplémentaire s'est glissé entre "45" et ";" Supprime le et ça devrait aller ;)
  10. Je reviens sur le sujet, car je viens d'être confronté à un problème que seul (entmake) à pu résoudre. J'ai voulu faire un code avec la commande ATTDEF pour définir des attributs. Le problème était qu'il m'était impossible de savoir comment était positionnés les drapeaux d'attribut (constant, invisible etc...) car se sont des bascules. Je n'ai trouvé aucun moyen de connaître leur état au lancement de la commande (si quelqu'un à la solution, ça m'interesse quand même ;) ) Par ENTMAKE ce problème ne s'est pas posé. Je vous donne le code en exemple: il sert à positionner des bornes (bornage de terrain) et de les repérer en XYZ sur un calque inactif et verrouillé. Comme ca on peut les basculer vers excel sur un tableau avec un extracteur d'attribut. (defun c:borne (/ pto x y z) (cond ((eq (getvar "cvport") 1) (princ "\n** Commande autorisée uniquement dans l'espace objet." ) ) (T (if (not (tblsearch "LAYER" "borne_attributs")) (entmake '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "borne_attributs") (70 . 4) (62 . -3) (6 . "Continuous") (290 . 1) (370 . -3) ) ) ) (if (not (tblsearch "LAYER" "borne")) (entmake '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "borne") (70 . 4) (62 . 4) (6 . "Continuous") (290 . 1) (370 . -3) ) ) ) (if (not (tblsearch "STYLE" "$borne")) (entmake '((0 . "STYLE") (5 . "40") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "$borne") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "monotxt.shx") (4 . "") ) ) ) (setvar "textstyle" "$borne") (if (not (tblsearch "BLOCK" "$borne")) (progn (entmake '((0 . "BLOCK") (2 . "$borne") (70 . 2) (10 0.0 0.0 0.0)) ) (entmake '((0 . "ATTDEF") (67 . 0) (8 . "borne_attributs") (62 . 1) (10 1.0 0.0 0.0) (40 . 1.0) (1 . "0") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (210 0.0 0.0 1.0) (3 . "Numéro de la borne: ") (2 . "NO") (70 . 0) ) ) (entmake '((0 . "ATTDEF") (67 . 0) (8 . "borne_attributs") (10 1.0 -1.66667 0.0) (40 . 1.0) (1 . "X=0.0") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (210 0.0 0.0 1.0) (3 . "Entrer le X du point: ") (2 . "ID-X") (70 . 0) ) ) (entmake '((0 . "ATTDEF") (67 . 0) (8 . "borne_attributs") (10 1.0 -3.33333 0.0) (40 . 1.0) (1 . "Y=0.0") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (210 0.0 0.0 1.0) (3 . "Entrer le Y du point: ") (2 . "ID-Y") (70 . 0) ) ) (entmake '((0 . "ATTDEF") (67 . 0) (8 . "borne_attributs") (10 1.0 -5.0 0.0) (40 . 1.0) (1 . "Z=0.0") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (210 0.0 0.0 1.0) (3 . "Entrer le Z du point: ") (2 . "ID-Z") (70 . 0) ) ) (entmake '((0 . "CIRCLE") (67 . 0) (8 . "borne") (10 0.0 0.0 0.0) (40 . 0.25) (210 0.0 0.0 1.0) ) ) (entmake '((0 . "CIRCLE") (67 . 0) (8 . "borne") (10 0.0 0.0 0.0) (40 . 0.40) (210 0.0 0.0 1.0) ) ) (entmake '((0 . "ENDBLK"))) ) ) (if (not nob) (setq nob 1) ) (initget 8) (while (setq pto (getpoint "\nPoint de la borne: ")) (initget 6) (setq nb (getint (strcat "\nNo de la borne<" (itoa nob) ">: "))) (if (not nb) (setq nb nob) ) (setq pto (trans pto 1 0) x (car pto) y (cadr pto) z (caddr pto) ) (entmake (append '((0 . "INSERT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "borne") (100 . "AcDbBlockReference") (66 . 1) (2 . "$borne") (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) ) (list (cons 10 pto)) ) ) (entmake (append '((0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "borne_attributs") (62 . 1) (100 . "AcDbText") (40 . 1.0) (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "NO") (70 . 0) (73 . 0) (74 . 0) ) (list (cons 1 (strcat "Borne N°:" (itoa nb)))) (list (cons 10 (list (+ (car pto) 1.0) (cadr pto)))) ) ) (entmake (append '((0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "borne_attributs") (100 . "AcDbText") (40 . 1.0) (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "ID-X") (70 . 0) (73 . 0) (74 . 0) ) (list (cons 1 (strcat "X=" (rtos x 2 4)))) (list (cons 10 (list (+ (car pto) 1.0) (+ (cadr pto) -1.66667))) ) ) ) (entmake (append '((0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "borne_attributs") (100 . "AcDbText") (40 . 1.0) (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "ID-Y") (70 . 0) (73 . 0) (74 . 0) ) (list (cons 1 (strcat "Y=" (rtos y 2 4)))) (list (cons 10 (list (+ (car pto) 1.0) (+ (cadr pto) -3.33333))) ) ) ) (entmake (append '((0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "borne_attributs") (100 . "AcDbText") (40 . 1.0) (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "$borne") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "ID-Z") (70 . 0) (73 . 0) (74 . 0) ) (list (cons 1 (strcat "Z=" (rtos z 2 4)))) (list (cons 10 (list (+ (car pto) 1.0) (+ (cadr pto) -5.0))) ) ) ) (entmake '((0 . "SEQEND"))) (setq nob (1+ nob)) (initget 8) ) ) ) (princ) )
  11. J'espère que je ne fais pas erreur mais ne s'agit-il pas de la commande "GROUPE" rappel: certaines commandes peuvent être appelées en ligne de commande en la faisant précèder d'un - (tiret/moins) donc pour créert un groupe: -groupe créer et le dissocier: -groupe décomposer et en language international _.-group _create et _.-group _explode faire des boutons avec les macros associés te feraient le travail sans passer par les boites de dialogue. Bonne personalisation ;)
  12. Je soutiens Bruno dans son argumentation. Malgré que ENTMAKE donne un code plus long que l'utilisation de COMMAND. Il y a moins de variables à surveiller, à changer et à restaurer. Entmake se charge même de créer un calque si celui ci n'existe pas! Par contre la manipulation d'objets complexes comme des blocs est plus compliqué (il faut respecter l'imbrication) Le code, à mon avis, est plus fiable et fait plus "professionel" ;)
  13. bonuscad

    mon premier lisp

    Salut Bonux Tu vas crouler sous les exemples. En voici un autre que j'ai commenté. Il permet de tourner tous les textes d'une valeur donnée. ex: 1 plan géometre dont les écritures sont orientés par rapport au nord (cas classique), Si on veut retourner la planche, les écritures seront à l'envers, à l'aide de la routine en répondant "TOUT" à choix des objets et en donnant un angle de 180 (si unités en degré) ou 200 (si en grade, ATTENTION à angbase), tous les texte seront pivotés de 2PI sur eux mêmes (defun c:pivotext (/ jsel angplus nboucl txtmod nbelem ent rot nrot) (prompt "\nSélectionner les textes à faire pivoter sur leur point d'insertion: ") ;créer un jeu de séléction en excluant les entités qui ne sont pas des textes (setq jsel (ssget '((-4 . "")))) ;le jeu de séléction dot contenir au moins un élément TEXT ou MTEXT valide (if jsel (progn ;alors on demande l'angle que l'on veut rajouter à la rotation initial du texte. ;on met le compteur à zéro pour le nombre de textes modifiés. ;le nombre d'élément contenu dans le jeu de sélection (initget 1) (setq angplus (getorient "\nAngle à rajouter pour faire pivoter les textes selectionnés: ") nbrtxtmod 0 nbrelemjs (sslength jsel) ) ;on execute la boucle jusqu'à ce que le nombre de texte modifiés ;soit inférieur au nombre d'élément du jeu de sélection (while (< nbrtxtmod nbrelemjs) ;on récupère la définition de l'entité n ;on extrait la rotation existante ;on ajoute l'angle saisi en gardant une valeur comprise entre 0 et 2PI ;on replace la nouvelle valeur dans la définition d'entité (setq ent (entget (ssname jsel nbrtxtmod)) rot (cdr(assoc 50 ent)) nrot (rem (+ rot angplus) (* 2 pi)) ent (subst (cons 50 nrot) (assoc 50 ent) ent) ) ;on met à jour la base de donnée interne ;on incrémente le compteur des textes modifiés (entmod ent) (setq nbrtxtmod (1+ nbrtxtmod)) ); fin while ;on affiche le résultat de l'action (terpri) (princ nbrtxtmod) (princ " ligne(s) de texte a (ont) tourné de ") (princ (angtos angplus)) ) )fin if (princ);silence ) Bon apprentissage
  14. bonuscad

    Renommer

    SOUS 2002[\color] effectivement *CTR par *DIR ne fonctionne pas MAIS (si ça peut te rendre service) ?????????CRT par ?????????DIR fonctionne pas très pratique :casstet: J'ai essayé par la ligne de commande -RENOMMER mais aucune issue, ça n'accepte pas les caractères de remplacement
  15. En diesel pas façile! :( J'ai essayé cette macro et effectivement les anti-slash pose problème d'interprétation. Cependant elle fonctionne mais tu es obligé de valider les anti-slash et les espaces pour obtenir le retour du texte en plusieurs lignes (ouf! grace a mtext). Je reconnais que c'est "boiteux" mais a défaut de mieux! ^C^C_id;\_.-mtext;@;_h;$M=$(*,.4,$(getvar,ltscale));@25<-45;$(getvar,dwgprefix)$(getvar,dwgname)
  16. bonuscad

    Renommer

    Salut, Tu dois mal t'y prendre. Sous 2002 j'ai fait le test et ça fonctionne. RENOMMER Click+CTRL sur les calques (Calque1,calque2,calque3) Dans ancien nom il met *varie* Dans nouveau nom je met TEST_* Je clique sur le bouton Nouveau nom et mes calques sont renommer :P
  17. :D Moi j'ai bien les coups de gueule, il peut arriver à tout le monde d'avoir un sentiment d'injustice et on s'énerve en disant parfois des choses déplacées qui avec le recul nous ferons sourire. Même si cela ne sert pas à grand chose ça soulève parfois des problème réels. Je lui souhaite quand même bonne chance
  18. bonuscad

    Afficher une image de fond

    Bien que je n'ai que peu pratiqué ce genre d'exercice, donc je ne sais si cette méthode est vraiment la meilleure. A cette ocassion j'ai reperé du mieux possible l'emplacement de la cible et de la camera de la prise de vue en XYZ dans le scg (j'avais un fond de plan dwg calé) puis comme le dit Tramber, à l'aide de la commande VUEDYN (_DVIEW) j'ai recontitué va vue virtuelle de la prise de vue. Ayant construit mon projet en volumique, j'ai attacher des matéraux aux solides puis effectué un RENDU de la scène en attachant ma prise de vue pour l'arrière plan. Il est vrai que le paramètrage peut sembler ardu (focale de l'apparreil, position de la caméra, de la cible,l'éclairage) mais si ce paramétrage est effectué le mieux possible il n'y aura pratiquement aucune retouche à faire sur l'image du rendu. L'avantage c'est que l'on peut effectuer pour le même projet volumique plusieurs vue de différents endroits sans tout reconstruire mais la démarche est assez longue et la maitrise 3D pas évidente. Il faut que "le jeu en vale la chandelle" ;)
  19. Salut le DOC, J'ai essayer de comprendre ton problème et effectivement je confirme le post de Patrick Il ne te reste plus qu'a trouver une autre soution. Peut être écrire tes résultats dans un fichier via (write-line) puis à la fin l'ouvrir via la commande shell avec un éditeur ASCII . C'est pas terrible mais si la boite de dialogue via (alert) ne te convient pas!!! Pourtant cela me semblerait la solution la plus simple.
  20. Heu c'est vrai ça ne coule pas de source pour tout le monde. :( La fonction ((LAMBDA permet de définir une fonction anonyme qui ne sera executé qu'une seule fois puis vidée de la mémoire. A l'époque ou le lisp ne travaillait que dans les 1024K de la mémoire, c'était utile pour se garder de la mémoire dispo. Ce n'est plus le cas maintenant, mais malgré tout pourquoi surcharger inutilement la mémoire? En résumé tu peux donc faire le copier-coller dans un fichier que tu sauvegardera sous le nom qu'il te plait avec une extension LSP dans un dossier de recherche (de préférence). puis au message commande d'Autocad taper (load "nom fichier.lsp"). Alors la procédure s'executera, pour la rappeler il faudra à nouveau la recharger. Ceci peut être affecté à un bouton pour la rechargé a chaque demande. Si tu veux en faire une commande permanente il faut remplacer ((LAMBDA par (defun C:ma procedure NB: ne pas oublier de suprimmer une paranthèse fermante en fin de fichier: lambda en possède 2 et defun 1 Est ce clair?
  21. Voici une petite routine que personnellement j'utilise quand le nombre de calques est impressionnant et que j'ai du mal à identifier les calques qui m'interessent. Elle fonctionne par pointage sur une ou des entités dont on veut geler le calque dans la fenêtre en cours. ((LAMBDA (/ e plan lplan lsplan drap e_bis plan_bis) (cond ((= (getvar "tilemode") 0) (setq drap (getvar "expert")) (setvar "expert" 0) (while (setq e (entsel "\nPointez une entite: ")) (setq e_bis (car (nentselp (cadr e)))) (setq e (car e)) (setq plan (cdr(assoc 8 (entget e)))) (setq plan_bis (cdr (assoc 8 (entget e_bis)))) (if (/= plan plan_bis) (progn (prompt "\nL'entité fait partie d'un bloc ou d'un xref.") (initget "Insertion Entite") (if (eq (getkword "\nAdopter le plan d'insertion ou de l'entité - [insertion/Entite]: ") "Entite") (setq plan plan_bis) (setq plan plan) ) ) ) (setq lplan (cons plan lplan)) (prompt (strcat " " plan " sera gele dans la fenêtre courante")) ) (if lplan (progn (setq lsplan (apply 'strcat (mapcar '(lambda (x)(strcat x ",")) lplan) ) ) (command "._vplayer" "_freeze" lsplan "" "") ) ) (setvar "expert" drap) ) (T (prompt "\nIncorrect, TILEMODE doit être à 0.")) ) (princ) ))
  22. Ribbit, Je t'invite à découvrir la commande FCALQUE (ou _.VPLAYER). C'est une commande qu'on a tendance à "zapper" vue qu'on retrouve une partie de ses fonctionnalités dans la commande CALQUE. Je pense que l'option "Visfendéf" répond à ta question (voir l'aide) ;) Ciao
  23. bonuscad

    lissage de polyligne 3D

    Bonjour, Il n'y a pas d'option de lissage pour une 3Dpoly, mais par contre tu peut la "Splinée" par la commande "PEDIT". Un liste sur cette 3Dpoly splinée te retournera les infos sur les sommets (point de contrôle de la spline) et aussi sur les sommets (inséré par le lissage spline). Cela ne convient-il pas?
  24. Salut, La commande "Couper au point" n'est quand fait un script de la commande "Coupure" avec l'option "1er point" et l'option "@" pour le second point de coupure. Si cette macro est lancée par le bouton associé, tout ce passe bien. Mais si la commande est rappelée par "ENTREE" ou "BARRE D'ESPACE", c'est la commande coupure standard qui est rappelée (sans l'option 1er et @). Par contre (astuce) :P si la commande est rappelée par le menu contextuel (1ere ligne du menu), celle ci sera bien relancée avec les options adéquates. Autrement il faut relancer la commande par le bouton approprié. :(
  25. Hé Hé, je vais devancer Tramber ;) Fais toi un bouton pour enchainer un script ^C^C_.ucs _world _.find _.ucs _previous
×
×
  • 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é