Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Salut, Pourtant tu es sur la bonne voie Voici un exemple avec CTAB qui tracera un cercle si présentation A4 ou A4 une ligne autrment. ^C^C$M=$(if,$(or,$(eq,$(getvar,ctab),"A4"),$(eq,$(getvar,ctab),"A3")),cercle,ligne)
  2. bonuscad

    Excel vers Autocad ??

    Salut, Toujours avec Bonuscad (zone de téléchargement) tu récupère la routine topo.lsp et le DCL associé (topo.dcl) Sous Excel tu enregistre en mode texte (dans un nouveau fichier de préférence), et tu fais lire ce fichier par la routine. NB: prendre de préférence sous excel, les espaces comme séparateurs.
  3. Tramber, Il n'est pas possible de mixer les 2 mode de création (entmake) et (command). Entmake crée un fichier de définition tamporaire qui sera validé lors de l'instruction (entmake '((0 . "ENDBLK"))). Donc durant cette période, seul entmake est abilité pour ajouter des définitions. La seule astuce possible est de récupérer l'entité crée par un (entget) de la supprimer par un (entdel) et de la recréer par (entmake) à l'aide de la liste retourné par enget, ceci au bon endroit bien sur.
  4. Serge, Une particularité de ENTMAKE et qu'il peut créer le calque même si celui ci n'existe pas. Ex. cette instruction va créer une ligne sur le plan TOTO même si celui ci est inexistant. (entmake '((0 . "LINE") (5 . "2B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "TOTO") (100 . "AcDbLine") (10 118.753 129.067 0.0) (11 264.238 186.718 0.0) (210 0.0 0.0 1.0))) Ce qu'il faut c'est que le nom du calque soit valide. Voilà pour la petite rectification. ;) Bruno
  5. bonuscad

    Adobe Reader 6, c\'est long !

    Patrick avait donné une astuce pour speeder le chargement Acrobat 6.0 (faire une recherche sur CadXP) J'avais fait les manips et ma foi le gain est très apréciable, mais il reste quand même un peu plus long que la version précédente. PS: Jamais rencontré de problème à l'utilisation. MERCI Patrick :P
  6. C'est bien la valeur en pixel en X Y de la barre d'outil. Personellement, j'ai remarqué que la modification de ces valeurs dans le MNU avec recompilation en MNS ne changaient effectivement "que dalle" dans la position du menu si celui avait déjà etait utilisé. Je pense (je m'avance un peu) que la postion des menus utilisés doivent être aussi sauvegardés dans la base de registre et que celle ci l'emporte sur la position défini dans le MNU. Si quelqu'un pouvait confirmer, je tout ouie.
  7. Une demande sur le forum de planetar d'un utilisateur posédant une routine qui ne fonctionnait pas sur des version supérieur à R14,était un peu similaire. Celle-ci devait traiter les lignes. J'avais modifier son code. Iil avait l'air sastifait , donc je pense pouvoir le transmettre ici ;;functions VectorProduct & collinear ;;Armin Antkowiak, Berlin ;;http://www.polyface.de/general.html ;;mailto:info@polyface.de (defun vectorProduct (v1 v2 / ) (list (- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2))) (- (* (caddr v1) (car v2)) (* (car v1) (caddr v2))) (- (* (car v1) (cadr v2)) (* (cadr v1) (car v2))) ) ) (defun collinear (p1 p2 p3 / tol) (setq tol 1.0e-012) (equal '(0.0 0.0 0.0) (vectorProduct (mapcar '- p2 p1) (mapcar '- p3 p1)) tol ) ) (defun c:boucher ( / jsel n ent dxf_ent snd_ent dxf_snd dxf_10 dxf11 dxf_10b dxf_11b temp) (setq jsel (ssget '((0 . "LINE")))) (while (setq ent (ssname jsel 0)) (ssdel ent jsel) (setq n 0) (repeat (sslength jsel) (setq dxf_ent (entget ent)) (cond ((setq snd_ent (ssname jsel n)) (setq dxf_snd (entget snd_ent) dxf_10 (cdr (assoc 10 dxf_ent)) dxf_11 (cdr (assoc 11 dxf_ent)) dxf_10b (cdr (assoc 10 dxf_snd)) dxf_11b (cdr (assoc 11 dxf_snd)) ) (cond ((and (collinear dxf_10 dxf_11 dxf_10b) (collinear dxf_10 dxf_11 dxf_11b)) (if (> (distance dxf_10 dxf_10b) (distance dxf_10 dxf_11b)) (setq temp dxf_10b dxf_10b dxf_11b dxf_11b temp ) ) (if (< (distance dxf_10 dxf_10b) (distance dxf_11 dxf_10b)) (setq temp dxf_10 dxf_10 dxf_11 dxf_11 temp ) ) (ssdel snd_ent jsel) (entdel snd_ent) (setq dxf_ent (subst (cons 10 dxf_10) (assoc 10 dxf_ent) dxf_ent) dxf_ent (subst (cons 11 dxf_11b) (assoc 11 dxf_ent) dxf_ent) ) (entmod dxf_ent) ) ) ) ) (setq n (1+ n)) ) ) (princ) ) Désolé pour les LT :(
  8. Intervenir au même endroit, (defun htype_info ( / htype na flag flag2) (while (not flag2) (if (setq htype '("Block" nil)) (progn (if (not #sprhatch_type) (setq #sprhatch_type "Block"));if (setq na (cadr htype) htype (car htype) );setq (if #clipitres (setq a #clipitres) (setq a (acet-geom-pixel-unit));setq );if (setq #clipitres a) (initget 6) (setq a (getreal (strcat "Tolérance d'erreur des courbes <" (ai_rtos #clipitres) ">: "))) (if (not a) (setq a #clipitres)) Note: Je ne trouve pas très judicieux de modifier une fonction des express, car tes modifs auront peu de chance d'être portable sur une version ultérieure des express.
  9. bonuscad

    repetition d\'attributs

    Salut, Pourquoi ne pas utiliser des attributs à valeur constantes? A ce moment là, lors de l'insertion aucune valeur ne te sera demandé, l'attribut aura sa valeur par défaut. Bruno
  10. bonuscad

    demmande de code

    En complément (itoa) fait la conversion d'un entier en chaine de caractère (Interger TO Alphanuméric) (rtos) fait la conversion d'un réel en chaine de caractère (Real TO String) voilà pour les infos que j'ai oublié
  11. bonuscad

    demmande de code

    (getint = fournir un entier (INTeger) (getreal= fournir un réel (REAL) conseil: tu devrais utiliser la fonction (initget bit de controle) pour tes fonction (getxxx) excepté getstring (getstring) peut être appelé avec l'argument T justement pour permettre la saisie d'espace dans la chaine de texte. La validation ne se fait alors qu'a l'aide de la touche ENTREE Bonne continuation :D
  12. bonuscad

    demmande de code

    Voici un autre exemple qui te montrera de quoi il faut tenir compte pour ne pas avoir de surprise! (defun c:test ( / i nbrf oldtxteval) (setq i 50.0) ;définition de tes variables (setq nbrf 35.0) (setvar "CMDECHO" 1) ;activera l'echo de la commande texte (setq oldtxteval (getvar "TEXTEVAL")) ;enregistre l'état de la variable TEXTEVAL (setvar "TEXTEVAL" 0) ;met la variable TEXTEVAL à 0 (princ "\nSolution avec TEXTEVAL à 0") (if (zerop (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) ; Teste si la hauteur du style de texte est fixée (command "_.-text" pause "" "" (rtos (/ i nbrf) 2 2)) ;système décimal avec 2 unité de précision (command "_.-text" pause "" (rtos (/ i nbrf) 2 2)) ) (setvar "TEXTEVAL" 1) ;met TEXTEVAL à 1 (princ "\nSolution avec TEXTEVAL à 1") (if (zerop (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) (command "_.-text" pause "" "" (/ i nbrf)) ; evalue directement l'expression lisp (command "_.-text" pause "" (/ i nbrf)) ) (setvar "TEXTEVAL" oldtxteval) ;restaure l'état de la variable TEXTEVAL )
  13. Salut, Encore juste une petite modif et cela devrait aller! ;) original: (defun htype_info ( / htype na flag flag2) (while (not flag2) (if (setq htype (dd_htype_info)) (progn (setq na (cadr htype) htype (car htype) );setq modifié: (while (not flag2) (if (setq htype '("Block" nil)) (progn (if (not #sprhatch_type) (setq #sprhatch_type "Block"));if (setq na (cadr htype) htype (car htype) );setq Ormis cela, les modifs précédentes de Patrick 35 devraient être bonne (pas testé) En tout ca de rajouter (if (not #sprhatch_type) (setq #sprhatch_type "Block")); permet de remplir avec les coupes de bloc. Bonne chance
  14. Salut, Encore juste une petite modif et cela devrait aller! ;) original: (defun htype_info ( / htype na flag flag2) (while (not flag2) (if (setq htype (dd_htype_info)) (progn (setq na (cadr htype) htype (car htype) );setq modifié: (while (not flag2) (if (setq htype '("Block" nil)) (progn (if (not #sprhatch_type) (setq #sprhatch_type "Block"));if (setq na (cadr htype) htype (car htype) );setq Ormis cela, les modifs précédentes de Patrick 35 devraient être bonne (pas testé) En tout ca de rajouter (if (not #sprhatch_type) (setq #sprhatch_type "Block")); permet de remplir avec les coupes de bloc. Bonne chance
  15. Vous connaissez votre unité Vous savez à quelle échelle vous voulez mettre votre fenêtre de présentation. Mais vous êtes perdu dans les paramètres. :casstet: Essayez ceci (defun c:qz ( / unit_draw fz f_m flag) (cond ((ssget "_X" '((0 . "VIEWPORT"))) (if (or (eq (getvar "USERS5") "") (not (eq (substr (getvar "USERS5") 1 2) "qz"))) (progn (initget "KM ME CM MM") (if (not(setq unit_draw (getkword "\nDessin réalisé en [KM/ME/CM/MM] : "))) (setq unit_draw "ME") ) (cond ((eq unit_draw "KM") (setq unit_draw 1000000) ) ((eq unit_draw "ME") (setq unit_draw 1000) ) ((eq unit_draw "CM") (setq unit_draw 10) ) ((eq unit_draw "MM") (setq unit_draw 1) ) ) (setvar "USERS5" (strcat "qz" (itoa unit_draw))) ) (setq unit_draw (atoi (substr (getvar "USERS5") 3))) ) (initget 6 "5 10 25 50 100 200 250 500 1000 2000 2500 5000 10000 25000 50000 1000000") (setq fz (getint "\nChoix de l'échelle[5/10/25/50/100/200/250/500/1000/2000/2500/5000/10000/25000/50000/1000000]? <100>:")) (if (not fz) (setq fz 100)) (if (eq (getvar "TILEMODE") 1) (setvar "TILEMODE" 0)) (if (not (eq (getvar "CVPORT") 1)) (command "_.pspace")) (princ "\nChoisissez la fenêtre à mettre à l'échelle") (while (null (setq f_m (ssget "_:S" '((0 . "VIEWPORT"))))) (princ "\nN'est pas une fenêtre") ) (setq f_m (ssname f_m 0)) (if (eq (boole 1 16384 (cdr (assoc 90 (entget f_m)))) 16384) (progn (command "_.mview" "_lock" "_off" f_m "") (setq flag T) ) (setq flag nil) ) (command "_.mspace") (setvar "CVPORT" (cdr (assoc 69 (entget f_m)))) (command "'_.zoom" "_ce" (getvar "VIEWCTR") (strcat (itoa unit_draw) "/" (itoa fz) "XP")) (command "_.pspace") (if flag (command "_.mview" "_lock" "_on" f_m "")) ) (T (princ "\nAucunes fenêtres dans l'espace papier") ) ) (princ) )
  16. Salut, Comme c'est gratuit ce n'est pas parfait. Blague à part, je connais l'existence de ce problème qui est lié à windows XP. Je ne l'ai pas encore clairement identifier, mais je pense que c'est dut à l'accés aux fichiers à travers la commande "SHELL" dans la routine. Au fait c'est bien ça ? Tu es sous XP! Malheuresement je ne suis pas équipé de XP et ne peut débuger ce problème. Si tu le désire, tu peux essayer de m'aider à le corriger. Voici mon courriel prof. pour converser car je ne pense pas que le forum soit adapté pour faire cela. Bruno.Valsecchi@equipement.gouv.fr
  17. Bonjour, Une solution utilisant un module extene voir: http://www-2.cs.cmu.edu/~quake/triangle.html Dans la zone téléchargement free de CADxp tu dois trouver bonuscad. Tu devra donc récupérer au minimun dans le zip triangle.exe et trinod.lsp, que tu placera dans un dossier de recherche d'autocad. Tu pourras alors générer des 3Dfaces ou Pmaille ou 3Dsolid (je déconseille la dernière option qui avorte souvent). Merci à Jonathan Richard Shewchuk pour ce module externe. ;)
  18. bonuscad

    echelle x 1 y 1 z 10

    Comme Eric, si ça concerne les unités des axes des SCU, ce n'est pas possible. Je ne sais pas ce que tu veut faire, mais tu peux utiliser un subterfuge pour simuler une déformation des unités. Exemple à paufiner et a adapter: (defun c:deformX (/ ) (initget 8) (setq echll (getpoint "\nRapport de déformation <1,0.5>: ")) (if (eq echll ()) (setq echll '(1 0.5))) (setvar "ucsfollow" 0) (command "_.ucs" "_y" (angtos (atan (/ (sqrt (- (* (car echll) (car echll)) (* (cadr echll) (cadr echll)) ) ) (cadr echll) ) ) 0 4 ) ) )
  19. Je viens de tomber par hasard sur la provenance du bloc "_OPEN" C'est un bloc interne provenant de la cotation, voir l'aide sur la variable "DIMBLK" Voilà, si ca peut t'aider a te séparer de ce bloc.
  20. bonuscad

    BuG dans Map2004

    Pour ma part sous 2002, je ne rencontre pas ce problème :exclam:
  21. Salut, Tu peux peut être essayer la commande -WBLOC J'insiste sur le tiret Ex: -wbloc (boite de dialogue de fichier) Entrez le nom du bloc existant ou (= (bloc=fichier de sortie)/* (dessin entier)] : *
  22. Salut, Inspiré de la discussion http://www.cadxp.com/sujetXForum-3162.htm qui m'a permis d'écrire plusieurs routines basée sur ce code: Elever une perpendiculaire, continuer une tangente a un segment ou un arc, interroger un angle entre 2 segments, faire une bissectrice entre 2 segment, interroger 1 rayon Voici cette dernière ou tu retrouvera le rayon calculer sur un arc de polyligne. Je te laisse méditer dessus :) (defun near_vertex_arr (obj / obj dxf_obj obj_vlax pt_sel pt_dist param_start param_end perim_obj e_next l_som l_arr l_dist n n_first n_second) (setq dxf_obj (entget (car obj))) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car obj)) pt_sel (vlax-curve-getClosestPointTo obj_vlax (trans (osnap (cadr obj) "_near") 1 0)) pt_dist (vlax-curve-getDistAtPoint obj_vlax pt_sel) 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)) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq l_som (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_obj)) l_arr (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_obj)) ) ) (T (setq e_next (entnext (car obj))) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) (if (zerop (boole 1 223 (cdr (assoc 70 dxf_next)))) (setq l_som (cons (cdr (assoc 10 dxf_next)) l_som) l_arr (cons (cdr (assoc 42 dxf_next)) l_arr) ) ) (setq e_next (entnext e_next)) ) (setq l_som (reverse l_som) l_arr (reverse l_arr)) ) ) (setq l_dist (mapcar '(lambda (x) (vlax-curve-getDistAtPoint obj_vlax x)) l_som)) (if (vlax-curve-isClosed obj_vlax) (progn (setq l_som (append l_som (list (car l_som)))) (setq l_dist (append l_dist (list perim_obj))) ) ) (setq n 0) (repeat (1- (length l_dist)) (if (and (> pt_dist (nth n l_dist)) (< pt_dist (nth (1+ n) l_dist))) (setq n_first n n_second (1+ n)) ) (setq n (1+ n)) ) (list (trans (nth n_first l_som) 0 1) (trans (nth n_second l_som) 0 1) (nth n_first l_arr)) ) (defun c:q_ray ( / ent dxf_ent typent pt_sel l_2pt) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nInterroger le rayon du segment arrondi: ")))) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) pt_sel (osnap (cadr ent) "_near")) (cond ((and (or (eq typent "ARC") (eq typent "CIRCLE")) (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0))) (setq l_2pt (distance pt_sel (trans (cdr (assoc 10 dxf_ent)) 0 1))) ) ((or (and (eq typent "LWPOLYLINE") (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0))) (and (eq typent "POLYLINE") (zerop (boole 1 124 (cdr (assoc 70 dxf_ent)))) (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) ) ) (setq l_2pt (near_vertex_arr ent)) (if (zerop (caddr l_2pt)) (princ "\nCe segment est droit et ne peut être interrogé!") (setq l_2pt (/ (distance (car l_2pt) (cadr l_2pt)) (sin (* 2.0 (atan (caddr l_2pt)))) 2.0))) ) (T (if (not (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0))) (princ "\nEntité non parralèlle au SCG.") (princ "\nCet objet ne peut être interrogé!") ) ) ) (if (eq (type l_2pt) 'REAL) (progn (alert (strcat "\nRayon = " (rtos (abs l_2pt) 2 3) ) ) (princ (strcat "\nRayon = " (rtos (abs l_2pt) 2 3) ) ) ) ) (setvar "cmdecho" 1) (princ) )
  23. bonuscad

    Fichier de formes SHX

    Si tu veux vraiment te débarrasser de ces type de lignes Va dans le menu déroulant "format" Puis dans "type de ligne..." Dans la boite de dialogue clique sur le bouton "Charger" Choisi le fichier "acadisoline" (généralement par défaut) Et la tu compare les type de ligne que tu as dans la 1ere boite avec la seconde (pas facile !) Ceux qui ne se trouvent pas dans la seconde boite sont succeptible d'être des personnalisée. Relèvent ces noms Applique un filtre sur tous les objet avec ces noms pour puovoir leur affecter un autre type de ligne. Mais tu peux opter pour l'aide de Serge. Pour Serge Si c'est un fichier de police (s'il donne suite) je suis interressé par tes conclusions.
  24. bonuscad

    Fichier de formes SHX

    Pour ma part je n'ai jamais utilisé la solution d'autodesk. Je pense que tu devrais te pencher sur les type de lignes utilisés dans ton dessin. Il est fort possible qu'un ou des type de lignes fassent référence à un fichier de forme SHX spécifique. La routine du lien ne traite peut être pas ce problème. Soit tu réaffecte les objets concernés a un autre type de ligne (utilise les filtres) Soit tu recrée ton type de ligne Si tu adopte la 2eme solution je te propose d'utiliser le code suivant, tu pourra modifier alors les paramètre qui clochent, ex le nom de la forme SHX utilisée. Fonctionne a partir de 2002 et au delà je pense. (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) )
  25. Serge, Est ce que la solution de transformé ta fameuse ligne en: (mapcar '(lambda (x) (trans x e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (setq e (car (entsel))))))) Ne serait t'elle pas plus sûr (tenir compte du dxf 210?) pour ramener les points dans le SCG?
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité