-
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
-
Création d'un programme éclairage public
bonuscad a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Salut, Déjà il y a l'angle de rotation "rot" qui n'est pas fourni dans ta ligne de commande !?!? (command "-insérer" "candelabre1" PT 1 1 "") Comme tu travaille avec (command), ton code reste influencé par l'état des variables et il te faut en tenir compte. Donc pour en tenir compte il faudrait plutôt cette syntaxe (pas trop testé). Normalement que tu soit en degrés, en grades, en radians, dans le sens horaire ou anti-horaire, avec l'origine des angle à l'est ou au nord etc..., cela devrait fonctionner. (command "_.-insert" "candelabre1" "_none" PT 1 1 (angtos ((if (zerop (getvar "ANGDIR")) - +) ang (getvar "ANGBASE")) (getvar "AUNITS") 13)) -
Bonjour, C'est un truc comme cela que tu voudrais? ((lambda ( / po ang d) (setq po (getpoint "\nPoint de départ: ")) (setq ang (getangle po "\nOrientation de la polyligne: ")) (command "_.pline" po "_width" 0.0 0.0) (while (setq d (getdist (getvar "LASTPOINT") "\nDistance: ")) (command (polar (getvar "LASTPOINT") ang d)) ) (command "") ))
-
Création d'un programme éclairage public
bonuscad a répondu à un(e) sujet de mateus dans LISP et Visual LISP
Bonjour mogo, Je vois que tu n'as pas lâché le morceaux, tu as multiplié les posts pour résoudre ton problème de conception. Malgré ce que j'ai pu te dire, tu t'es tourné vers l'usage des (command) (ce n'est pas un reproche...), mais t'as pu vite te rendre compte du casse tête que cela peut devenir avec certaine commande, tel coupure, ajuster etc... je te publie le code encore un peu plus finalisé. On pourrait encore aller plus loin pour les raccords (mais à ce niveau ça se complexifie un peu plus. (vl-load-com) (if (not (tblsearch "BLOCK" "candelabre")) (foreach n '( ( (0 . "BLOCK") (8 . "0") (2 . "candelabre") (70 . 0) (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0) ) ( (0 . "CIRCLE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbCircle") (10 0.0 0.0 0.0) (40 . 0.053122) (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 . 6) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0689761 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 0.034488 0.059735) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -0.034488 0.059735) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -0.0689761 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -0.034488 -0.059735) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 0.034488 -0.059735) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 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 . 5) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -0.0260215 -0.0463123) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 0.0260215 -0.0463123) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 0.0260215 -0.294391) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -0.0260215 -0.294391) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10 -0.0260215 -0.0463123) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0) ) ( (0 . "ARC") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbCircle") (10 0.652129 -0.647202 0.0) (40 . 0.764437) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 2.66187) (51 . 3.49555) ) ( (0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbLine") (10 0.0649177 -0.912168 0.0) (11 -0.0649177 -0.912168 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ARC") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbCircle") (10 -0.652129 -0.647202 0.0) (40 . 0.764437) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 5.92922) (51 . 0.479719) ) ( (0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbLine") (10 -0.082228 -0.434874 0.0) (11 0.082228 -0.434874 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbLine") (10 -0.0897754 -0.462971 0.0) (11 0.0897754 -0.462971 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ARC") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbCircle") (10 0.514429 -0.667768 0.0) (40 . 0.656885) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 2.53703) (51 . 3.56935) ) ( (0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbLine") (10 0.0832687 -0.940265 0.0) (11 -0.0832687 -0.940265 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ARC") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbCircle") (10 -0.514429 -0.667768 0.0) (40 . 0.656885) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 5.85543) (51 . 0.604567) ) ( (0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbLine") (10 -0.0832687 -0.940265 0.0) (11 -0.0649177 -0.912168 0.0) (210 0.0 0.0 1.0) ) ( (0 . "LINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbLine") (10 0.0832687 -0.940265 0.0) (11 0.0649177 -0.912168 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ENDBLK") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) ) ) (entmake n) ) ) (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (defun c:mogo ( / js dxf_obj obj_vlax p10 deriv p11 v1 v2 det_or e_width ename l_pt pt_start pt_end total_dist partial_dist lst_pt increment_dist js_cand AcDoc Space nb_cand dxf_ent pt_ins pt_int ang dxf_210) (princ "\nSélectionner le bord de la chaussée qui va servir de base pour la création du réseau ECP: ") (while (not (setq js (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons -4 "<NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!") ) (setq dxf_obj (entget (ssname js 0)) obj_vlax (vlax-ename->vla-object (ssname js 0)) ) (initget 1) (setq p10 (vlax-curve-getStartPoint obj_vlax) deriv (vlax-curve-getfirstderiv obj_vlax (vlax-curve-getStartParam obj_vlax)) p11 (polar p10 (atan (cadr deriv) (car deriv)) (distance p10 (vlax-curve-getEndPoint obj_vlax))) v1 (mapcar '- p10 p11) v2 (mapcar '- p10 (setq px (getpoint p10 "\nDonner la distance de décalage entre le bord de la chaussée et le candélabre: "))) det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2) ) e_width (distance p10 px) ) (cond ((> det_or 0.0) (vla-Offset obj_vlax (- e_width))) ((< det_or 0.0) (vla-Offset obj_vlax e_width)) ) (setq ename (vlax-ename->vla-object (setq e_last (entlast))) l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) nil) pt_start (vlax-curve-getStartPoint ename) pt_end (vlax-curve-getEndPoint ename) total_dist (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename)) ) (initget 7) (setq partial_dist (getdist pt_start "\nSpécifiez la longueur du segment: ")) (cond ((> total_dist partial_dist) (setq lst_pt (list pt_start) increment_dist partial_dist js_cand (ssadd) ) (while (< increment_dist total_dist) (setq lst_pt (cons (vlax-curve-getPointAtDist ename increment_dist) lst_pt) increment_dist (+ increment_dist partial_dist) ) ) (setq lst_pt (reverse (cons pt_end lst_pt)) lst_candel lst_pt) (foreach n lst_pt (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv ename (vlax-curve-getParamAtPoint ename n))) dxf_210 (z_dir n (polar n ang (* 0.1 partial_dist))) ) (entmake (list (cons 0 "INSERT") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (cons 8 "ICI-RES-ECP-candelabre") (cons 100 "AcDbBlockReference") (cons 66 0) (cons 2 "candelabre") (cons 10 (trans n 0 dxf_210)) (cons 41 (* 0.1 partial_dist)) (cons 42 (* 0.1 partial_dist)) (cons 43 (* 0.1 partial_dist)) (cons 50 ang) (cons 210 dxf_210) ) ) (entmake (list (cons 0 "SEQEND") (cons 8 "ICI-RES-ECP-candelabre") (cons 62 0) (cons 6 "ByBlock") (cons 370 -2))) (setq js_cand (ssadd (entlast) js_cand)) ) ) (T (princ "\nLa longueur est trop grande pour l'objet!")) ) (initget 7) (setq e_width (- e_width (getdist pt_start "\nDonner la distance de retrait pour les cables: "))) (cond ((> det_or 0.0) (vla-Offset obj_vlax (- e_width))) ((< det_or 0.0) (vla-Offset obj_vlax e_width)) ) (entdel e_last) (setq ename (vlax-ename->vla-object (setq e_last (entlast))) lst_pt nil) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond (js_cand (repeat (setq nb_cand (sslength js_cand)) (setq dxf_ent (entget (ssname js_cand (setq nb_cand (1- nb_cand))))) (setq pt_ins (cdr (assoc 10 dxf_ent)) rot_ins (cdr (assoc 50 dxf_ent))) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(8 . "0") '(62 . 0) '(60 . 0) '(6 . "ByLayer") '(370 . -2) '(100 . "AcDbLine") (cons 10 pt_ins) (cons 11 (polar pt_ins ((if (> det_or 0.0) - +) rot_ins (* pi 0.25)) (* 2 e_width))) '(210 0.0 0.0 1.0) ) ) (setq pt_int (l-coor2l-pt (vlax-invoke (vlax-ename->vla-object (entlast)) 'IntersectWith ename acExtendNone ) T ) ) (if pt_int (setq lst_pt (append pt_int lst_pt))) (setq lst_pt (cons pt_ins lst_pt)) (entdel (entlast)) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(67 . 0) '(410 . "Model") '(8 . "0") '(62 . 0) '(60 . 0) '(6 . "ByLayer") '(370 . -2) '(100 . "AcDbLine") (cons 10 pt_ins) (cons 11 (polar pt_ins ((if (> det_or 0.0) - +) rot_ins (* pi 0.75)) (* 2 e_width))) '(210 0.0 0.0 1.0) ) ) (setq pt_int (l-coor2l-pt (vlax-invoke (vlax-ename->vla-object (entlast)) 'IntersectWith ename acExtendNone ) T ) ) (if pt_int (setq lst_pt (append pt_int lst_pt))) (entdel (entlast)) ) (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car lst_pt) (mapcar 'cadr lst_pt)))) ) ) (entdel e_last) (prin1) ) -
Bonjour, Pour le peu que je sache, il me semble que pour les licences monoposte, Autodesk inscrive des infos dans le Master Boot Record (MBR), ces infos ne sont pas détruites lors d'une désinstallation (mais les choses ont peut être changés). Une manipulation non sans risque, consiste à démarrer Window en mode console de récupération et d'utiliser la commande FIXMBR pour réinitialiser celui-ci. C'est une info, pas un conseil... car tu peut rendre ton PC complétement inopérant et devoir tout réinstaller. NB: Un formatage du disque dur ne détruit pas ces infos dans le MBR, seul un partitionnement le fait.
-
Je rajouterais, pour bien réussir la manip (en tout cas c'est ce que je fais) Une fois ton image en deux couleurs, enregistre au format tiff et prends l'option comme ici: en affichant les informations du devrais avoir des informations similaire à: Dans Autocad si tu active la transparence sur cette image insérée et que tu vois l'arrière plan, c'est que tu as réussi ta conversion en deux tons. Bonne chance
-
Même si à l'affichage, elle est en noir est blanc, elle n'est pas forcément 2 tons. Le format 2 tons permet la transparence ainsi, si par exemple si tu l'insère sur autocad par dessus une autre image, tu verras toujours ton image de dessous plus les traits noir de la nouvelle image insérée. Je te conseille irfanview qui permet d'avoir les bonnes infos sur l'image et de convertir facilement celle-ci (on peut même faire de la conversion par lot) Exemple d'info retournée par la commande "informations"
-
Bonjour, Un truc que j'avais écrit dans le passé (pas retouché depuis) (vl-load-com) (defun c:swap_texte ( / AcDoc Space loop key_mod e1name e2name string1 string2) (defun sel_onlyText (msg / js) (princ msg) (while (not (setq js (ssget "_+.:E:S:N" (list (cons 0 "*TEXT,MULTILEADER,ATTRIB,INSERT") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (vlax-ename->vla-object (cadar (ssnamex js 0))) ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) loop nil ) (initget "Permutation Copie Multiple") (while (eq (setq key_mod (getkword (strcat "\nMode opératoire [Permutation/Copie/Multiple] " (if loop "**MULTIPLE**" "") "<Copie>: "))) "Multiple") (if (eq key_mod "Multiple") (if loop (setq loop nil) (setq loop T)) ) (initget "Permutation Copie Multiple") ) (if (not key_mod) (setq key_mod "Copie")) (cond (loop (while (setq e1name (sel_onlyText (strcat "\nSélectionner le texte source pour la " key_mod " **MULTIPLE**: "))) (setq string1 (if (vlax-property-available-p e1name 'TextString) (vlax-get e1name 'TextString)) e2name (sel_onlyText (strcat "\nSélectionner le texte cible pour la " key_mod " **MULTIPLE**: ")) string2 (if (vlax-property-available-p e2name 'TextString) (vlax-get e2name 'TextString)) ) (cond ((and string1 string2) (if (eq key_mod "Permutation") (vlax-put e1name 'TextString string2)) (vlax-put e2name 'TextString string1) ) ) ) ) (T (setq e1name (sel_onlyText (strcat "\nSélectionner le texte source pour la " key_mod ": ")) string1 (if (vlax-property-available-p e1name 'TextString) (vlax-get e1name 'TextString)) e2name (sel_onlyText (strcat "\nSélectionner le texte cible pour la " key_mod ": ")) string2 (if (vlax-property-available-p e2name 'TextString) (vlax-get e2name 'TextString)) ) (cond ((and string1 string2) (if (eq key_mod "Permutation") (vlax-put e1name 'TextString string2)) (vlax-put e2name 'TextString string1) ) ) ) ) (prin1) ) Un regen peut être utile après exécution suivant l'imbrication ou la nature des objets.
-
Dupliquer une rotation d'un bloc à l'autre
bonuscad a répondu à un(e) sujet de Retnuh dans AutoCAD 2012
-
Créer un boutton de sélection précédente
bonuscad a répondu à un(e) sujet de fabbcad dans AutoCAD 2013
Bonjour, Sans avoir tester, un ; manquant à la fin! Car dans le cas présent tu valide l'option P (par ; ), mais select demande encore d'autres objets, pour achever celle ci, il faut faire encore une validation à blanc (donc un ; ). -
Export TEXT/MTEXT/Attributs en Fichier Texte
bonuscad a répondu à un(e) sujet de lecrabe dans Routines LISP
Salut, Tu as peut être loupé ton copié-collé du code dans ton fichier: une parenthèse manquante? Refais le contenu de ton fichier en prenant soin d'avoir tout bien sélectionné. -
Pourquoi ne pas utiliser simplement SNAPANG et ORTHOMODE? Exemple: ((lambda ( / js dxf_ent snapold orthold flag) (while (not (setq js (ssget "_+.:E:S" '((0 . "LINE")))))) (setq dxf_ent (entget (ssname js 0)) snapold (getvar "SNAPANG") orthold (getvar "ORTHOMODE")) (setvar "SNAPANG" (angle (trans (cdr (assoc 10 dxf_ent)) 0 1) (trans (cdr (assoc 11 dxf_ent)) 0 1))) (setvar "ORTHOMODE" 1) (command "_.line" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ) (setvar "SNAPANG" snapold) (setvar "ORTHOMODE" orthold) (prin1) )) Après on pourrait peut être sophistiquer pour joindre la 1ere ligne (si une extrémité est commune et l'angle équivalent à pi près) Pour les accroches objets, mettre en place un système de filtre .X .Y (.Z)? pour garder les orientation à pi/2. Peut être à creuser...
-
pour trouver un calque quand ya plein de présentation
bonuscad a répondu à un(e) sujet de zou dans AutoCAD 2012
Bonjour, Avec ceci et l'aimable participation de (gile) ; str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)) ) (setq choice (reverse choice)) ) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))) ) ) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) (defun c:Why_by_Layer ( / def_lay key lst_lay lay js n dxf_ent) (setq def_lay (tblnext "LAYER" T) key 0) (setq lst_lay (list (cons (itoa (setq key (1+ key))) (cdr (assoc 2 def_lay))))) (while (setq def_lay (tblnext "LAYER")) (setq lst_lay (cons (cons (itoa (setq key (1+ key))) (cdr (assoc 2 def_lay))) lst_lay)) ) (setq lay (listbox "Calques existants" "Choisir les calques à supprimer" lst_lay 2)) (foreach el lay (setq js (ssget "_X" (list (cons 8 (cdr (assoc el lst_lay)))))) (if js (repeat (setq n (sslength js)) (setq dxf_ent (entget (ssname js (setq n (1- n))))) (princ (strcat "\nL'objet " (cdr (assoc 0 dxf_ent)) " est sur le calque " (cdr (assoc 8 dxf_ent)) " et dans la présentation " (cdr (assoc 410 dxf_ent)) ) ) ) ) ) (prin1) ) Tu as la possibilité de sélectionner plusieurs calques avec "Maj/Shift" dans la boite de dialogue. -
Bonjour, J'avais donnée un exemple ICI
-
Rajouter la variable val_default en déclaration de variable locale: C'est les variables déclarées ici (après defun) (defun c:cut_door ( / [b]js ent dxf_ent dxf_10 dxf_11 alpha d1 tmp_10 tmp_11 d2 df k val_default dx p1 p2 pm[/b]) Ceci permet de remettre les variables déclarées à nil à la fin de l’exécution du programme, autrement elles conservent leur dernières valeurs acquises. Cela peut interféré lors d'une exécution ultérieure ou un autre programme lisp qui aurait (pur hasard) une variable du même nom. En plus cela libère de la mémoire, surtout pour des variables qui serait des listes de taille imposante. L'arrondi à 10 près est calculé avec (* (fix (* (- d2 d1) 0.1)) 10)
-
On peut lui faire afficher la valeur approchante par défaut. Remplace (setq df (getdist dxf_10 "\nDistance finale au mur opposé?: ") k (/ df (distance dxf_10 dxf_11)) ) (initget 6 "70 80 90 100") (setq dx (getdist "\nLargeur d'encadrement de porte de [70/80/90/100]? <90>: ")) (if (not dx) (setq dx 90)) Par (setq df (getdist dxf_10 "\nDistance finale au mur opposé?: ") k (/ df (distance dxf_10 dxf_11)) val_default (* (fix (* (- d2 d1) 0.1)) 10) ) (initget 6 "70 80 90 100") (setq dx (getdist (strcat "\nLargeur d'encadrement de porte de [70/80/90/100]? <" (itoa val_default) ">: "))) (if (not dx) (setq dx val_default)) Rajouter la variable val_default en déclaration de variable locale, c'est mieux
-
Donc en s'appuyant sur la variable, tu pourrais rajouter ceci (avant (entdel ent)): (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 8 dxf_ent) '(100 . "AcDbLine") (cons 10 (trans (polar pm (+ alpha pi) (* 0.5 dx)) 1 0)) (cons 11 (trans (polar (polar pm (+ alpha pi) (* 0.5 dx)) (+ alpha (* pi 0.5)) (getvar "OFFSETDIST")) 1 0)) '(210 0.0 0.0 1.0) ) ) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 8 dxf_ent) '(100 . "AcDbLine") (cons 10 (trans (polar pm alpha (* 0.5 dx)) 1 0)) (cons 11 (trans (polar (polar pm alpha (* 0.5 dx)) (+ alpha (* pi 0.5)) (getvar "OFFSETDIST")) 1 0)) '(210 0.0 0.0 1.0) ) )
-
Donc en sélectionnant un ligne de base (qui sera le mur) et ces 3 distances successives, est ce que ceci te semblerait correct? (defun c:cut_door ( / js ent dxf_ent dxf_10 dxf_11 alpha d1 tmp_10 tmp_11 d2 df k dx p1 p2 pm) (princ "\nChoix de la ligne à couper: ") (while (not (setq js (ssget "_+.:E:S" '((0 . "LINE")))))) (setq ent (ssname js 0) dxf_ent (entget ent) dxf_10 (trans (cdr (assoc 10 dxf_ent)) 0 1) dxf_11 (trans (cdr (assoc 11 dxf_ent)) 0 1) alpha (angle dxf_10 dxf_11) d1 "Origine" tmp_10 dxf_10 tmp_11 dxf_11 ) (while (eq d1 "Origine") (initget 7 "Origine") (setq d1 (getdist dxf_10 "\nDistance du 1er encadrement de porte ou changer [Origine] mesure ?: ")) (if (eq d1 "Origine") (setq dxf_10 tmp_11 dxf_11 tmp_10 alpha (angle dxf_10 dxf_11) tmp_10 dxf_10 tmp_11 dxf_11 ) ) ) (initget 7) (setq d2 (getdist dxf_10 "\nDistance du 2ème encadrement de porte?: ")) (initget 7) (setq df (getdist dxf_10 "\nDistance finale au mur opposé?: ") k (/ df (distance dxf_10 dxf_11)) ) (initget 6 "70 80 90 100") (setq dx (getdist "\nLargeur d'encadrement de porte de [70/80/90/100]? <90>: ")) (if (not dx) (setq dx 90)) (setq p1 (polar dxf_10 alpha (* d1 k)) p2 (polar dxf_10 alpha (* d2 k)) pm (list (* (+ (car p1) (car p2)) 0.5) (* (+ (cadr p1) (cadr p2)) 0.5) (* (+ (caddr p1) (caddr p2)) 0.5) ) ) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 8 dxf_ent) '(100 . "AcDbLine") (cons 10 (trans dxf_10 1 0)) (cons 11 (trans (polar pm (+ alpha pi) (* 0.5 dx)) 1 0)) '(210 0.0 0.0 1.0) ) ) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 8 dxf_ent) '(100 . "AcDbLine") (cons 10 (trans (polar pm alpha (* 0.5 dx)) 1 0)) (cons 11 (trans dxf_11 1 0)) '(210 0.0 0.0 1.0) ) ) (entdel ent) (prin1) )
-
Ce que j'avais compris c'est que l'origine de la seconde mesure était prise à l'opposée. Je pense avoir enfin compris l'énoncé, (la démarche dans le lisp serait semblable) le seul point qui me gêne c'est comment tu défini l'orientation de tes mesures: tu t'appuies sur une ligne existante et cette ligne serait coupée à tes mesures intermédiaires (après correction)?
-
??? Je ne comprends rien à vos énoncés, les gars....
-
Sur ma 2011 la commande JOINDRE de me crée pas une polyligne, cela reste 2 lignes distinctes! Je parle bien bien de la commande "joindre", et non de la commande "pedit" avec l'option "joindre"...
-
Y a un truc qui m'échappe! Et tu utilise JOINDRE... Tu peux pas joindre une ligne ayant une direction différente de la source.
-
Salut, Cela me semble assez simple à traiter. Un truc comme ça par exemple... (defun c:encadrement ( / p1 p2 d1 d2 dx p1p p2p pm) (initget 9) (setq p1 (getpoint "\nPosition de l'origine de la 1ère mesure?: ")) (initget 7) (setq d1 (getdist p1 "\nDistance mesurée?: ")) (initget 9) (setq p2 (getpoint "\nPosition de l'origine de la 2ème mesure?: ")) (initget 7) (setq d2 (getdist p2 "\nDistance mesurée?: ")) (initget 6 "70 80 90 100") (setq dx (getdist "\nEncadrement de porte de [70/80/90/100]? <90>: ")) (if (not dx) (setq dx 90)) (setq p1p (polar p1 (angle p1 p2) d1) p2p (polar p2 (angle p2 p1) d2) pm (list (* (+ (car p1p) (car p2p)) 0.5) (* (+ (cadr p1p) (cadr p2p)) 0.5) (* (+ (caddr p1p) (caddr p2p)) 0.5) ) ) (command "_.line" "_none" p1 "_none" (polar pm (angle p2 p1) (* 0.5 dx)) "") (command "_.line" "_none" p2 "_none" (polar pm (angle p1 p2) (* 0.5 dx)) "") (prin1) )
-
Congé sur une polyligne contenant des arcs
bonuscad a répondu à un(e) sujet de Titifonky dans Pour aller plus loin en LISP
Est ce que tes millier de polylignes ont toutes cette forme (sans tenir compte de la rotation ou de l'échelle)? Si oui, on pourrait envisager de passer temporairement par un bloc qui contiendrait les modifs de raccordement. Remplacer toute les polylignes sélectionnées (1er point = pt insertion) par ce bloc décomposé en insertion en récupérant l'orientation et l'échelle du 1er segment. Autrement j'avais répondu à ce besoin qui est approchant. Si ça peut t'aider... -
Congé sur une polyligne contenant des arcs
bonuscad a répondu à un(e) sujet de Titifonky dans Pour aller plus loin en LISP
Bonjour, En effet "ça fait mal" :wacko: Surtout que je ne vois pas comment palier à cette insuffisance de RACCORD. Je pense que le problème dans ce cas précis et de déterminer les points de sélection qui détermine le sens du raccord. On le voit avec les éléments décomposés en LIGNE, ARC ou le raccord devient possible mais ou les points de sélection déterminent le raccord à mettre en place: arc complémentaire ou pas. Tu as peut être possibilité d'appréhender le problème autrement, mais pour cela il serait bien d'avoir un exemple concret de la situation existante (quelques objets) et ce que tu voudrais obtenir au final. Tu pourrais aussi nous montrer cela ! -
Jalna a bien compris! Je dois souvent sortir des extraits de mon fichier de base pour des besoins divers et variés Les demandes sont plutôt du style: un format A4/A3/A1/A0 englobant telle ou telle zone (la notion précise d'échelle est peu fréquente, ils veulent juste un support papier lisible) Face à ces nombreuses demandes et ne pouvant générer des échelles d'annotation (car souvent les échelles sont plutôt résultantes d'un zoom fenêtre que d'une échelle bien définie), j'ai opté pour des fichiers d'ordre de grandeur: textes pour A4 A3 etc... le suffixe de mon fichier ayant le format papier employé. Ça me convient très bien et beaucoup plus souple que les échelles annotatives (qui m'auraient fait exploser la taille de mon fichier). Le seul inconvénient et pour les modifications: je dois penser à reporter sur ces X fichiers... Heureusement pour la partie texte ce n'est pas tous les jours, en tout beaucoup moins que les sorties folkloriques que l'on peut me faire faire. Je reconnais que cela peut ne pas être adapté forcément à d'autre manière de travailler ou de besoin de corps de métier.
