-
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
-
Une anomalie en Diesel, normal, pas normal?
bonuscad a répondu à un(e) sujet de bonuscad dans Personnalisation, macros, DIESEL
Merci Christian d'avoir confirmer. Si on ne peut pas réaliser des enchainements, cela enlève tout l'interêt et la puissance du language diesel. Pour moi, j'aurais envie de le classer comme bug, surtout que je n'ai pas vu dans l'aide (je suis peut être passé à coté) une stipulation sur ce comportement. Ou alors est ce un comportement normal de l'évaluateur diesel? -
Si en copiant ce qui suit sur la ligne de commande, tu obtiens un nombre: = 0 : pas de probléme > 0 : tu as des entités construire dans un SCU non parallèle au SCG. [surligneur](sslength (ssget "_X" '((-4 . "!=") (210 0.0 0.0 1.0)))) [/surligneur] A tu utilisé la macro ?: ^C^Cucsfollow;0;_.ucs;_world;_move;_all;;0,0,1e99;;_move;_all;;0,0,-1e99;;^Z pour ramener le Z des entités à zéro. Cette macro ne change pas le vecteur de direction des entités, mai seulement le Z. Je pense que flatten des expresstools gére ce paramètre (à voir). En tout cas tant que les entités ont des vecteurs de directions différents entre elles, beaucoup de commande d'édition ne peuvent pas être effectuées.
-
Une anomalie en Diesel, normal, pas normal?
bonuscad a posté un sujet dans Personnalisation, macros, DIESEL
Bonjour, A priori dans une même macro; changer une variable et effectuer une lecture de celle-ci AVANT et APRES donne l'impression que la lecture n'est pas actualisé. Est ce qu'un Dieseliste (sans camboui) pourrait comfirmer. Ex: ^C^C_.snapang;\_.userr1;$M=$(getvar,snapang);_.snapang;\_.userr2;$M=$(getvar,snapang);^Z dans un bouton, vous l'executez (donnez des valeurs différentes), vous interrogez les variables "userr1" et "userr2" manuellement après l'exécution. Elles ont les mêmes valeurs !!!!! :casstet: Si ça fonctionne chez vous, sous quelle version d'Autocad? -
Ou ce SUJET qui rejoint le même thème.
-
J'allais suggérer aussi un problème de pilote de traceur. En effet j'avais rencontré aussi des problémes sur l'impression de police ttf qui s'imprimaient en dehors de la fenêtre :o La mise à jour du pilote avait corrigé le problème. Ce que tu peux faire pour savoir si c'est le cas, c'est de choisir un périphérique générique (DWF EPS JPG ....) de faire une sortie sur fichier et de voir si tu as le même problème. ;)
-
apercu avant impression traceur
bonuscad a répondu à un(e) sujet de fabcad dans Périphériques de sortie, impression
Normalement les drivers HP (tu passes par les propriétées dans le gestionnaire windows) offre un onglet "Layout View" ou tu as une coche a valider (pour avoir une prévisualisation). Par défaut cet coche n'est pas activée. Cependant la prévisualisation ne vaut en aucun cas celle d'autocad. Elle est très sommaire, mais elle te permet de voir l'encombrement de ton dessin sur la feuille et de valider ou d'annuler l'impression. Personnellement l'apercu d'Autocad me suffit emplement et on voit mieux les oublis ou les erreurs de configuration de plumes, d'échelle etc... Ce genre d'apercu pourrait-il te suffire quand même? -
Sympa ton menu CoolMan ;) Il faut se cantonner aux variables les plus courantes, car le menu risque d'être excessivement long. mais sympa tout de même ce système de coche. Pourrais tu donner un extrait du montage du menu. Pour s'en inspirer ;)
-
Peut-on Verrouiller une présentation ?
bonuscad a répondu à un(e) sujet de jifi dans CAO, généralités
C'est la solution la plus simple, mais pas forcément la plus efficace. ;) J'avais posé la même question, et on avait réussi à m'aiguiller pour mon besoin précis. Si ça t'interresse, cest ICI Ca devient un peu plus ardu :( -
Essaye de voir ce FIL ça rejoint ta demande. Cela doit être juste un problème de syntaxe, guillemet, anti-slash, slash. Tu arrive au but ;) Le "^Z" veut dire que plus aucun caractères lu après lui ne sera interpreté. Je le met à cause du copier-coller pour eviter que des espaces après le ^Z ne soit interprété comme des "Entrées" au clavier et fausse la macro. Si la ligne est bien écrite, elle n'est pas utile, elle est là pour plus de sureté et compréhension. [Edité le 11/10/2005 par bonuscad]
-
Essaye d'insérer dans ta ligne de script en début et à la fin: ^C^CFILEDIA;0;_.open;"c:\\dessin\\topo\\parcelle.dwg";FILEDIA;1;^Z
-
Peut-on Verrouiller une présentation ?
bonuscad a répondu à un(e) sujet de jifi dans CAO, généralités
Salut Jifi, Pour ma part, je pense que l'usage de la command "NONDEF" (_undefine) et "REDEF" (_redefine) pourait peut être correspondre a ton besoin soit en l'automatisant avec des scripts ou du lisp. Schèma de fonctionnement par exemple en lisp. Au début (command "_.undefine" "_pagesetup") ;misenpage (command "_.undefine" "_layout") ;presentation (command "_.undefine" "_plot") ;traceur (command "_.undefine" "_plottermanager"):gesttraceur Pour utiliser ta redefinition de la commande TRACEUR préparametré: (defun c:plot () (command "_.-plot" ......) ...) (defun c:traceur (C:_plot)) A la fin (si voulu, on redifini les commande standards) (command "_.redefine" "_plot") (command "_.redefine" "_pagesetup") (command "_.redefine" "_layout") (command "_.redefine" "_plottermanager") C'est la solution la plus simple à mettre en oeuvre. NB: Ne pas oublier que malgré tout les commandes restent accessibles si elles sont précédées d'un point "." (par le clavier bien entendu) -
Bonjour Christian Une démarche que j'ai adoptée pour les variables. Un p'tit fichier lisp chargé par mon menu perso (.MNL) Si j'utilise mon menu, je sais que les variables suivantes seront systématiquement établies. Cette liste n'est pas exhaustive, mais me semble regrouper MES variables préférées, ou celles qui ont tendances à "sauter" toutes seules. Une technique parmi tant d'autre. (pour une LT, on pourrait le faire avec un script de démarrage). Contenu du fichier Lisp (fixvar.lsp) (setvar "ATTDIA" 1) (setvar "ATTMODE" 1) (setvar "ATTREQ" 1) (setvar "BLIPMODE" 0) (setvar "CMDDIA" 1) (setvar "DEMANDLOAD" 2) (setvar "DRAGMODE" 2) (setvar "FILEDIA" 1) (setvar "GRIPS" 1) (setvar "HIGHLIGHT" 1) (setvar "INDEXCTL" 3) ;(setvar "LAYOUTREGENCTL" 2) (setvar "MBUTTONPAN" 1) (setvar "MEASUREINIT" 1) (setvar "MEASUREMENT" 1) (setvar "MIRRTEXT" 0) (setvar "OSNAPCOORD" 2) (setvar "PICKADD" 1) (setvar "PICKAUTO" 1) (setvar "PICKDRAG" 0) (setvar "PICKFIRST" 1) (setvar "PICKSTYLE" 1) (setvar "PLINETYPE" 2) (setvar "REGENMODE" 1) (setvar "SDI" 0) (setvar "SHORTCUTMENU" 11) (setvar "TEXTEVAL" 0) (setvar "TEXTFILL" 1) (setvar "UCSFOLLOW" 0) (setvar "VISRETAIN" 1) (setvar "XLOADCTL" 2)
-
C'est tout bête, mais on ne sait jamais... Avant d'aller plus loin, colle les lignes qui suivent en ligne de commande, tu auras peut être la réponse. J'ai 1 chance sur 2 ;) (if (eq (logand 32 (getvar "pdmode")) 32) (princ "\nLes points SONT representés avec des cercles") (princ "\nLes points NES SONT PAS représentés avec des cerles") )
-
Définis la variable 'SNAPBASE avant de mettre en place tes hachures. Un lisp trouvé sur le net pour changer après coup la base des hachures. (defun C:HPSTART ( / ent pt1 pt2) (setvar "CMDECHO" 0) (while (not (setq ent (entsel " \nSélectionner le modèle de Hachure à éditer: ")))) (cond ((eq (cdr (assoc 0 (entget (car ent)))) "HATCH") (setq pt1 (getpoint "\nPoint d'origine à établir aux hachures: ")) (setq pt2 (list (car PT1) (cadr PT1))) (setvar "SNAPBASE" pt2) (if (zerop (cdr (assoc 76 (entget (car ent))))) (command "_.-HATCHEDIT" ent "" "" "" "" "") (command "_.-HATCHEDIT" ent "" "" "" "") ) (command "_.SNAPBASE" "0,0") ) (T (princ "\nL'objet n'est pas une hachure.")) ) (setvar "CMDECHO" 1) (princ) )
-
Pb long. de nom de calque dans barre outil
bonuscad a répondu à un(e) sujet de makhno dans AutoCAD 2005
Voir ce SUJET Ou une recherche avec "FixCombos" sur le net -
Selectionner plusieurs sommets
bonuscad a répondu à un(e) sujet de pmx dans AutoCAD LT 2000 à LT 2002
La manip d'Eric est la seule valable avec les grips pour étirer (avec le même vecteur d'étirement) plusieurs sommets d'une polyligne. On maintient la touche "Shift" enfoncé et on sélectionne les sommets désirés.(ils se mettent en rouge) On relache la touche "Shift" et on sélectionne un grip de base (rouge ou bleu) qui a pour effet de basculer en mode de commande grip (Etirer/deplacer/rotation/echelle/mirroir) Etirer est la seule option qui agit sur les grips séléctionnés, on peut donc étirer tout les sommets séléctionnes du même vecteur d'étirement. Pour d'autres modifications en mode multiple et rapide de certain sommets pas de solution rapide sans programmation. -
Récuperer l\'ID d\'un objet (polyligne, plygone..)
bonuscad a répondu à un(e) sujet de ticoko dans AutoCAD 2000 à 2002
Je me suis mélangé les pinceaux, j'ai confondu le handdle et le nom de l'entité. MAE CULPA, merci d'avoir rectifié -
Récuperer l\'ID d\'un objet (polyligne, plygone..)
bonuscad a répondu à un(e) sujet de ticoko dans AutoCAD 2000 à 2002
Comme dit Rebcao, je ne sais pas si tu seras plus avancé avec cela. Le maintien (handdle: code DXF 5) est un numéro (Hexa) d'ID attribué a chaque entité pour UNE session. Il n'est pas fixe et change à chaque session. Donc si une application utilise les numéros de maintiens, cela devra être fait dans la même session unique pour obtenir une execution correcte de l'application. Tu ne peux stocker ces valeurs (dans un fichier par exemple) pour les utiliser ultérieurement. En conclusion je ne pense pas que les handdles soient appropriés pour effectué un traitement sur un fichier, l'utilité je pense est plus ponctuelle (car l'information est volatile d'une session à l'autre). -
Toutes les options de SSGET
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Merci pour l'eclaircissement de l'option :E , j'avais compris (tout ce qui est dans la cible du curseur) ce qui n'était pas exactement ça J'ai réussi a comprendre l'option :D Elle permet de mettre plusieurs fois dans le jeu de sélection une MEME entité en cliquant plusieurs fois dessus (sslength (ssget "_:D" )) L'option :L qui permet d'exclure les entités des calques verrouillés Je n'ai pas réussi à faire fonctionner les autres: mais je pense que B est équivalent à l'option Boite de Select capture ou fenetre suivant le sens. :N doit permettre de sélectionner des entités imbriquées (mais comment?) :P doit normallement rejeter les entités fenêtres (j'ai essayé sans succés) M doit éviter la mise en surbrillance des objets selectionnés (pour entité complexe) -
Toutes les options de SSGET
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Je viens de faire un essai avec cette option. Je ne sais pas si, suivant la version d'Autocad cela est diffèrent. En tout cas sur 2000. si j'ai des doublons d'arc par exemple (command "_list" (ssget "_+.:E:S" '((0 . "ARC"))) "") me retourne (n trouvé) alors que (command "_list" (ssget "_:S" '((0 . "ARC"))) "") ne me retourne 1 SEULE (single) entité L'option "+." est elle efficace ? En plus je ne comprens pas trop l'interêt de coupler ces 2 options. Pourtant je l'ai vu souvent employée dans des routines, et je l'ai moi même copier bêtement pour l'appliquer, mais maintenant j'ai un doute. Mais il me semblait l'avoir testé sous 2005 avec un résultat correcte. -
Je ne sais pas si ce script amélioré pourrait te rendre service. Peut être peut-il te simplifier la saisie. ((lambda ( / js dis_pt pt_target pt_source) (setq js (ssget)) (cond (js (initget 7 "Position" ) (setq dis_pt (getdist (getvar "TARGET") "\nEntrer la distance/donner un 2ème point ou [Position] de la cible et caméra: ")) (cond ((eq dis_pt "Position") (setq pt_target (getpoint (getvar "TARGET") (strcat "\nSpécifiez le nouvel emplacement de la cible <" (rtos (car (getvar "TARGET"))) "," (rtos (cadr (getvar "TARGET"))) "," (rtos (caddr (getvar "TARGET"))) ">: "))) (if (null pt_target) (setq pt_target (getvar "TARGET"))) (initget 1) (setq pt_source (getpoint pt_target "\nSpécifiez l'emplacement de la caméra: ")) (command "_.dview" js "" "_points" pt_target pt_source "_distance" "") ) (T (command "_.dview" js "" "_distance" dis_pt) ) ) ) ) )) Tu peux essayer ceci en faisant un copier-coller sur ta ligne de commande.
-
Bonjour, Je viens de lire un post (sur le forum US d'autodesk) avec une réponse interessante sur les options de (ssget) Voici un copier-coller de la réponse: ;) Voir le FIL original
-
Générer automatiquement des fichiers DWG
bonuscad a répondu à un(e) sujet de pultelu dans AutoCAD 2005
Une ébauche d'automatisation en lisp. A paufiner suivant les besoins (chemin d'enregistrement par ex) ((lambda ( / def_lay nam_lay js) (setq def_lay (tblnext "LAYER" T)) (setq nam_lay (cdr (assoc 2 def_lay))) (cond ((setq js (ssget "_X" (list (cons 8 nam_lay)))) (command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "") ) ) (while (setq def_lay (tblnext "LAYER")) (setq nam_lay (cdr (assoc 2 def_lay))) (cond ((setq js (ssget "_X" (list (cons 8 nam_lay)))) (command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "") ) ) ) (prin1) )) Tu copies-colles l'ensemble des lignes sur la ligne de commande -
Une routine similaire au express avec un cercle ou polyligne comme contour. (defun def_bub_pl (ls lb flag_closed / ls lb rad a l_new) (if (not (zerop flag_closed)) (setq ls (append ls (list (car ls))))) (while (cadr ls) (if (zerop (car lb)) (setq l_new (append l_new (list (car ls)))) (progn (setq rad (/ (distance (car ls) (cadr ls)) (sin (* 2.0 (atan (abs (car lb))))) 2.0) a (- (/ pi 2.0) (- pi (* 2.0 (atan (abs (car lb)))))) ) (if (< a 0.0) (setq a (- (* 2.0 pi) a))) (if (or (and (< (car lb) 0.0) (> (car lb) -1.0)) (> (car lb) 1.0)) (setq l_new (append l_new (reverse (cdr (reverse (buble_pts (polar (car ls) (- (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb))))))) (setq l_new (append l_new (reverse (cdr (reverse (buble_pts (polar (car ls) (+ (angle (car ls) (cadr ls)) a) rad) (car ls) (cadr ls) rad (car lb))))))) ) ) ) (setq ls (cdr ls) lb (cdr lb)) ) (append l_new (list (car ls))) ) (defun buble_pts (pt_cen pt_begin pt_end rad sens / inc ang nm p1 p2 lst) (setq inc (angle pt_cen (if (< sens 0.0) pt_end pt_begin)) ang (+ (* 2.0 pi) (angle pt_cen (if (< sens 0.0) pt_begin pt_end))) nm (fix (/ (rem (- ang inc) (* 2.0 pi)) (/ (* pi 2.0) 72.0))) ) (repeat nm (setq p1 (polar pt_cen inc rad) inc (+ inc (/ (* pi 2.0) 72.0)) lst (append lst (list p1)) ) ) (setq p2 (polar pt_cen ang rad) lst (append lst (list p2)) ) (if (< sens 0.0) (reverse lst) lst) ) (defun make_fence ( / ) (cond ((eq typent "LWPOLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) lst (mapcar '(lambda (x) (trans x (car ent) 1)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) l_bub (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_ent)) lst (def_bub_pl lst l_bub closed) ) ) ((eq typent "POLYLINE") (setq closed (boole 1 (cdr (assoc 70 dxf_ent)) 1) e_next (entnext (car ent)) ) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) (if (zerop (boole 1 223 (cdr (assoc 70 dxf_next)))) (setq lst (cons (trans (cdr (assoc 10 dxf_next)) (car ent) 1) lst) l_bub (cons (cdr (assoc 42 dxf_next)) l_bub) ) ) (setq e_next (entnext e_next)) ) (setq lst (reverse lst) l_bub (reverse l_bub) lst (def_bub_pl lst l_bub closed) ) ) ((eq typent "CIRCLE") (setq lst (buble_pts (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) (polar (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) 0.0 (cdr (assoc 40 dxf_ent))) (polar (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) (- (* 2.0 pi) (/ (* pi 2.0) 36.0)) (cdr (assoc 40 dxf_ent))) (cdr (assoc 40 dxf_ent)) 1 ) lst (append lst (list (car lst))) closed 1 ) ) (T (princ "\nN'est pas un Cercle ou une Polyligne!")) ) ) (defun c:Clip_image ( / ent dxf_ent typent closed lst l_bub e_next osmd) (while (null (setq ent (entsel "\nChoix du contour d'évidement: ")))) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (make_fence) (cond ((and lst (not (zerop closed))) (if (equal (last lst) (car lst)) (setq lst (cdr lst))) (setq osmd (getvar "osmode")) (setvar "osmode" 0) (setvar "cmdecho" 1) (command "_.undo" "_group") (command "_.imageclip" pause "_new" "_polygonal") (foreach n lst (command n)) (command (car lst) "" "") (command "_.undo" "_end") (setvar "cmdecho" 1) (setvar "osmode" osmd) ) ) (prin1) ) Si ta délimitation est une spline/ellipse fermée. Tu peux convertir celle-ci en polyligne au préalable avec la routine suivante.. (defun C:S-E2PL ( / ent typent dxf_ent obj_vlax param_start param_end perim_obj pt_start pt_end res_track flag_ucs last_e old_osmd old_pdmd l_pt) (while (null (setq ent (entsel "\nChoix de la Spline ou Ellipse à convertir en polyligne: ")))) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent)))))) (cond ((or (eq typent "SPLINE") (eq typent "ELLIPSE")) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car ent)) param_start (vlax-curve-getStartParam obj_vlax) param_end (vlax-curve-getEndParam obj_vlax) perim_obj (vlax-curve-getDistAtParam obj_vlax (+ param_start param_end)) pt_start (vlax-curve-getStartPoint obj_vlax) pt_end (vlax-curve-getEndPoint obj_vlax) ) (initget 6) (setq res_track (getdist (cadr ent) (strcat "\nDistance de résolution<" (rtos (/ perim_obj 100.0)) ">: ")) last_e (entlast) old_osmd (getvar "osmode") old_pdmd (getvar "pdmode") ) (if (not res_track) (setq res_track (/ perim_obj 100.0))) (initget "Oui Non _Yes No") (if (eq (getkword "\nVoulez vous faire une projection sur le SCU courant? [Oui/Non]: ") "Yes") (setq flag_ucs nil) (progn (command "_.ucs" "_entity" (car ent)) (setq flag_ucs T) ) ) (cond ((and (eq typent "SPLINE") (not (zerop (boole 1 1 (cdr (assoc 70 dxf_ent)))))) (setq l_pt '("_close")) ) ((and (eq typent "ELLIPSE") (zerop (cdr (assoc 41 dxf_ent))) (eq (cdr (assoc 42 dxf_ent)) (* 2 pi))) (setq l_pt '("_close")) ) (T (setq l_pt (cons (trans pt_end 0 1) '(""))) ) ) (setvar "osmode" 0) (setvar "pdmode" 1) (setvar "cmdecho" 0) (command "_.measure" (car ent) res_track) (while (and (= (cdr (assoc 0 (setq dxf_ent (entget (entlast))))) "POINT") (not (equal (entlast) last_e)) ) (setq l_pt (cons (trans (cdr (assoc 10 dxf_ent)) 0 1) l_pt)) (entdel (entlast)) ) (command "_.pline" (mapcar 'command (cons (trans pt_start 0 1) l_pt))) (if flag_ucs (command "_.ucs" "_previous")) (initget "Oui Non _Yes No") (if (not (eq (getkword "\nEffacer l'entité source [Oui/Non] : ") "No")) (entdel (car ent)) ) (setvar "osmode" old_osmd) (setvar "pdmode" old_pdmd) (setvar "cmdecho" 1) ) (T (princ "\nN'est pas une Spline ou Ellipse!")) ) (prin1) ) (princ "\nS-E2PL.LSP chargé. Tapez S-E2PL pour convertir SPLINE ou ELLIPSE en POLYLIGNE.") (prin1) Avec ceci tu pourras faire de belles délimitations d'images dans l'espace objet.
-
un fichier dxf qui ne veut pas s\'ouvrir
bonuscad a répondu à un(e) sujet de miamy dans AutoCAD LT 2004
Ultime solution si DXF de type ASCII et non binaire. Un bon éditeur de texte et potasser le DXF. Car dans ce type de fichier l'erreur renvoie un numéro de ligne du fichier DXF qui ne peut être interprété. Cela aide déjà pour le débug du fichier. Si gros fichier arme toi de patience pour le corriger, car si l'erreur est répétitive :mad:
