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. bonuscad

    Lancement de LISP

    Salut, Regarde déjà la discussion à ce propos: http://www.cadxp.com/sujetXForum-2209.htm S'il reste des zones d'ombre, tiens nous au courant ;)
  2. bonuscad

    Fichier de formes SHX

    Un fichier de formes ou un fichier de police sont construit de même façon. Seul le début du fichier est différent pour un fichier de police, il contient des information sur la police et sa définition générale. Si le topo.shx ne t'a pas étét fourni avec le fichier dwg, il est possible (coïncidence) que ce ne soit pas le bon fichier. Le fichier formes topo.shx réclamé contient certainement des symboles topographiques: grilles regard, bouche d'égout, lampadire etc... Il peut aussi être utilsé pour une définition de type de ligne, ex ligne PTT, EDF etc.. Le mieux est de réclamer auprès du fournisseur du fichier, le fichier manquant. Si cela n'est plus possible voir la solution suivante chez autodesk http://usa.autodesk.com/adsk/servlet/ps/item?siteID=123112&id=2896848&linkID=2475323 Il te faut savoir que tu rique de perdre des représentations peut être importantes dans ton plan. Je ne serais pas surpris de certaine imcompatibilité, surtout de fichier de police shx personnalisée entre les version 2002 et les versions supérieures. A prouver !
  3. Décidement, j'assure pas un caramel :( Je répond à côté et mon code après vérifs est nul (erroné dans les grand nombres) Je retire donc tout ce que j'ai dit, virez moi ces posts :mad:
  4. Zut, :o je viens de m'apercevoir que j'ai répondu à l'inverse Désolé! Ben comme ça ta les 2 ;)
  5. En v'la une autre. Je suis sur qu'il y a mieux ! (defun nbrtostr (nb / ) (cond ((eq nb 10) "A") ((eq nb 11) "B") ((eq nb 12) "C") ((eq nb 13) "D") ((eq nb 14) "E") ((eq nb 15) "F") (T (itoa nb)) ) ) (defun c:dec2hex ( / nb f_o l_o d_o) (initget 5) (setq nb (getint "\nDonnez un nombre entier: ")) (setq f_o (/ nb 16) l_o (rem nb 16)) (if (> f_o 15) (setq d_o "1" f_o (rem f_o 16)) (setq d_o "") ) (strcat d_o (nbrtostr f_o) (nbrtostr l_o)) )
  6. Tramber le roi du script aurait du pouvoir te faire cela ;) Pour une fois que la situation s'y prêtait bien, en tout cas comme tu veux l'utiliser (rectangle avec 2 pts, sans options) ^C^Ciconescu inactif scu origine \rectangle 0,0 \scu precedent iconescu actif;
  7. Salut, Pour l'utilité avérée, je pense que suivant le corps de métier, on peut apprécier ou non. Par contre vérifie bien, on peut hachurer et créer une région à partir d'une spline. Et tu peux allez voir ici pour un utilitaire de conversion: http://www.cadalyst.com/cadalyst/article/articleDetail.jsp?id=82132
  8. Bonjour, J'ai essayé de me pencher sur les réacteurs Donc j'ai bien réussi à faire fonctionner l'exemple simple, mais j'avoue que des zones d'ombre persistent, malgré l'exécution pas à pas de l'exemple. (Je trouve que le résultat des fonctions n'est pas transparent et n'aide pas à la compréhension) Est ce que quelqu'un connaitrait un lien traitant du B.A.BA (ou pour les nuls :D ) des réacteurs. De préférence en Français... Merci
  9. Serge, J'ai réussir à faire ce que je voulais ;) Cette routine retourne les points, dans le scu courant, les plus proches sur le parcours du polyligne 2D ou 3D. Celle ci peut être lissée, pas splinée et les mailles sont refusées. (defun draw_pt (pt / pt1 pt2 pt3 pt4) (setq rap (/ (getvar "viewsize") 50) pt1 (list (+ (car pt) rap) (+ (cadr pt) rap)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap)) pt3 (list (- (car pt) rap) (- (cadr pt) rap)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap)) ) (grdraw pt pt1 -1) (grdraw pt pt2 -1) (grdraw pt pt3 -1) (grdraw pt pt4 -1) ) (defun c:near_vertex ( / obj dxf_obj obj_vlax pt_sel pt_dist param_start param_end perim_obj e_next l_som l_dist n n_first n_second result_vertex) (while (not (setq obj (entsel "\nChoix d'une polyligne ")))) (cond ((or (eq (cdr (assoc 0 (setq dxf_obj (entget (car obj))))) "LWPOLYLINE") (and (eq (cdr (assoc 0 dxf_obj)) "POLYLINE") (zerop (boole 1 116 (cdr (assoc 70 dxf_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))) ) (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)) ) (setq e_next (entnext e_next)) ) (setq l_som (reverse l_som)) ) ) (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)) ) (setq result_vertex (list (trans (nth n_first l_som) 0 1) (trans (nth n_second l_som) 0 1))) (redraw) (draw_pt (car result_vertex)) (draw_pt (cadr result_vertex)) (princ result_vertex) ) (T (princ "\nN'est pas une polyligne valable pour cette fonction!") ) ) (princ) )
  10. Salut Serge, Je crois que tu n'a pas compris ma remarque. Ce que je voulais dire, le mieux c'est un exemple. Fais un rectangle, applique ta routine en donnant par exemple le milieu du segment bas horizontal. Les points retournés sont effectivement le précédent et suivant. Edite ce rectangle pour y inserer un sommet dans le segment haut horizontal, ce sommet tu le place près du milieu du segment bas, tu obtiens une figure CONCAVE Si tu applique ta routine a cette nouvelle polyligne les sommets retournés ne sont pas le précédent et suivant. Normal car le test ce fait sur des distances droite et non curvilignes.
  11. Je crois avoir saisis ta façon de bosser. Mais sur des linéaire de plan comme ceci, j'utiliserais plutôt les fonction de la commande "-VUE" avec le options "Sauver" et "Rappel" Tu pourrais par exemple établir automatiquement par "script" ;) ou "lisp" des vues à chaque PK (points kimomètriques) et les restaurer a n'importe quel moment. Cela sans utiliser l'EP avec de multiple fenêtres. De plus cette commande est transparente et peut être appelée au travers d' autres commandes de dessin ou de modification. '.-vues Cet une veille commande qui a tendance à être oublier et inexploitée.
  12. Merci de la contribution de Bruno et Serge, J'ai réussi à faire un test en incorporant la fonction qui m'interressait, et cela fonctionne. Il ne me reste plus qu'a décortiquer pour bien comprendre, surtout la notion de nettoyage ciblée de Serge. Bonne solution, que je vais exploitée :P
  13. Salut Serge, C'est une fonction que je voulais réaliser depuis longtemps. :P Cependant il existe encore un Hic dans ta fonction, elle fonctionne bien en cas de polyligne "tendue", par contre si un sommet vient à se rapprocher au segment sélectionné (une polyligne en "serpentin"), les sommets retournés ne sont plus ceux qu'on attend. Je pense que je vais creuser dans la direction de comparaison de distance de parcours plutôt que de comparaison de distance à sommets, si j'y arrive ! ;) va falloir que je me mette aux fonction (vlax-curve....)
  14. Peut être une solution, mais je ne suis pas encore très famillier avec les réacteurs. D'après ce que j'ai pus en saisir, il s'agit d'attacher des évenements à des objet graphique lors qu'ils sont manipulés. Hors dans mon cas, je pense que c'est plutôt l'inverse. Ce serait un évenement qui devrait agir sur un objet. Si c'est faisable avec les réacteurs, pourrait-tu me donner un exemple de code simple afin de mieux comprendre le fonctionnement? Merci en tout cas de ta réponse :D
  15. bonuscad

    Lenteur édition de blocs

    Désolé pour tes déboires, mais c'est indépendant de ma volonté. Ce que je peux te proposer, c'est de te passer les sources SHP et que tu essaye de les recompiler avec 2005. (SANS GARANTIE) PS: Je ne comprends pas ce que tu entends par "virer les en-têtes" Merci en tout cas de la remontée d'info, quand j'aurais 2005 je me pencherais sur la question! ;)
  16. bonuscad

    Lenteur édition de blocs

    C'est vrai que sous 2005 je n'ai pas pu tester. Mais je suis surpris car je me suis appuyé sur leur modéle standard fourni en 2002. Normalement c'est une police supportant les normes UNICODE. Rappel: Les polices doivent être placées dans le dossier des fontes ET si tu utilise MTEXT, il faut se rappeler qu'il supporte mal les polices SHX (il utilise une police proxy) Dans ce cas affecter un style a la police SHX et travailler avec ce style pour les MTEXT. Ceci est propre à toutes les polices SHX.
  17. bonuscad

    Lenteur édition de blocs

    Salut Romain, Peut être une alternative pour les polices SHX, des très anciennes polices que j'ai retravaillé. Si ça t'interresse voir: http://discussion.autodesk.com/thread.jspa?threadID=275207 Une macro redefinissant la police est aussi une bonne solution. On rebascule avant une sortie papier. J' ai vu déjà une telle macro, fait une recherche, car je ne sais plus où.
  18. Essaye sans le tiret devant Sous 2002 fonctionne indifféremment avec ou sans tiret. :o
  19. Salut, Il est difficile de contouner ces boite de dialogue en lisp. Cependant apres avoir fait (setvar "FILEDIA" 0) (command "-MISENPAGEDANS") Ceci pourra peut être te faciliter la vie (voir l'aide sur "misenpagedans") Il ya aussi (initdia 0), une fonction non documenté qui fonctionne pour TRACER mais a priori ne fonctionne pas pour MISENPAGE PS: Si quelqu'un a des infos supplémentaire sur cette fonction, elles sont les bienvenues.
  20. Salut Tramber, On laisse tomber le script ;) Plus sérieusement, pour les entités "INSERT" (bloc) et "POLYLINE" , tu es obligé de parcourir la définition avec (entnext). Cette fonction te retournera des entités "VERTEX" tant qu'il y en aura, tu sauras que tu es arrivé au bout quand (entnext) te renverra une entité "SEQEND". Ton code doit donc contenir une boucle pour parcourir ce type d'entité. Soit tu utilise l'entité "SEQEND", soit le code 71 pour déterminer l'arrêt de ta boucle. exemple d'accés aux sous-entités: (entget (entnext (cdar (entget (car (entsel "\nChoix d'une entité POLYLINE ou INSERT ")))))) Cela retourne la défintion du 1er sommet (pour 1 polyligne) Pour Didier On dessine des Polyface avec la commande PMAILLE (_PFACE) Cette commande est franchement inutilisable manuellement, son intérêt est de l'utiliser en programmation.
  21. Si les paramètres sont fixes, je soutiens Tramber, un script dans ce cas est beaucoup plus simple: effacer f 0,0 5,5 s f 0,0 1,1
  22. bonuscad

    recherche texte

    Salut, Hé va falloir t'y mettre à te creuser la tête si tu as souvent des besoins spécifiques. ;) (defun c:nobless ( / chaine js n) (setq chaine (getstring T "\nEntrer le texte à localiser: ")) (setq js (ssget "_X" (list '(0 . "TEXT") (cons 1 chaine))) n 0) (cond (js (textscr) (repeat (sslength js) (princ "\nTexte trouvé dans l'onglet : ") (princ (cdr (assoc 410 (entget (ssname js n))))) (setq n (1+ n)) ) (princ (strcat "\nSoit " (itoa n) " textes trouvés au total.")) ) (T (princ "\n Aucun texte correspondant trouvé") ) ) (princ) )
  23. Tu ne peut le faire le faire qu'avec du texte multiligne "MTEXT" Tape ton texte, exemple: CADxp^ Met en surbrillance xp^ avec ton curseur et soit avec le click-droit tu choisi empiler ou le bouton a/b Avec le click-droit tu peut paramétrer l'empilage avec propriété. Les caractères spéciaux pour l'empilement sont: ^ # / Voir l'aide sur Mtext pour plus d'info.
  24. Salut Serge, En effet je n'ai pas traité l' EO et vérifié la sélection. Mais toi qui a l'habitude de condenser le code, voilà que tu nous fais des truc a rallonge avec des (vla-truc) Corrigé comme ceci c'est identique, sans aucune définition de variable (foreach n (cons "Model" (layoutlist)) (setvar "CTAB" n) (if (not (cadr (sssetfirst nil (ssget "_X" (cons (cons 410 (getvar "ctab"))'((0 . "INSERT"))))))) (prin1) (c:burst) ) ) Nobless parlait de cartouche dans les présentations (il ne veut peut être pas toucher à l'EO le monsieur), je donnais juste la base du code. Et puis dans le cas de calque verrouillés ni la tienne, ni la mienne de fonctionne. La gestion des erreurs, VASTE programme et c'était pas mon but ici. Il faudra que tu m'explique pourquoi tu a fait tout ce code en vla (EO s'appelle toujours "Model" en lisp) Bruno Valsecchi allias bonuscad
  25. Hello, le lisp à la rescousse ;) (foreach n (layoutlist) (setvar "CTAB" n) (sssetfirst nil (ssget "_X" (cons (cons 410 (getvar "ctab"))'((0 . "INSERT"))))) (c:burst)) Cela va traitre tout les blocs sans distinction Si tu veux un bloc particulier, change: '((0 . "INSERT)) en '((0 . "INSERT") (2 . "nom du bloc a traiter)) Tu peux suprimer aussi (sssetfirst ......), la commande te demandera alors la sélection pour chaque présentation. Good luck!
×
×
  • 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é