-
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
-
lisp pour accrocher extremites à une grille
bonuscad a répondu à un(e) sujet de FRAXA dans AutoCAD 2005
Il y avait ce sujet Mais voici le même code qui s'appuie sur la valeur de la variable SNAPUNIT, Pour les blocs, j'ai l'impression que les attributs ne suivent pas, donc le code est à approfondir (defun round_number (xr n / ) (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n)) ) (defun c:regular_draw ( / js n_count 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 (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 p) (round_number x (/ 1 p))) (cdar dxf_lst) (getvar "SNAPUNIT"))) 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 p) (round_number x (/ 1 p))) (cdr (assoc 10 dxf_ent)) (append (getvar "SNAPUNIT") (list (car (getvar "SNAPUNIT")))))) (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 p) (round_number x (/ 1 p))) (cdr n) (append (getvar "SNAPUNIT") (list (car (getvar "SNAPUNIT")))))) (assoc (car n) dxf_ent) dxf_ent)) (setq dxf_ent (subst (cons (car n) (round_number (cdr n) (/ 1 (car (getvar "SNAPUNIT"))))) (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 "\nAucun objet valide trouvé.")) ) (prin1) ) -
Vous pouvez vous approprier le code sans complexe, je ne vous en voudrais pas, ce n'est pas mon gagne pain. Bien sur si vous me citez, j'en serais flatté, mais pour moi ce n'est pas important. Je ne parles pas simplement à Gilles mais à tout les membres. Si des parties de codes vous semblent utiles , je ne vous empêche pas de les faire évoluer et de les mettre à disposition sur le Net. Ce qui me gênerais le plus, c'est de retrouver une solution payante avec des améliorations mineures. Mais là dessus je n'ai aucun contrôle, et puis de toute façon je ne suis pas procédurier (aucun copyrigth dans mes codes, même pas mon nom). Mais bon je sais que reprendre le code de quelqu'un d'autre et fastidieux (surtout quand il n'est pas commenté comme le mien) donc c'est plutôt un honneur à vous, que du pillage... Donc n'hésitez pas à "pomper" surtout si vous gardez le même esprit de partage. Un esprit "LinuxCAD" ne saurait me déplaire, je lance un appel à la vive et nouvelle matière grise. Il faut savoir passer la main.... ;) Je dis ça par ce que je commence à sentir que je décroche tout doucement, mais je vais quand même continuer à participer dans la mesure de mes moyens. "Les grains de sel" ne peuvent être que bénéfique, ça réhausse le goût :P
-
Forcer affichage ScreenMenu
bonuscad a répondu à un(e) sujet de stephan35 dans Pour aller plus loin en LISP
Un exemple, à adapter suivant la version d'Autocad (setenv "ScreenMenu" "1") (menucmd "S=ACAD.09_DRAW1") mettre "ScreenMenu" à "0" pour désactiver les menus écran. -
Rappel: La variable "SHORTCUTMENU" influe sur le code de retour de (grread) pour un click-droit.
-
Je ne sais pas si (ggread) est vraiment adapté à ce que tu veux faire. Si j'ai bien compris la question, je me tournerais plutôt vers l'usage de (nentselp) Ex: ((lambda (/ pt_sel obj_sel) (initget 8) (while (not (null (setq pt_sel (getpoint "\nChoix de l'objet: ")))) (setq obj_sel (nentselp pt_sel)) (cond (obj_sel (print (entget (car obj_sel))) ) (T (print pt_sel) ) ) (initget 8) ) (prin1) )) [Edité le 18/4/2007 par bonuscad]
-
C'est pas sérieux à cette heure-ci, mais détente... à la place de la clope. 48.10m avec le modéle "C", un poids de 34 , les élévateurs à 42 et les ailerons stabilisateur actif. Le jet c'est fais un peu fort, plutôt en direction du sol, l'avion à décrit une ondulation. Bon j'arrête :P
-
Je veux bien te croire cher Patrick_35, tu as plus d'expérience que moi en cette matière. :) Moi la procédure que j'imaginais sommairement est plutôt celle-ci: Vu que la variable CMDNAMES change dès lors que la commande est lancé, je pense qu'il est trop tard pour changer le calque. Même si on change le calque, je penses que la commande se fera toujours dans le calque précédent. Il vaudrait peut être mieux changer la dernière entité créer des lors que CMDACTIVE est à zéro et la placé dans le calque correspondant suivant la valeur de CMDNAMES pendant l'exécution. C'est possible Grand Chef? :P
-
Je crois après avoir parcouru les infos de ce site, qu'il n'est pas vraiment tenu à jour. En effet pour mon cas les infos ne correspondent pas à la réalité d'aujourd'hui, alors que sur le site proposé par Pieroka cela l'est. Désolé pour ce lien "pourri" :( Donc vu le manque de sérieux, je pense que tu vas attendre longtemps la réponse, autant que Charles (Charles attend) :P
-
En lisant tout ces post, il m'ait venu une idée, mais je ne l'ai pas testé. Quelle est-elle? Utiliser la variable "CMDNAMES" dans un lisp chargé au démarrage, et avec un réacteur. L'idée serait que lorsque celle-ci change, avec le réacteur, le calque change. Je penses que ceci serait possible, mais personnellement je ne maitrise pas assez les réacteur pour concevoir cela. L'avantage serait que cela serait valable par exemple pour: des cotations, du texte, des hachures, des entités de construction tel que Xline ou Ray etc... J'ai l'idée mais pas le code ! :casstet: et je me suis peut être fourvoyé, cela n'est peut être pas possible. [Edité le 17/4/2007 par bonuscad]
-
2 outils que j\'ai dans la tête...
bonuscad a répondu à un(e) sujet de Pieroka dans Suggestions de développements
J'avais tenté une approche de ton souhait dans ce sujet C'était un compromis entre la commande lisp SSX et ton souhait en boite de dialogue. J'utilise en fait les options dans le menu contextuel du click-droit. L'inconvénient: il faut être un familier de la valeur des code DXF. -
Tant mieux, dans ce monde de brute.... J'ai vu sur le net que Nvu était bien apprécié, mais je l'ai pas essayé. J'ai pris Matizha sublime car il permet de monter sa page en ayant un mode visuel de celle-ci, et il est gratuit. Ce mode est bien discriminé par les habitués du langage HTLM, mais pour un débutant c'est un plus. Pour le FTP j'ai utilisé un plug-in de FireFox "FireFTP" Pour l'instant je n'ai pas fait référencer ma page, j'attends que cela soit un peux mieux bati et finaliisé. Et puis c'est surtout le temps qui me manque pour m'investir dans cette démarche. Le tenir à jour me fait un peu peur à la vitesse ou évolue les versions d'AutoCad et le Net en général, ne sera t-il pas désué avant que je puisse le terminer? Il me faut plus de temps qu'à mes 20ans pour assimiler tout ça. :( Mais promis, je vais essayer de ne pas me décourager afin d'offrir à tous le maximum de mes connaissances. Quand je vois l'évolution de certain intervenants, ça fait plaisir de voir qu'on a pu contribuer à leur apprentissage. Une façon de passer la main.... ;)
-
Je le jure, je ne me suis pas concerté avec gilles... Patrick_35 m'avait suggéré de faire aussi ceci, et voilà je me suis lancé, ma première page web :P Voici le LIEN J'en suis qu'au tout début, j'essayerais de le compléter rapidement. J'ai fais très sobre pour l'instant car je suis complètement inexpérimenté :casstet: Pour info, j'ai utilisé matizha sublime pour confectionner ma page, pour un débutant, je l'ai trouvé facile à utiliser pour avoir un résultat rapidement. Si ça intéresse quelqu'un.... ;)
-
Avec le modèle "c" réajusté, 41.4m au troisième essai... Rigolo, j'ai l'impression qu'il ne faut pas spécialement lancer trop fort
-
Un même sujet assez récent dans LT2006. Cela devrait aussi fonctionner avec des splines...
-
Et avec ce site obtiens tu les mêmes infos?
-
jpeg + dwg : problème à l\'impression
bonuscad a répondu à un(e) sujet de masterk007 dans AutoCAD 2006
Bizarre car j'avais eu exactement le même problème avec une 2002 sur un HP 1050C pour des images raster, mais ceci en impression directe sur le traceur (pas de PLT généré) Le problème c'était résolu par une mise à jour du FIRMWARE du traceur. J'avais téléchargé chez HP le micro-logiciel et flashé le traceur par le port parrallèle (obligatoire de raccorder le traceur en direct sur un PC, pas de possibilité de flashé en mode réseau) Je me rappelles plus le numéro de version du firmware qui corrige ce problème. Dans le doute renseigne toi -
polyligne ou hachure en transparence ?
bonuscad a répondu à un(e) sujet de Mallory dans AutoCAD 2005
Peut être une solution simple, mais je ne sais pas si elle te conviendra car elle n'est valable que pour une sortie traceur ET si celui-ci le permet. Régler simplement ton mode d'impression en mode "fusion" et non en mode "surimpression". De cette manière ton stabilo laissera apparaitre le fond d'image. Le seul inconvénient et que cela risque de faire un changement de couleur en mélangeant la couleur du fond et la couleur du stabilo. NB: Tout le tracé sera concerné par ce mode, tu ne peux pas faire des parties en fusion et d'autre en surimpression :( -
La main gauche sur MAJ La main droite sur la souris ET le nez sur le pavé numérique :hallucine:
-
ddb64, J'ai voulu tester ton lisp par curiosité, et malgré l'absence des formes SHX, j'ai quand même pus arriver en bout de procédure. Cela m'a permis de voir que les coordonnées renseignées étaient complètement erronées !!! Pourquoi ? je n'ai pas cherché... Donc je doute que dans l'état actuel, étant incomplet et présentant des dysfonctionnements, ce lisp puisse intéresser quelqu'un. Si tu as besoin d'un tel lisp et que tu ne sache pas corriger ton lisp, je vais donc te suggérer un code ancien mais qui fonctionne encore bien. La mise en page se fait par défaut en multiple de format A4 (mieux pour le pliage), et tu peux écorner un coin pour mettre une page de garde. 4 fichiers seront nécessaires: 1 .lsp, 1 .dcl et 2 .pat qui devront être placés dans un dossier de recherche LE LISP: lambert.lsp (defun lamerr (ch) (cond ((eq ch "Function cancelled") nil) ((eq ch "quit / exit abort") nil) ((eq ch "console break") nil) (T (princ ch)) ) (command "_.undo" "_end") (command "_.u") (if (<= sv_und 3) (command "_.undo" "_control" "_one")) (setq *error* olderr) (redraw) (setvar "cmdecho" 1) (princ) ) (defun tststr (chaine / chaine) (if (wcmatch chaine "*[`?`,```*\\\"<>/=|:]*") (progn (set_tile "error" "Nom de plan incorrect !") (set_tile "pl_lamb" plnw1) ) (progn (setq plnw1 chaine) (set_tile "error" "") ) ) ) (defun tstval (val idx_v / val idx_v) (if (= (type (read val)) 'INT) (progn (if idx_v (progn (setq ech (atoi val)) (setq pas (/ (read val) 10)) (set_tile "c_pas" (itoa pas)) ) (setq pas (atoi val)) ) (set_tile "error" "") ) (progn (set_tile "error" "Valeur entière incorrecte !") (if idx_v (set_tile "c_ech" (itoa ech)) (set_tile "c_pas" (itoa pas)) ) ) ) ) (defun v_chg (index com_t) (if com_t (progn (setq ech (read (nth (atoi index) '("50" "100" "200" "500" "1000" "2000" "2500" "5000" "10000") ) ) ) (setq pas (/ ech 10)) (set_tile "c_ech" (itoa ech)) (set_tile "c_pas" (itoa pas)) (set_tile "lst_pas" index) (mode_tile "lst_pas" 2) ) (progn (setq pas (read (nth (atoi index) '("5" "10" "20" "50" "100" "200" "250" "500" "1000") ) ) ) (set_tile "c_pas" (itoa pas)) ) ) ) (defun getindex (item itemlist / m n) (setq n (length itemlist)) (if (> (setq m (length (member item itemlist))) 0) (- n m) nil ) ) (defun colorname (colnum) (setq cn (abs colnum)) (cond ((= cn 1) "rouge") ((= cn 2) "jaune") ((= cn 3) "vert") ((= cn 4) "cyan") ((= cn 5) "bleu") ((= cn 6) "magenta") ((= cn 7) "blanc") (T (itoa cn)) ) ) (defun makelaylists (/ layname onoff frozth color linetype vpf vpn ss cvpname xdlist vpldata sortlist name templist bit-70) (if (= (setq tilemode (getvar "tilemode")) 0) (progn (setq ss (ssget "_x" (list (cons 0 "VIEWPORT") (cons 69 (getvar "CVPORT")) ) ) ) (setq cvpname (ssname ss 0)) (setq xdlist (assoc -3 (entget cvpname '("acad")))) (setq vpldata (cdadr xdlist)) ) ) (setq sortlist nil) (setq templist (tblnext "LAYER" T)) (while templist (setq name (cdr (assoc 2 templist))) (setq sortlist (cons name sortlist)) (setq templist (tblnext "LAYER")) ) (if (>= (getvar "maxsort") (length sortlist)) (setq sortlist (acad_strlsort sortlist)) (setq sortlist (reverse sortlist)) ) (setq laynmlst sortlist) (setq longlist nil) (setq layname (car sortlist)) (while layname (setq laylist (tblsearch "LAYER" layname)) (setq color (cdr (assoc 62 laylist))) (if (minusp color) (setq onoff ".") (setq onoff "AC") ) (setq color (abs color)) (setq colname (colorname color)) (setq bit-70 (cdr (assoc 70 laylist))) (if (= (logand bit-70 1) 1) (setq frozth "F" fchk laylist) (setq frozth ".") ) (if (= (logand bit-70 2) 2) (setq vpn "N") (setq vpn ".") ) (if (= (logand bit-70 4) 4) (setq lock "L") (setq lock ".") ) (setq linetype (cdr (assoc 6 laylist))) (setq layname (substr layname 1 31)) (if (= tilemode 0) (progn (if (member (cons 1003 layname) vpldata) (setq vpf "C") (setq vpf ".") ) ) (setq vpf ".") ) (setq ltabstr (strcat layname "\t" onoff "\t" frozth "\t" lock "\t" vpf "\t" vpn "\t" colname "\t" linetype)) (setq longlist (append longlist (list ltabstr))) (setq sortlist (cdr sortlist)) (setq layname (car sortlist)) ) ) (defun getlayer (/ old-idx layname on off frozth linetype colname) (if (not (new_dialog "setlayer" dcl_id)) (exit)) (makelaylists) (if (= lay-idx ()) (setq lay-idx (getindex (getvar "clayer") laynmlst)) ) (start_list "list_lay") (mapcar 'add_list longlist) (end_list) (setq old-idx lay-idx) (if (/= lay-idx nil) (laylist_act (itoa lay-idx))) (set_tile "cur_layer" (getvar "clayer")) (action_tile "list_lay" "(laylist_act $value)") (action_tile "edit_lay" "(layedit_act $value)") (action_tile "accept" "(test-ok)") (action_tile "cancel" "(reset-lay)") (if (= (start_dialog) 1) (progn (if (= lay-idx nil) (setq layname "Divers")) (set_tile "t_layer" layname) (if (= lt-idx 0) (set_tile "t_ltype" (bylayer_lt)) ) (if (= ecolor 256) (progn (set_tile "t_color" (bylayer_col)) (col_tile "show_image" cn nil) ) ) layname ) elayer ) ) (defun test-ok ( / errtile) (setq errtile (get_tile "error")) (cond ((= errtile "") (done_dialog 1) (set_tile "pl_lamb" layname) ) ) ) (defun reset-lay () (setq lay-idx old-idx) (done_dialog 0) (set_tile "pl_lamb" plnw1) (setq elayer plnw1) ) (defun laylist_act (index / layinfo color dashdata) (set_tile "error" "") (setq lay-idx (atoi index)) (setq layname (nth lay-idx laynmlst)) (setq layinfo (tblsearch "layer" layname)) (setq color (cdr (assoc 62 layinfo))) (setq color (abs color)) (setq colname (colorname color)) (set_tile "list_lay" (itoa lay-idx)) (set_tile "edit_lay" layname) (mode_tile "list_lay" 2) ) (defun layedit_act (layvalue) (setq layvalue (strcase layvalue)) (if (setq lay-idx (getindex layvalue laynmlst)) (progn (set_tile "error" "") (laylist_act (itoa lay-idx)) ) (progn (set_tile "error" "Nom de Plan Incorrect.") (setq lay-idx old-idx) ) ) ) (defun ecri (ta tb det_or / dptx m1 m2 pd ecr ang_or) (setq dptx (* (fix (/ (- (car lmtb) pas) pas)) pas)) (while (< dptx (car lmth)) (setq m1 (cons dptx (cons (cadr lmtb) '(0.0))) m2 (cons dptx (cons (cadr lmth) '(0.0))) ) (if (zerop det_or) (setq m1 (cons (cadr m1) (cons (car m1) '(0.0))) m2 (cons (cadr m2) (cons (car m2) '(0.0))) ) ) (setq pd (inters ta tb m1 m2)) (if (/= pd ()) (progn (if (zerop det_or) (setq ecr (rtos (cadr pd) 2 0) ang_or (angle ta tb) incl (angtos 0)) (setq ecr (rtos (car pd) 2 0) ang_or (rem (+ (/ pi 2) (angle ta tb)) (* 2 pi)) incl (angtos (/ (* 3 pi) 2) (getvar "aunits") 5)) ) (cond ((equal (rem ang_or pi) ang_or) (setq ecr (strcat " " ecr)) (command "_.text" "_justify" "_mleft" pd htx incl ecr) ) (T (setq ecr (strcat ecr " ")) (command "_.text" "_justify" "_mright" pd htx incl ecr) ) ) ) ) (setq dptx (+ dptx pas)) ) ) (defun s_cadr (val eh_x eh_y / le_x le_y d_x d_y) (setq le_x '() le_y ()) (foreach n pt_lst (setq le_x (cons (car n) le_x) le_y (cons (cadr n) le_y)) ) (setq d_x (- (apply 'max le_x) (apply 'min le_x)) d_y (- (apply 'max le_y) (apply 'min le_y)) ) (setq se_x (/ (- (* eh_x d_x) (* 2.0 val)) d_x) se_y (/ (- (* eh_y d_y) (* 2.0 val)) d_y) ) ) (defun cart (mod / lst) (setq lst (new_list pt_lst mod)) (command "_.pline" (car lst) "_width" "0.0" "") (setq lst (cdr lst)) (repeat (length lst) (command (car lst)) (setq lst (cdr lst)) ) (command "_close") ) (defun new_list (lst mat / ) (setq lst_b '()) (repeat (length lst) (setq lst_b (cons (list (+ (* (car (nth 0 lst)) (car (nth 0 mat))) (* (cadr (nth 0 lst)) (cadr (nth 0 mat))) (cadddr (nth 0 mat)) ) (+ (* (car (nth 0 lst)) (car (nth 1 mat))) (* (cadr (nth 0 lst)) (cadr (nth 1 mat))) (cadddr (nth 1 mat)) ) ) lst_b ) ) (setq lst (cdr lst)) ) (reverse lst_b) ) (defun v_matr (dpt alpha echx echy / ) (list (list (* echx (cos alpha)) (* echy (-(sin alpha))) 0.0 (car dpt) ) (list (* echx (sin alpha)) (* echy (cos alpha)) -0.0 (cadr dpt) ) (list 0.0 0.0 1.0 0.0) (list 0.0 0.0 0.0 1.0) ) ) (defun des_vec (lst dat col / lst_sg) (setq lst_sg (list (cadr lst) (car lst))) (setq lst (cdr lst)) (while lst (if (cadr lst) (setq lst_sg (cons (cadr lst) (cons (car lst) lst_sg))) (setq lst_sg (cons (last lst_sg) (cons (car lst) lst_sg))) ) (setq lst (cdr lst)) ) (setq lst_sg (cons col lst_sg)) (grvecs lst_sg dat) ) (defun grpl (pt / pt1 pt2 pt3 pt4 rap) (setq rap (getvar "viewsize") pt1 (list (+ (car pt) (/ rap 50)) (+ (cadr pt) (/ rap 50))) pt2 (list (+ (car pt) (/ rap 50)) (- (cadr pt) (/ rap 50))) pt3 (list (- (car pt) (/ rap 50)) (- (cadr pt) (/ rap 50))) pt4 (list (- (car pt) (/ rap 50)) (+ (cadr pt) (/ rap 50))) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:lambert ( / sv_und sv_blp sv_agb sv_osm sv_oth sv_stl sv_spb sv_sng sv_sun sv_smd sv_lck sv_pl sv_sty sv_ucs olderr pb ph ptx ang e_x e_y dm_x dm_y v_297 pt_lst ecart ok ech pas plnw1 plnw cod nom htx val1 val2 e_x2 e_y2 ecart2 e_x3 e_y3 ecart3 c_cod c1_a4 c2_a4 c3_a4 c4_a4 cnt_d i_c se_x se_y pt s_ang lrg htr ent1 ent2 ent3 ent vx nbs cnt lmtb lmth incl n_ajou htx ecr rot lst_b dcl_id what_next ) (setvar "cmdecho" 0) (cond ((and (eq (getvar "cvport") 2) (entlast) (eq (getvar "measurement") 1)) (if (<= (setq sv_und (getvar "undoctl")) 3) (command "_.undo" "_control" "_all") ) (command "_.undo" "_group") (setq sv_blp (getvar "blipmode")) (setvar "blipmode" 0) (setq sv_agb (getvar "angbase")) (setvar "angbase" 0) (setq sv_osm (getvar "osmode")) (setvar "osmode" 0) (setq sv_oth (getvar "orthomode")) (setvar "orthomode" 0) (setq sv_stl (getvar "snapstyl")) (setq sv_spb (getvar "snapbase")) (setvar "snapbase" '(0.0 0.0)) (setq sv_sng (getvar "snapang")) (setvar "snapang" 0.0) (setq sv_sun (getvar "snapunit")) (setq sv_smd (getvar "snapmode")) (setq sv_lck (getvar "limcheck")) (setvar "limcheck" 0) (setq sv_pl (getvar "clayer")) (setq sv_sty (getvar "textstyle")) (setq sv_ucs (getvar "worlducs")) (if (= sv_ucs 0) (progn (command "._ucs" "_save" "$_TEMPO_$") (command "_.ucs" "") ) ) (setq olderr *error* *error* lamerr) (if (not (equal (getvar "target") '(0.0 0.0 0.0))) (command "._dview" "" "_points" (list 0.0 0.0 0.0) "" "_exit") ) (command "._plan" "_world") (setq pb (getvar "extmin") ph (getvar "extmax")) (setq pb (list (car pb) (cadr pb)) ph (list (car ph) (cadr ph))) (setq ptx (list (/ (+ (car pb) (car ph)) 2) (/ (+ (cadr pb) (cadr ph)) 2) ) ) (setq ang 0.0 e_x 1.0 e_y 1.0 ech 500 pas (/ ech 10) plnw1 "LAMBERT" v_297 (* 0.210 (sqrt 2))) (setq dm_x (/ (* (1+ (fix (/ (- (car ph) (car pb)) (* ech 0.210)))) (* ech 0.210)) 2) dm_y (/ (* (1+ (fix (/ (- (cadr ph) (cadr pb)) (* ech v_297)))) (* ech v_297)) 2) ) (setq pt_lst (list (list (- dm_x) (- dm_y)) (list dm_x (- dm_y)) (list dm_x dm_y) (list (- dm_x) dm_y) ) ) (setq ecart (v_matr ptx ang e_x e_y)) (setq ok t) (command "._zoom" "0.4x") (setq dcl_id (load_dialog "lambert.dcl")) (setq what_next 2) (while (< 1 what_next) (if (not (new_dialog "lambert" dcl_id)) (exit)) (start_list "lst_ech") (mapcar '(lambda (x) (add_list x) ) '("50" "100" "200" "500" "1000" "2000" "2500" "5000" "10000") ) (end_list) (set_tile "c_ech" (itoa ech)) (start_list "lst_pas") (mapcar '(lambda (x) (add_list x) ) '("5" "10" "20" "50" "100" "200" "250" "500" "1000") ) (end_list) (set_tile "c_pas" (itoa pas)) (set_tile "pl_lamb" plnw1) (set_tile "error" "") (action_tile "lst_ech" "(v_chg $value T)") (action_tile "c_ech" "(tstval $value T)") (action_tile "lst_pas" "(v_chg $value nil)") (action_tile "c_pas" "(tstval $value nil)") (action_tile "pl_lamb" "(tststr $value)") (action_tile "pl_name" "(setq plnw1 (getlayer))") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) (cond ((= what_next 1) (if (= (setq cod (tblsearch "LAYER" plnw1)) ()) (command "._layer" "_new" plnw1 "") (progn (setq nom (cdr (assoc 2 cod))) (cond ((= (boole 1 7 (cdr (assoc 70 cod))) 1) (command "._layer" "_thaw" nom "") ) ((= (boole 1 7 (cdr (assoc 70 cod))) 2) (command "._vplayer" "_thaw" nom "" "") ) ((= (boole 1 7 (cdr (assoc 70 cod))) 3) (command "._layer" "_thaw" nom "") (command "._vplayer" "_thaw" nom "" "") ) ((= (boole 1 7 (cdr (assoc 70 cod))) 4) (command "._layer" "_unlock" nom "") ) ((= (boole 1 7 (cdr (assoc 70 cod))) 5) (command "._layer" "_unlock" nom "_thaw" nom "") ) ((= (boole 1 7 (cdr (assoc 70 cod))) 6) (command "._layer" "_unlock" nom "") (command "._vplayer" "_thaw" nom "" "") ) ((= (boole 1 7 (cdr (assoc 70 cod))) 7) (command "._vplayer" "_thaw" nom "" "") (command "._layer" "_unlock" nom "_thaw" nom "") ) ) ) ) (command "._layer" "_set" plnw1 "") (setq dm_x (* (/ dm_x 500.0) ech) dm_y (* (/ dm_y 500.0) ech)) (setvar "snapstyl" 0) (setvar "snapbase" (list (- (car ptx) dm_x) (- (cadr ptx) dm_y))) (setvar "snapang" 0) (setvar "snapunit" (list (* ech (/ 0.210 2.0)) (* ech (/ v_297 2.0)))) (setvar "snapmode" 0) (setq htx (/ ech 500.0) val1 (* htx 2.5) val2 (+ val1 (* htx 10.0))) (s_cadr val1 e_x e_y) (setq e_x2 se_x e_y2 se_y) (setq ecart2 (v_matr ptx ang e_x2 e_y2)) (s_cadr val2 e_x e_y) (setq e_x3 se_x e_y3 se_y) (setq ecart3 (v_matr ptx ang e_x3 e_y3)) (grpl ptx) (while ok (des_vec pt_lst ecart 2) (des_vec pt_lst ecart2 2) (des_vec pt_lst ecart3 2) (initget "Position Rotation Dimensions Sortir") (setq cod (getkword "\n[Position/Rotation/Dimensions/Sortir] < Sortir >: ") ) (cond ((eq cod "Position") (initget 8) (setq pt (getpoint ptx (strcat "\nNouveau point <" (rtos (car ptx)) "," (rtos (cadr ptx)) ">: " ) ) ) (if (null pt) (setq pt ptx)) (setvar "snapbase" (polar (getvar "snapbase") (angle ptx (list (car pt) (cadr pt))) (distance ptx (list (car pt) (cadr pt))))) (grpl ptx) (setq ptx (list (car pt) (cadr pt))) (grpl ptx) (des_vec pt_lst ecart 0) (des_vec pt_lst ecart2 0) (des_vec pt_lst ecart3 0) (setq ecart (v_matr ptx ang e_x e_y)) (s_cadr val1 e_x e_y) (setq e_x2 se_x e_y2 se_y) (setq ecart2 (v_matr ptx ang e_x2 e_y2)) (s_cadr val2 e_x e_y) (setq e_x3 se_x e_y3 se_y) (setq ecart3 (v_matr ptx ang e_x3 e_y3)) ) ((eq cod "Rotation") (initget 0) (setq s_ang (getorient ptx (strcat "\nNouvel angle<" (angtos ang) ">: " ) ) ) (if (not s_ang) (setq s_ang ang)) (if (and (> s_ang (/ pi 2)) (<= s_ang (/ (* 3 pi) 2))) (setq ang (+ s_ang pi)) (setq ang s_ang) ) (des_vec pt_lst ecart 0) (des_vec pt_lst ecart2 0) (des_vec pt_lst ecart3 0) (setq ecart (v_matr ptx ang e_x e_y)) (s_cadr val1 e_x e_y) (setq e_x2 se_x e_y2 se_y) (setq ecart2 (v_matr ptx ang e_x2 e_y2)) (s_cadr val2 e_x e_y) (setq e_x3 se_x e_y3 se_y) (setq ecart3 (v_matr ptx ang e_x3 e_y3)) (setvar "snapbase" (polar ptx (+ (angle ptx (getvar "snapbase")) (- ang (getvar "snapang"))) (distance ptx (getvar "snapbase")))) (setvar "snapang" ang) ) ((eq cod "Dimensions") (setvar "snapmode" 1) (setvar "orthomode" 1) (initget 70) (setq lrg (getdist ptx (strcat "\nNouvelle demi-largeur<" (rtos (* (/ (distance (car pt_lst) (cadr pt_lst)) 2) e_x)) ">: " ) ) ) (if (not lrg) (setq lrg (* (/ (distance (car pt_lst) (cadr pt_lst)) 2) e_x)) ) (setq e_x (/ (* 2.0 lrg) (distance (car pt_lst) (cadr pt_lst)) ) ) (initget 70) (setq htr (getdist ptx (strcat "\nNouvelle demi-hauteur<" (rtos (* (/ (distance (car pt_lst) (last pt_lst)) 2) e_y)) ">: " ) ) ) (if (not htr) (setq htr (* (/ (distance (car pt_lst) (last pt_lst)) 2) e_y)) ) (setq e_y (/ (* 2.0 htr) (distance (car pt_lst) (last pt_lst)) ) ) (des_vec pt_lst ecart 0) (des_vec pt_lst ecart2 0) (des_vec pt_lst ecart3 0) (setq ecart (v_matr ptx ang e_x e_y)) (s_cadr val1 e_x e_y) (setq e_x2 se_x e_y2 se_y) (setq ecart2 (v_matr ptx ang e_x2 e_y2)) (s_cadr val2 e_x e_y) (setq e_x3 se_x e_y3 se_y) (setq ecart3 (v_matr ptx ang e_x3 e_y3)) (setvar "snapmode" 0) (setvar "orthomode" 0) ) ((or (eq cod "Sortir") (eq cod nil)) (setq ok nil) (redraw) (des_vec pt_lst ecart 2) (setq c1_a4 (list (+ (caar pt_lst) (/ (* (car (getvar "snapunit")) 2.0) e_x)) (+ (cadar pt_lst) (/ (* (cadr (getvar "snapunit")) 2.0) e_y))) c2_a4 (list (- (caar (cdr pt_lst)) (/ (* (car (getvar "snapunit")) 2.0) e_x)) (+ (cadar (cdr pt_lst)) (/ (* (cadr (getvar "snapunit")) 2.0) e_y))) c3_a4 (list (- (caar (cddr pt_lst)) (/ (* (car (getvar "snapunit")) 2.0) e_x)) (- (cadar (cddr pt_lst)) (/ (* (cadr (getvar "snapunit")) 2.0) e_y))) c4_a4 (list (+ (caar (cdddr pt_lst)) (/ (* (car (getvar "snapunit")) 2.0) e_x)) (- (cadar (cdddr pt_lst)) (/ (* (cadr (getvar "snapunit")) 2.0) e_y))) cnt_d 1 ) (cond ((and (> (distance (car pt_lst) (cadr pt_lst)) (* ech 0.210)) (> (distance (car pt_lst) (cadddr pt_lst)) (* ech v_297))) (foreach n pt_lst (initget "Oui Non") (cond ((eq cnt_d 1) (des_vec (list n (list (car c1_a4) (cadr n)) c1_a4 (list (car n) (cadr c1_a4))) ecart 3) (setq c_cod (getkword "\nVoulez vous ecorner ce coin [Oui/Non] < N >: ")) (if (eq c_cod "Oui") (setq cnt_d 4 pt_lst (list (list (car c1_a4) (cadr n)) (cadr pt_lst) (caddr pt_lst) (cadddr pt_lst) (list (car n) (cadr c1_a4)) c1_a4 ) ) (des_vec (list n (list (car c1_a4) (cadr n)) c1_a4 (list (car n) (cadr c1_a4))) ecart 0) ) ) ((eq cnt_d 2) (des_vec (list (list (car c2_a4) (cadr n)) n (list (car n) (cadr c2_a4)) c2_a4) ecart 3) (setq c_cod (getkword "\nVoulez vous ecorner ce coin [Oui/Non] < N >: ")) (if (eq c_cod "Oui") (setq cnt_d 4 pt_lst (list (car pt_lst) (list (car c2_a4) (cadr n)) c2_a4 (list (car n) (cadr c2_a4)) (caddr pt_lst) (cadddr pt_lst) ) ) (des_vec (list (list (car c2_a4) (cadr n)) n (list (car n) (cadr c2_a4)) c2_a4) ecart 0) ) ) ((eq cnt_d 3) (des_vec (list c3_a4 (list (car n) (cadr c3_a4)) n (list (car c3_a4) (cadr n))) ecart 3) (setq c_cod (getkword "\nVoulez vous ecorner ce coin [Oui/Non] < N >: ")) (if (eq c_cod "Oui") (setq cnt_d 4 pt_lst (list (car pt_lst) (cadr pt_lst) (list (car n) (cadr c3_a4)) c3_a4 (list (car c3_a4) (cadr n)) (cadddr pt_lst) ) ) (des_vec (list c3_a4 (list (car n) (cadr c3_a4)) n (list (car c3_a4) (cadr n))) ecart 0) ) ) ((eq cnt_d 4) (des_vec (list (list (car n) (cadr c4_a4)) c4_a4 (list (car c4_a4) (cadr n)) n) ecart 3) (setq c_cod (getkword "\nVoulez vous ecorner ce coin [Oui/Non] < N >: ")) (if (eq c_cod "Oui") (setq cnt_d 4 pt_lst (list (car pt_lst) (cadr pt_lst) (caddr pt_lst) (list (car c4_a4) (cadr n)) c4_a4 (list (car n) (cadr c4_a4)) ) ) (des_vec (list (list (car n) (cadr c4_a4)) c4_a4 (list (car c4_a4) (cadr n)) n) ecart 0) ) ) ) (setq cnt_d (1+ cnt_d)) ) ) ) (redraw) (princ "\nDessin et ecriture du quadrillage en cours !!!") (setvar "snapbase" '(0.0 0.0)) (setvar "snapang" 0.0) (cart ecart) (setq ent1 (entlast)) (command "_.offset" val1 ent1 ptx "") (setq ent2 (entlast)) (command "_.offset" val2 ent1 ptx "") (setq ent3 (entlast)) ) ) ) (setq ent (entget ent3)) (cond ((= (cdr (assoc 0 ent)) "POLYLINE") (setq vx (entget (entnext (cdar ent))) pt_lst '()) (while (= (cdr (assoc 0 vx)) "VERTEX") (setq pt_lst (cons (cdr (assoc 10 vx)) pt_lst)) (setq vx (entget (entnext (cdar vx)))) ) (setq pt_lst (reverse pt_lst)) ) ((= (cdr (assoc 0 ent)) "LWPOLYLINE") (setq nbs (cdr (assoc 90 ent)) cnt 0 pt_lst '()) (while (< cnt nbs) (if (= (caar ent) 10) (setq pt_lst (cons (cdar ent) pt_lst) cnt (+ cnt 1)) ) (setq ent (cdr ent)) ) (setq pt_lst (reverse pt_lst)) ) ) (setq n_ajou 0) (cond ((setq cod (tblnext "UCS" T)) (while cod (if (wcmatch (cdr (assoc 2 cod)) "LAMBERT#") (setq n_ajou (1+ n_ajou)) ) (setq cod (tblnext "UCS")) ) ) ) (princ (strcat "\nCréation d'un SCU < LAMBERT" (itoa n_ajou) " > pour une sortie traceur..." ) ) (command "_.ucs" "_3point" (car pt_lst) (cadr pt_lst) (last pt_lst)) (command "_.ucs" "_save" (strcat "LAMBERT" (itoa n_ajou))) (command "_.plan" "_current") (command "_.ucs" "_world") (command "_.hatch" "quadiso" pas "0.0" ent3 "") (command "_.hatch" "repquadiso,_outermost" pas "0.0" ent1 ent2 "") (cond ((null (tblsearch "STYLE" "$SPEC-LSP")) (command "_.-style" "$spec-lsp" "simplex" "0.0" "1.0" "0.0" "_no" "_no" "_no") ) ) (setvar "textstyle" "$SPEC-LSP") (setq lmtb (list (apply 'min (mapcar 'car pt_lst)) (apply 'min (mapcar 'cadr pt_lst)) ) lmth (list (apply 'max (mapcar 'car pt_lst)) (apply 'max (mapcar 'cadr pt_lst)) ) i_c -1 ) (princ "\nEcriture des X !") (repeat (length pt_lst) (ecri (nth (setq i_c (1+ i_c)) pt_lst) (nth (rem (1+ i_c) (length pt_lst)) pt_lst) (/ pi 2)) ) (princ "\nEcriture des Y !") (setq lmtb (cons (cadr lmtb) (list (car lmtb))) lmth (cons (cadr lmth) (list (car lmth))) i_c -1 ) (repeat (length pt_lst) (ecri (nth (setq i_c (1+ i_c)) pt_lst) (nth (rem (1+ i_c) (length pt_lst)) pt_lst) 0.0) ) (if (not (tblsearch "BLOCK" "NORDLAMB")) (foreach n '( ( (0 . "BLOCK") (8 . "0") (2 . "NORDLAMB") (70 . 0) (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0140625 0.0) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.00300077 -0.000621481) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.00994369 -0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.00168241 -0.00256132) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0 -0.0140625) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00124296 -0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.00994369 0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.00256132 0.00168241) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0 0.025) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 0.000621481 0.00300077) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0 -0.0140625) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.000621481 -0.00300077) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 -0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.00256132 -0.00168241) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 -0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00124296 -0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0 0.025) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00124296 0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 -0.0140625 0.0) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.00300077 0.000621481) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.0140625 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00300077 -0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 3) (70 . 0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 0.00994369) (40 . 0.0) (41 . 0.00124296) (42 . 0.0) (10 -0.00168241 0.00256132) (40 . 0.00124296) (41 . 0.0) (42 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.00994369 0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -0.00300077 0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.00994369 -0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00300077 -0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0140625 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00300077 0.00124296) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.00994369 0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00124296 0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.00994369 0.00994369) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 0.00124296 0.00300077) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ENDBLK") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) ) ) (entmake n) ) ) (princ "\nDonnez le point d'insertion du Nord :") (command "_.-insert" "nordlamb" pause ech "" "") (setq htx (* htx 2) ecr (strcat "Échelle : 1/" (rtos ech 2 0))) (setq rot (angtos (angle (car pt_lst) (cadr pt_lst)) (getvar "aunits") 5) ) (princ "\nDonnez le point de depart pour ecrire l'Echelle :") (command "_.text" pause htx rot ecr) (setq lamerr nil cart nil des_vec nil new_list nil grpl nil s_cadr nil ecri nil v_matr nil v_chg nil c:lambert nil colorname nil getindex nil getlayer nil layedit_act nil laylist_act nil makelaylists nil reset-lay nil test-ok nil tststr nil tstval nil ) ) (T (princ "\n*Arrêt*")) ) ) (unload_dialog dcl_id) (setvar "blipmode" sv_blp) (setvar "angbase" sv_agb) (setvar "osmode" sv_osm) (setvar "orthomode" sv_oth) (setvar "snapstyl" sv_stl) (setvar "snapbase" sv_spb) (setvar "snapang" sv_sng) (setvar "snapunit" sv_sun) (setvar "snapmode" sv_smd) (setvar "limcheck" sv_lck) (setvar "clayer" sv_pl) (setvar "textstyle" sv_sty) (if (= sv_ucs 0) (progn (command "._ucs" "_restore" "$_TEMPO_$") (command "._ucs" "_delete" "$_TEMPO_$") ) ) (command "_.undo" "_end") (if (<= sv_und 3) (command "_.undo" "_control" "_one")) (setq *error* olderr) (setvar "cmdecho" 1) ) (T (alert "\nCommande LAMBERT inopérante:\nSoit vous êtes en présentation papier, soit le dessin est vide ou dans le système anglo-saxon") ) ) (princ) ) LE DCL lambert.dcl lambert : dialog { label = "Définition du carroyage LAMBERT"; :boxed_row { label = ""; :boxed_column { label = "Choix de l'échelle"; :list_box { multiple_select=false; key="lst_ech"; width=10; } :edit_box { label = "Echelle:"; mnemonic = "E"; key = "c_ech"; width = 10; edit_width = 10; } } :boxed_column { label = "Choix du pas"; :list_box { multiple_select=false; key="lst_pas"; width=10; } :edit_box { label = "Pas:"; mnemonic = "P"; key = "c_pas"; width = 10; edit_width = 10; } } } :boxed_column { label = "Choix du calque pour le carroyage"; :edit_box { label = "Calque:"; mnemonic = "C"; key = "pl_lamb"; width = 32; edit_width = 32; edit_limit = 31; } : button { label = "Choix dans Liste des calques..."; mnemonic = "L"; key = "pl_name"; fixed_width = true; alignment = centered; } } ok_cancel_err; } setlayer : dialog { subassembly = 0; label = "Choix du Calque"; initial_focus = "listbox"; : concatenation { children_fixed_width = true; key = "clayer"; : text_part { label = "Calque Courant: "; } : text_part { key = "cur_layer"; width = 35; } } : row { fixed_width = true; key = "titles"; children_fixed_width = true; : text { label = "Nom du Calque"; width = 34; } : text { label = "Etat"; width = 9; } : text { label = "Couleur"; width = 8; } : text { label = "Type de ligne"; width = 12; } } : list_box { tabs = "32 35 37 39 41 44 53"; width = 67; height = 12; key = "list_lay"; allow_accept = true; } : row { key = "controls"; : column { key = "lname"; fixed_width = true; : edit_box { label = "Définir le Nom du Calque:"; mnemonic = "D"; key = "edit_lay"; width = 32; edit_width = 32; edit_limit = 31; allow_accept = true; } } } ok_cancel_err; } LE 1er fichier PAT: quadiso.pat *QUADISO,Quadrillage lambert 0, -.015,0, 0,1, .03,-.97 90, 0,-.015, 0,1, .03,-.97 LE 2ème fichier PAT: repquadiso.pat *REPQUADISO,Repere du quadrillage lambert 0, 0,0, 0,1 90, 0,0, 0,1
-
Re, Si tes bloc sont déjà insérés et ne comportent pas d'attributs, tu pourrait aussi utiliser une macro en diesel comme ceci: *^C^C_.qleader;\_none;\;0.0;$M=X=$(rtos,$(index,0,$(getvar,lastpoint)),2,2);Y=$(rtos,$(index,1,$(getvar,lastpoint)),2,2);Z=$(rtos,$(index,2,$(getvar,lastpoint)),2,2);;^Z Avec ces 2 exemples tu pourras peut être constituer une macro à ta convenance les "\" représentent les pauses pour une entrée utilisateur les "$" sont des syntaxes diesel (voir l'aide pour plus d'infos) les ";" sont équivalent à une validation de commande (on peut aussi utiliser ^M ou des espaces, mais je déconseille ceux-ci) le "*" en début de ligne est pour la répétition indéfinie de la ligne de macro (ESC pour arrêter) le "^C^C" est un double control+C pour être sur d'annuler toute commande en cours (avec ses options) avant de commencer la macro. La macro est similaire à un script, c'est simplement un enchainement de commande et le diesel permet d'accéder à un pseudo langage de programmation accessible sous une LT et/ou version pleine (son usage principal est de pouvoir LIRE l'état des variables d'autocad et de faire une action en conséquence, par une condition par exemple).
-
En supposant un bloc existant de nom "candelabre" ET ayant 2 définitions d'attribut pour le x et y. Un bouton contenant une macro en diesel pourrait renseigner les attributs. Voici un exemple d'un bouton répétitif faisant juste une pause pour le point d'insertion du bloc et une pause pour la rotation du bloc (celle-ci pourrait être fixe, à voir) *^C^C_.ATTDIA;0;_.-insert;candelabre;\1;1;\$M=X=$(rtos,$(index,0,$(getvar,lastpoint)),2,2);Y=$(rtos,$(index,1,$(getvar,lastpoint)),2,2);ATTDIA;1; NB: La macro une fois copier-coller NE DOIT contenir AUCUN espace qui aurait put s'insérer lors de la publication et/ou du copier-coller dans ton bouton, et tout ça sur une seule ligne (sans retour chariot)
-
Creer fichier PAT depuis une hachure existante
bonuscad a répondu à un(e) sujet de lecrabe dans Routines LISP
Au patient Décapode... Je croyais avoir déjà poster ce lisp (assez ancien déjà) sur Cadxp, mais pas retrouvé. Je poste donc, en précisant (d'aprés mes souvenirs) que la définition du code PAT restitué n'est pas forcément identique à l'original (si la hachure n'a pas été faite dans le SCG ou SCU parallèle) mais donne un motif de même apparence. Tu peux essayer voir si cela te convient, il te suffira de faire un copier-coller du résultat dans la fenêtre de commande texte d'autocad dans un fichier PAT au nom identique du modèle relevé, si cela fonctionne.... Que Gilles me pardonne mes matrices de transformation, car ces lisp sont ancien et je ne me suis pas repenché dessus. L'utilisation de ce genre de lisp étant trés ponctuel et occasionnelle, une fois qu'on a récupérer le motif, il n'a plus trop d'intérêt. (defun ex_xform (xpt matrix v / ex ey ez m1 m2 m3 m4 wx wy wz) (setq ex (car xpt) ey (cadr xpt) ez (caddr xpt) m1 (nth 0 matrix) m2 (nth 1 matrix) m3 (nth 2 matrix) wx (+ (* (car m1) ex) (* (car m2) ey) (* (car m3) ez) ) wy (+ (* (cadr m1) ex) (* (cadr m2) ey) (* (cadr m3) ez) ) wz (+ (* (caddr m1) ex) (* (caddr m2) ey) (* (caddr m3) ez) ) ) (if (not v) (setq m4 (nth 3 matrix) wx (+ wx (car m4)) wy (+ wy (cadr m4)) wz (+ wz (caddr m4)) ) ) (list wx wy wz) ) (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 1.0 0.0) (list 0.0 0.0 0.0 1.0) ) ) (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 c:model_hatch ( / zindim dec_prec ent ent_dxf nam_pat user_angle user_scale nbr_line dxf_line ang_motif n first_op transform pt_trans dlt_x dlt_y) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nChoix de la Hachure modèle: ")))) (initget 4) (setq dec_prec (getint "\nNombres de décimales a afficher ?<8>: ") ent_dxf (entget (car ent)) zindim (getvar "dimzin")) (if (not dec_prec) (setq dec_prec 8)) (setvar "dimzin" 12) (cond ((eq (cdr (assoc 0 ent_dxf)) "HATCH") (setq nam_pat (strcat "\n*" (cdr (assoc 2 ent_dxf))) user_angle (cdr (assoc 52 ent_dxf)) user_scale (cdr (assoc 41 ent_dxf)) nbr_line (cdr (assoc 78 ent_dxf)) dxf_line '() first_op T ) (while (/= (caar ent_dxf) 53) (setq ent_dxf (cdr ent_dxf)) ) (textscr) (princ nam_pat) (repeat nbr_line (repeat 5 (setq dxf_line (cons (cdar ent_dxf) dxf_line) ent_dxf (cdr ent_dxf)) (if (eq (caar ent_dxf) 79) (progn (setq n (cdar ent_dxf) ent_dxf (cdr ent_dxf) dxf_line (cons nil dxf_line)) (repeat n (setq dxf_line (cons (* (/ 1.0 user_scale) (cdar ent_dxf)) dxf_line) ent_dxf (cdr ent_dxf)) ) ) ) ) (setq dxf_line (reverse dxf_line) ang_motif (car dxf_line) dxf_line (cdr dxf_line)) (princ (strcat "\n" (angtos (- ang_motif user_angle) 0 dec_prec))) (repeat (- (length dxf_line) (1+ n)) (cond ((not (car dxf_line)) (setq dxf_line (cdr dxf_line)) (while dxf_line (princ (strcat "," (rtos (car dxf_line) 2 dec_prec))) (setq dxf_line (cdr dxf_line)) ) ) (T (if first_op (setq transform (v_matr '(0.0 0.0 0.0) 0.0 0.0 user_angle 1.0 1.0 1.0) first_op nil) (setq transform (v_matr '(0.0 0.0 0.0) 0.0 0.0 ang_motif 1.0 1.0 1.0)) ) (setq pt_trans (transpts (list (* (/ 1.0 user_scale) (car dxf_line)) (* (/ 1.0 user_scale) (cadr dxf_line)) 0.0) transform) dlt_x (car pt_trans) dlt_y (cadr pt_trans) dxf_line (cons dlt_x (cons dlt_y (cddr dxf_line))) ) (princ (strcat "," (rtos (car dxf_line) 2 dec_prec) "," (rtos (cadr dxf_line) 2 dec_prec))) (setq dxf_line (cddr dxf_line)) ) ) ) (setq dxf_line '() first_op T) ) ) (T (prompt "\nEntité n'est pas une hachure.")) ) (setvar "dimzin" zindim) (setvar "cmdecho" 1) (prin1) ) -
Oui effectivement, si j'avais fais attention aux dates, ça m'aurais éviter de faire la confusion. Merci en tout cas pour les liens, je vais les faire découvrir à ma femme qui aime bien les penseurs, surtout quand il sont inclassables :exclam: Enfin je sais pas, elle va encore se ruiner en achetant des bouquins, et on ne sais plus ou les mettre. :casstet:
-
Je ne sais pas si ça vas t'avancer mais en plaçant le code dxf 1 dans MODEMACRO, tu as la valeur réelle dans la barre d'état. (setvar "modemacro" (cdr (assoc 1 (entget (car (entsel)))))) Peut être qu'en VLAX tu pourrais lui faire évaluer la valeur de "modemacro"? Toi l'expert de l'activex ;) En lisp j'ai pas trouvé, je pense que modemacro a son propre évaluateur de diesiel, est ce qu'une fonction vla aurait les mêmes possibilités ??? [Edité le 31/3/2007 par bonuscad]
-
En hebreux "jehovah" ce prononcerait "yahweh". Donc en enlevant les voyelles.... J'aime beaucoup la citation de Krishnamurti, je penche plus facilement sur des idées dans ce sens. Est-ce bien le Krishna l'hindouiste ? Car ci c'est lui un mouvement religieux à quand même suivie sa pensée. Totalement en contradiction avec sa citation, comme quoi....il a bien tracé un chemin sans certainement le vouloir. Chacun sa vérité. Pour moi l'infiniment grand et l'infiniment petit se rejoignent, enfin cette idée m'interpelle et me séduit. Bien sur dans ce cas la valeur du mètre ne veut plus rien dire dans un espace ou les dimensions et le temps se mèlent pour se jouer des unités. En effet pourquoi un atome ne serait pas la représentation d'une ou plusieurs galaxies dans une autre dimension avec une autre échelle de temps tout en gardant une corrélation. Un atome qui se fissure et c'est le Big-Bang dans une autre dimension pour des milliard d'année et en une microseconde dans notre univers.
