-
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
-
Regarde le sujet déjà traité ici: http://www.cadxp.com/sujetXForum-3351.htm Si ma solution t'interesse regarde dans le point .DOC pour l'instal et la remarque concernant la routine suivant si tu travaille sous XP ou non
-
Enlève le "_close" comme tu as fait et remplace le en fin de script par "_closeall" C'est sur que 1000 fichier, ca va faire lourd. J'espère pour toi qu'ils soient de tailles correctes.
-
Au fait, sur le site que tu nous indiques, il est spécifié: Tu devrais te renseigner.
-
Ben, pour ton 1er post, moi tu me colle! Cependant je me suis interressé a ce format de fichier .hpp dont tu parles et que je ne connaissais pas du tout. Après une recherche, j'ai l'impression que ce type de fichier est rattaché au C++ Je suis donc tombé sur cette page, si ca peut être interessant ? http://www.mailnavigator.com/alphabrowser.html Attention, je suis peut être complétement à coté de la plaque. Tiens nous au courant, ca peut toujours servir. ;)
-
Salut Didier, Je viens de prendre connaissance de ta réponse, et j'avoue que je suis surpris. Toi qui recommande de poser des questions claires et précises, je trouve que ta réponse n'est pas assez argumentée car je ne comprends pas le sens de ta réponse. Si tu as une "totomobile" avec GPS ABS et tous les "trucs" en "S" , je pourrais dire aussi que c'est n'importe quoi, que c'est n'est plus de la conduite "pure", mais pourtant cela existe et devient le standard et on pourrait dire aussi que c'est de l'anti-automobile. PS: Je confirme que c'était pou le fun, magré qu'il m'arrive de concevoir des ouvrages d'art en 3D, je ne vais pas jusqu'a mettre les écrous sur les poutres métalliques. Pour moi cette routine n'a aucune utilité, je laisse les personnes de la partie apprécier.... Je l'ai fais en 3D car dans l'énoncé il été demandé des coupes 2D, et comme dit Patrick_35, je voulais éviter le copier coller d'une solution toute faite sans aucune réflexion. Sans rancune ;)
-
Ca ne vas pas tarder, j'ai fais a peu près le tour de ce que je pouvais partager. Mais il restera toujours de bonnes questions à résoudre, ou de bonnes idées à exploiter. Et à l'aide des intervenants de ce forum, il y aura toujours de quoi se mettre sous la dent et de l'aide quand on "coince" ;)
-
J'oubliais, Tu as aussi la commande "_Boundary". La différence et que tu conserve ta région.
-
Salut, Tu pourrais, dans un premier temps, essayer de décomposer simplement ta région. Tu dois (peut être) obtenir par exemple des Lignes et des Arcs. L'option "Pedit" "Multiple" "Joindre" te permettra de reconstituer facilement ta polyligne. Bruno V.
-
Salut Si j'ai bien compris ta demande? Le code suivant te permettra de récupérer la définition d'un type de ligne utilisé d'un dessin dont tu ne possède pas la source (dans le cas où "Etransmit" n'a pas été utilisé) Si le type de ligne comporte des formes, il va de soi que la routine ne vas pas te fabriquer le SHX dépendant. elle ne se charge que du fichier .LIN. Je n'ais jamais testé ce code sous 2005, tiens moi au courant s'il y a un problème. (pour information) (defun c:model_typline ( / ent ent_dxf nam_tl def_tl prec m_adir m_abas nam_lin def_lin nbr_lin w_line lg_tiret tp_cpx cod_shx ss_ent styl_tl file_shx scal_motif rot_motif x_motif y_motif str_motif) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nChoix du TypeLigne modèle: ")))) (setq ent_dxf (entget (car ent)) nam_tl (assoc 6 ent_dxf)) (cond ((and (cdr nam_tl) (/= (cdr nam_tl) "ByLayer") (/= (cdr nam_tl) "ByBlock")) (initget 4) (setq def_tl (entget (tblobjname "Ltype" (cdr nam_tl))) prec (getint (strcat "\nPrécision décimale désirée<" (itoa (getvar "LUPREC")) ">: ")) ) (if (not prec) (setq prec (getvar "LUPREC"))) (setq m_adir (getvar "angdir") m_abas (getvar "angbase") nam_lin (strcat "*" (cdr (assoc 2 def_tl))) def_lin (strcat "," (cdr (assoc 3 def_tl))) lg_lin (cdr (assoc 40 def_tl)) nbr_line (cdr (assoc 73 def_tl)) w_line "\nA" ) (setvar "angdir" 0) (setvar "angbase" 0) (textscr) (princ (strcat "\n" nam_lin def_lin)) (princ w_line) (while (/= (caar def_tl) 49) (setq def_tl (cdr def_tl)) ) (while def_tl (cond ((eq 49 (caar def_tl)) (setq lg_tiret (cdar def_tl)) (princ (strcat "," (rtos lg_tiret 2 prec))) ) ((eq 74 (caar def_tl)) (setq tp_cpx (cdar def_tl)) ) ((eq 75 (caar def_tl)) (setq cod_shx (cdar def_tl)) (cond ((zerop cod_shx) (princ (strcat ",[\"" (cdr (assoc 9 def_tl)) "\"")) ) ((eq tp_cpx 4) (princ ",[*") ) ) ) ((eq 340 (caar def_tl)) (setq ss_ent (entget (cdr (assoc 340 def_tl))) styl_tl (cdr (assoc 2 ss_ent)) file_shx (cdr (assoc 3 ss_ent)) ) (if (eq styl_tl "") (princ (strcat (itoa cod_shx) "," file_shx)) (princ (strcat "," styl_tl)) ) ) ((eq 46 (caar def_tl)) (setq scal_motif (cdr (assoc 46 def_tl))) (princ (strcat ",S=" (rtos scal_motif 2 prec))) ) ((eq 50 (caar def_tl)) (setq rot_motif (cdr (assoc 50 def_tl))) (princ (strcat ",R=" (angtos rot_motif 0 prec))) ) ((eq 44 (caar def_tl)) (setq x_motif (cdr (assoc 44 def_tl))) (princ (strcat ",x=" (rtos x_motif 2 prec))) ) ((eq 45 (caar def_tl)) (setq y_motif (cdr (assoc 45 def_tl))) (princ (strcat ",y=" (rtos y_motif 2 prec) "]")) ) ((eq 9 (caar def_tl)) (setq str_motif (cdr (assoc 9 def_tl))) ) ) (setq def_tl (cdr def_tl)) ) (setvar "angdir" m_adir) (setvar "angbase" m_abas) ) (T (princ "\nImpossible de récuperer le type de ligne de l'objet pointé.")) ) (setvar "cmdecho" 1) (prin1) ) Tu n'as plus qu'a faire un copier-coller du résultat de la fonction (depuis l'écran texte "F2") dans un fichier LIN de nom adéquat. Bruno V.
-
Bonjour, J'ai trouvé l'exercice amusant, je me suis donc amusé à faire une routine, bien que ce ne soit pas mon domaine (J'ai une formation de technicien topographe). Je la transmets ici car je n'ais pas parfaitement respecté l'énoncé, donc tu ne pourras la présenter comme solution. Mon but était de te monter les possibilités du lisp.. Le résultat peut paraître sophistiqué, mais le programme est relativement simple (pas de boucles, pas de fonctions récursives ou fonctions complexe), c'est plus proche d'un script (execution ligne par ligne) Si la vriable "SHORTCUTMENU" est à 11. Tu pourras choisir par le click-droit les diamètres nnominaux. Voici la bête (pas de test approfondis, c'était pour le fun) (defun c:ecrou ( / old_osmd typ_ecr pt_ins rot_ecr diam_n d l_plat pas h_ecr d_i s0 s1 s2 r_c h_c) (setvar "cmdecho" 0) (setq old_osmd (getvar "osmode")) (initget "Standard Haut Bas _Standard Up Down") (setq typ_ecr (getkword "\nType d'écrou [standard/Haut/Bas]: ")) (if (not typ_ecr) (setq typ_ecr "Standard")) (initget 9) (setq pt_ins (getpoint "\nSpécifier le point d'insertion de l'écrou: ")) (setq rot_ecr (getorient pt_ins "\nSpécifier l'orientation de l'écrou<0.0>: ")) (if (not rot_ecr) (setq rot_ecr 0.0)) (initget 1 "1.6 2 2.5 3 4 5 6 8 10 12 14 16 20 24 30 36 42 48") (setq diam_n (getkword "\nDonner le diamètre nominal[1.6/2/2.5/3/4/5/6/8/10/12/14/16/20/24/30/36/42/48]: ")) (cond ((eq diam_n "1.6") (setq d 1.6 l_plat 3.2 pas 0.35)) ((eq diam_n "2") (setq d 2.0 l_plat 4.0 pas 0.4)) ((eq diam_n "2.5") (setq d 2.5 l_plat 5.0 pas 0.45)) ((eq diam_n "3") (setq d 3.0 l_plat 5.5 pas 0.5)) ((eq diam_n "4") (setq d 4.0 l_plat 7.0 pas 0.7)) ((eq diam_n "5") (setq d 5.0 l_plat 10.0 pas 0.8)) ((eq diam_n "6") (setq d 6.0 l_plat 10.0 pas 1.0)) ((eq diam_n "8") (setq d 8.0 l_plat 13.0 pas 1.25)) ((eq diam_n "10") (setq d 10.0 l_plat 16.0 pas 1.5)) ((eq diam_n "12") (setq d 12.0 l_plat 18.0 pas 1.75)) ((eq diam_n "14") (setq d 14.0 l_plat 21.0 pas 2.0)) ((eq diam_n "16") (setq d 16.0 l_plat 24.0 pas 2.0)) ((eq diam_n "20") (setq d 20.0 l_plat 30.0 pas 2.5)) ((eq diam_n "24") (setq d 24.0 l_plat 36.0 pas 3.0)) ((eq diam_n "30") (setq d 30.0 l_plat 46.0 pas 3.5)) ((eq diam_n "36") (setq d 36.0 l_plat 55.0 pas 4.0)) ((eq diam_n "42") (setq d 42.0 l_plat 65.0 pas 4.5)) ((eq diam_n "48") (setq d 48.0 l_plat 75.0 pas 5.0)) ) (cond ((eq typ_ecr "Standard") (setq h_ecr (* 0.8 d))) ((eq typ_ecr "Up") (setq h_ecr d)) ((eq typ_ecr "Down") (setq h_ecr (* 0.5 d))) ) (setvar "osmode" 0) (setq d_i (- d (* 1.0825 pas))) (command "_.ucs" "_origin" pt_ins) (if (not (zerop rot_ecr)) (command "_.ucs" "_z" (angtos rot_ecr))) (command "_.polygon" "6" '(0.0 0.0 0.0) "_circumscribed" (/ l_plat 2.0)) (command "_.extrude" "_last" "" h_ecr 0.0) (setq s0 (entlast)) (command "_.cylinder" '(0.0 0.0 0.0) (/ d_i 2.0) h_ecr) (setq s1 (entlast)) (command "_.subtract" s0 "" s1 "") (setq s0 (entlast)) (setq r_c (/ (/ l_plat 2.0) (cos (/ pi 6.0)))) (setq h_c (* r_c (/ (sin (/ pi 6.0)) (cos (/ pi 6.0))))) (command "_.cone" '(0.0 0.0 0.0) r_c h_c) (setq s1 (entlast)) (command "_.cylinder" '(0.0 0.0 0.0) r_c h_c) (setq s2 (entlast)) (command "_.subtract" s2 "" s1 "") (setq s1 (entlast)) (command "_.move" s1 "" '(0.0 0.0 0.0) (list 0.0 0.0 (- h_ecr (* (sin (/ pi 6.0)) (- r_c (/ l_plat 2.0)))))) (command "_.subtract" s0 "" s1 "") (setq s0 (entlast)) (command "_.cone" '(0.0 0.0 0.0) (/ d 2.0) (- (* (/ d 2.0) (/ (sin (/ pi 6.0)) (cos (/ pi 6.0)))))) (setq s1 (entlast)) (command "_.move" s1 "" '(0.0 0.0 0.0) (list 0.0 0.0 h_ecr)) (command "_.subtract" s0 "" s1 "") (setq s0 (entlast)) (command "_.cone" '(0.0 0.0 0.0) r_c (- h_c)) (setq s1 (entlast)) (command "_.cylinder" '(0.0 0.0 0.0) r_c (- h_c)) (setq s2 (entlast)) (command "_.subtract" s2 "" s1 "") (setq s1 (entlast)) (command "_.move" s1 "" '(0.0 0.0 0.0) (list 0.0 0.0 (* (sin (/ pi 6.0)) (- r_c (/ l_plat 2.0))))) (command "_.subtract" s0 "" s1 "") (setq s0 (entlast)) (command "_.cone" '(0.0 0.0 0.0) (/ d 2.0) (* (/ d 2.0) (/ (sin (/ pi 6.0)) (cos (/ pi 6.0))))) (setq s1 (entlast)) (command "_.subtract" s0 "" s1 "") (command "_.vpoint" "_rotate" (angtos (- (* 2.0 pi) (/ pi 4.0))) (angtos (/ pi 6.0))) (command "_shademode" "_gouraud") (setvar "osmode" old_osmd) (setvar "cmdecho" 1) (prin1) ) Tu peux mettre les commande s "_.vpoint" et "_.shademode" en rem ";" NB: Créé sous une version 2002 Bruno V.
-
Je ne sais pas comment est définie ta variable longueur! Si ta variable est une chaine de texte , ta remarque est bonne. Si ta variable est un réel ou un entier, il faudra la convertir avant de l'associer au groupe 1 du code DXF de l'entité texte, car ce groupe n'accepte qu'une chaine de caractères.
-
En appliquant ce que t'a dit Patrick_35 Il te faut abandonner l'usage de la commande DDEDIT En employant plutôt (entsel) -> 1 seule sélection au lieu de (ssget) -> un jeu de sélection de 1 ou plusieurs entités, cela donne : (setq textmodif (entget (car (entsel "\nChoix du texte à modifier: ")))) (entmod (subst (cons 1 (rtos longueur)) (assoc 1 textmodif) textmodif))
-
Ludwig, Rien à rajouter sur la déclaration des variables, Théodoric a bien fait cela. A savoir que la déclaration est soit "globale", soit "locale" (Une discussion existe a ce propos sur ce sujet dans ce forum) Par contre une remarque sur l'emploi des fonctions (get......) Je te conseille vivement d'utiliser la fonction (initget [bit de controle]) avant leur appel. En effet si l'utilisateur n'entre pas une valeur pour la tolérance, le programme va être arrêté. (pas cool) :mad: Voici par exemple ce que tu peux faire: (initget (+ 1 4)) (setq tol (getdist "\nSélectionnez une tolérance: ")) Ou mieux encore: (initget 4) (setq tol (getdist "\nSélectionnez une tolérance:<0.0> ")) (if (not tol) (setq tol 0.0)) De cette manière l'utilisateur peut simplement valider la tolérance à 0.0 par défaut. ET si la variable n'est pas déclarée en globale, tu pourrais envisager de récupérer sa valeur d'une utilisation antérieure pour la reproposer par défaut. Je te laisse chercher cette manière, si elle t'interesse. Bonne continuation
-
erreur pour l\' impression help me et problême pour remplacer les font
bonuscad a répondu à un(e) sujet de Flibustier dans AutoCAD 2004
Pour la question 2: Je recommande un excellent Lisp StripMtext qui traite les mises en forme à l'intérieur d'un Mtext, il correspond à l'attente de Flibustier. Je pense qu'il faut garder ce genre d'outil dans un coin, on peut être content de l'avoir à disposition lorsqu'on est confronté à ce genre de problème pour traiter l'ensemble des textes multiligne d'un dessin . PS:Garder le lien car le programme subi souvent des révisions http://www.users.qwest.net/~sdoman/ Bravo à l'auteur! -
Connais pas! :( Mais j'ai trouvé ceci: http://www.cg34.fr/territoire/Metacad/accueil.asp
-
T'aider c'est possible! Mais il faudrait en connaitre un peu plus sur l'objectif a atteindre et le language a utiliser. Macro ou Lisp? , ce n'est pas la même chose (une macro fonctionne sous une version LT) Le bloc est un bloc simple ou avec des attributs a renseigner? Il faut respecter une momenclature de calque ou c'est libre? Reposte ta réponse dans le bon forum A+
-
Voilà une correction qui garde ton esprit de départ: (defun c:ml (/ e_ref LIGNE LONG selection jeu en e_name n LONGn) (setq LIGNE (entget (setq e_ref (car (entsel "\nLigne de référence: "))))) (setq LONG (distance (cdr(assoc 11 LIGNE)) (cdr(assoc 10 LIGNE)))) (setq SELECTION (ssadd e_ref)) (princ (strcat "\nChoisissez la zone ou rechercher les lignes de longueur " (rtos long))) (setq jeu (ssget '((0 . "LINE"))) n 0) (if jeu (repeat (sslength jeu) (setq en (entget (setq e_name (ssname jeu n))) n (1+ n)) (setq LONGn (distance (cdr(assoc 11 en)) (cdr(assoc 10 en)))) (If (eq LONG LONGn) (ssadd e_name SELECTION) ) ) ) (command "_.erase" selection "") (princ) ) Essaye de comprendre là où tu as péché, les petites erreurs sont repérables :casstet: foreach n'etait pas adapté pour parcourir la sélection qui n'est pas une liste. PS: Tu peux aussi utiliser la fonction (equal LONG LONGn x) avec x représentant l'écart accepté pour la comparaison des longueurs
-
Tout à fait, C'est toi qui a donné la soluce a travers Foxit. J'ai aussi une solution pour convertir des pdf en txt , mais c'est une autre histoire. D'ailleurs ça ne fonctionne pas (ou mal) avec un document pdf comportant des images, ce qui est le cas ici. Comme quoi il est difficile de protèger quoi ce soit à 100%. A nouveau merci pour ta propre solution pour outrepasser les protections d'acrobat reader. ;)
-
On peut imprimer, mais j'attends la permission d'Eric pour dire comment. ..... :exclam:
-
En lisp, je vois pas non plus :( Peut être en VBA? Jette un oeil a ce lien! http://www.vbfrance.com/code.aspx?ID=6699
-
NIne (orthographe ?) Mais les procédures lisp sont internationales. Je pense que celle ci sont assez abouties pour que l'on puisse s'appuyer sur ce qu'elle retourne comme résultat En plus elles ne comportent aucun message en allemand. Mais pour notre ami Alsacien c'est du choucroute garnie ;)
-
Waouw :D J'ai mis du temps a me décider à l'essayer, je ne regrette pas d'avoir fait le pas, dans mon environnement professionnel (proxy, firewall, anti-virus et j'en passe) c'est le jour et la nuit. Suivant les heures de connexion CadXP mettait jusqu'a 30 à 45 sec. pour s'afficher avec IE, maintenant 5 sec. au plus suffisent. C'est ADOPTE. sauf containtes je reviendrais pas en arrière. Un grand MERCI pour l'info. Bruno V.
-
Pour ceux qui veulent manipuler les bits, vous trouverez des procédures lisp interessantes à http://www.autolisp-tutorial.mapcar.net/bits1.html http://www.crlf.de/Dokumente/Logical%20LISP.html Ca peut aider a comprendre l'utilisation des opérateur booléen.
-
script insertion d\'image
bonuscad a répondu à un(e) sujet de ribbit dans Personnalisation, macros, DIESEL
Une explication sur l'utilisation du "." devant le nom de la commande. Rappel: Il est possible de redéfinir une commande par "NONDEF et REDEF (pour la remmettre a son état original) L'emploi du point sert a être sûr que l'on appele bien la commande originale et non une commande redéfinie qui ne ferait pas forcément la même chose et pourait faire avorter un script ou un programme lisp. C'est donc juste une sécurité de format d'appel de commande. Je pense qu'il est mieux (comme le language international) de prendre cette habitude pour la portabilité et être sur qu'aucune personnalisation d'autocad n'interfère avec le script ou le programme. Bruno V. -
Salut, Il y a un petit utilitaire (Freebies), s'appelant "FixCombos". Je m'en sert sous 2002, Version au-dessus je n'en sais rien! voir à http://www.cadwerx.net Si j'ai bien compris le souhait ;)
