-
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
-
Oui, C'est bien cela que je voulais faire découvrir à Bred, le code DXF 42 et 43 des Mtext qui donnent la hauteur et la largeur de l'encombrement du texte. Ces dimensions sont par rapport au SCO de l'objet Mtext. Je n'ai jamais eu de problème avec les styles !?!? La version que j'ai pointé est nettement améliorable, les sous-fonctions peuvent être remplacé par des (trans) bien pensé pour obtenir les points de la boite dans le SCG et construire une poly2D ou 3D (si on voulais étendre la fonction à des SCU non parallèles) avec (entmake) Donc je pense qu'aucun appel à "command" est possible.
-
Un sujet qui pourra peut être t'aider pour ton problème sur les MTEXT Je suis sur que tu vas m'améliorer tout ça de facon élégante ;) [Edité le 30/5/2007 par bonuscad]
-
Ca y est, c'est le nouveau jeu de la semaine. rebcao a supplanté Eric Moi aussi je dirais le 26. A moins que ce ce soit le 5 qui caresse la cuisse de la jolie demoiselle, sous le regard envieux du 4 et 8. Le petit copain 22 est rassuré par la main affectueuse posée sur son épaule (faudrait pas qu'il remarque quelque chose...) ;)
-
Alors là il faut revoir ton dessin depuis le début. Lors de la mise en place de tes objets il faut te fixer une précision de résolution et dessiner avec le mode RESOL "Actif" quand cela est nécessaire. De cette manière la commande distance par exemple te renverra une distance arrondi même avec une précision élevée et les accroches objets activés. Si tu veux "régulariser" des dimensions d'objet, tu peux essayer d'utiliser ce Lisp A UTILISER avec précaution, il modifie les points de définitions des objets
-
Utilises (getfiled) Ex: (setq blk (getfiled "Sélection d'un bloc externe" "" "dwg" 2)) (command "_.-insert" blk "_none" '(0.0 0.0 0.0) 1.0 1.0 0.0)
-
Tout à fait de cet avis... C'est pour ça que je pense que pour une fois le lisp n'est pas adapté a ce genre de d'analyse. Je n'ai aucune connaissance en C++ mais je pense que programmer avec ce langage pour produire un ARX serait là meilleure solution pour traité un nombre (généralement conséquent) de points. Moi je me suis tourné vers un programme tierce (licence libre, mais Copyright 1996 Jonathan Richard Shewchuk) pour faire ce genre de traitement. Voir ma page. Trinod.lsp pourrais être largement amélioré, ce qui serait bien, c'est de contourné les appels à "SHELL" qui pose des problèmes suivant les versions de Windows et/ou d'Autocad. Les paramètres de triangle.exe sont un peu compliqués, mais ont peut faire des maillages de tout type. Il sait géré les notions de trous dans le maillage à l'aide de lignes de contour en 3D. J'ai fais une traduction automatique de l'aide de triangle que j'ai révisé au mieux. Si ça intéresse quelqu'un, je la rajouterais sur ma page (s'est une doc des versions précédente de la version actuelle)
-
Ha! les filtres... Simple (faut-il y penser) mais très efficace. Si j'ai bien compris, filtre tout les text ou mtext comportant soit qu'un blanc ou rien du tout comme valeur de chaine de caractères. Le filtre à lui tout seul, fait tout le boulot.
-
Projection de LWPOLYLINE simple sur 3Dface
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Oui, Oui :calim: Désolé, de la confusion sur l'appellation, il faut dire que pour l'instant, à part de l'avoir testée et conservée, je m'en suis pas trop servi. Mais là elle va m'être forte utile Merci encore ;) -
Projection de LWPOLYLINE simple sur 3Dface
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Euh! Je veux bien, mais c'est du brut de décoffrage pour répondre à MON besoin immédiat. (aucune élégance dans le code et utilisation de sous routine tierce qui sont pas de moi) Si vous voulez en faire un challenge pour qu'elle soit plus générale d'utilisation, pourquoi pas! Je n'ai pas trop de temps en ce moment pour faire cela. Donc au départ j'ai une dalle en PMAILLE 3D (la routine la décompose en 3Dface, mais je ne sauvegarde pas mon dessin, mais fais un copier-coller du résultat dans un autre dessin) et des LWPOLYLINE (SANS arcs) ayant une épaisseur constante, tout ça dans le SCG. Les calques que je veux traiter sont aussi spécifique à mon dessin, mais ca c'est facile à modifier. Cette routine + utilisation de PEDIT3D de gilles va me permettre d'arriver au résultat que je souhaite avec le minimum de manipulation par la suite. (je pense "mailler" entre mes polyligne3d avec mon module "trinod.lsp" par la suite pour qu'elle soient visible en rendu, pas tester encore!) (defun punktinpolylinie (pointinquestion point_list / ) (if (equal 0.0 (pipwinkelsumme pointinquestion point_list) 0.0001) nil t ) ) (defun pipwinkelsumme (pointinquestion point_list / count p1 p2 scheitel winkeleins winkelzwei) (setq winkeleins 0.0 scheitel (car point_list) count 1 ) (while (< 1 (length point_list)) (setq p1 (car point_list) p2 (cadr point_list) point_list (cdr point_list) winkelzwei (pipwinkelhilfe pointinquestion p1 p2) winkelzwei (if (< 180.0 winkelzwei) (- winkelzwei 360.0) winkelzwei) winkeleins (+ winkeleins winkelzwei) ) (setq count (1+ count)) ) (setq winkelzwei (pipwinkelhilfe pointinquestion p2 scheitel) winkelzwei (if (< 180.0 winkelzwei) (- winkelzwei 360.0) winkelzwei) ) (+ winkeleins winkelzwei) ) (defun pipwinkelhilfe (pointinquestion p1 p2 / alpha beta) (setq beta (angle pointinquestion p1) alpha (angle pointinquestion p2) alpha (- alpha beta) ) (if (< alpha 0) (setq alpha (+ (* 2 pi) alpha)) ) (* (/ (float alpha) pi) 180.0) ) (defun c:lw2pl3d ( / ) (if (not bdx) (progn (setq jsm (ssget "_X" '((0 . "POLYLINE") (8 . "MAILLAGE3D") (70 . 64)))) (vlax-invoke-method (vlax-ename->vla-object (ssname jsm 0)) 'GetBoundingBox 'pt1 'pt2 ) (setq bdx (list (mapcar 'vlax-safearray->list (list pt1 pt2) ) ) ) (setq bdx (mapcar '(lambda (funcs) (mapcar '(lambda (func) (apply func bdx)) funcs ) ) '((caar cadar)(caadr cadar)(caadr cadadr)(caar cadadr)) ) ) (command "_.explode" (ssname jsm 0)) ) ) (command "_.zoom" "_window" (car bdx) (caddr bdx)) (princ "\nChoisir la polyligne 2D") (setq js_lw (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))) (cond (js_lw (setvar "cmdecho" 0) (setq dxf_lw (entget (ssname js_lw 0)) vla_obj (vlax-ename->vla-object (cdar dxf_lw)) dxf_elw (cdr (assoc 40 dxf_lw)) loop 0 ) (vla-Offset vla_obj (/ dxf_elw 2.0)) (repeat 2 (setq dxf_lw (entget (entlast)) dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_lw)) all_pt nil ) (while dxf_10 (if (cdr dxf_10) (if (setq rslt (vl-remove nil (mapcar '(lambda (x y) (inters (car dxf_10) (cadr dxf_10) x y T)) (cons (last bdx) bdx) bdx))) (if (and (punktinpolylinie p1 bdx) (not (equal (car dxf_10) (car rslt) 1E-12))) (setq p1 (car dxf_10) dxf_10 (cons p1 (cons (car rslt) (cddr dxf_10)))) (setq p1 (car rslt)) ) (setq p1 (car dxf_10)) ) ) (setq js (ssget "_C" (list (- (car p1) 25.0) (- (cadr p1) 25.0)) (list (+ (car p1) 25.0) (+ (cadr p1) 25.0)) '((0 . "3DFACE") (8 . "MAILLAGE3D"))) p1 (trans p1 1 0) p1 (list (car p1) (cadr p1)) n -1 lst_px nil ) (cond (js (repeat (sslength js) (setq dxf_ent (entget (ssname js (setq n (1+ n)))) lst_pt (list (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent)) (cdr (assoc 12 dxf_ent)) (cdr (assoc 13 dxf_ent)) ) ) (if (equal (caddr lst_pt) (cadddr lst_pt)) (setq lst_pt (list (car lst_pt) (cadr lst_pt) (caddr lst_pt) (car lst_pt))) (setq lst_pt (append lst_pt (list (car lst_pt)))) ) (if (punktinpolylinie p1 lst_pt) (progn (command "_.ucs" "_3point" "_none" (car lst_pt) "_none" (cadr lst_pt) "_none" (caddr lst_pt)) (setq p_10 (trans (list (car p1) (cadr p1) 1000.0) 0 1) p_11 (trans (list (car p1) (cadr p1) 0.0) 0 1) p10_2d (list (car p_10) (cadr p_10) 0.0) p11_2d (list (car p_11) (cadr p_11) 0.0) p_int (trans (inters p10_2d p11_2d p_10 p_11 nil) 1 0) lst_px (cons p_int lst_px) ) (command "_.ucs" "_world") ) ) ) (if lst_px (setq all_pt (append lst_px all_pt)) ) ) ) (setq dxf_10 (cdr dxf_10)) ) (cond (all_pt (setq pt_all (list (car all_pt))) (while (cdr all_pt) (setq p1 (car all_pt) p2 (cadr all_pt) js (ssget "_F" (list p1 p2) '((0 . "3DFACE") (8 . "MAILLAGE3D"))) p1 (trans p1 1 0) p2 (trans p2 1 0) p1 (list (car p1) (cadr p1)) p2 (list (car p2) (cadr p2)) n -1 lst_px nil ) (cond (js (repeat (sslength js) (setq dxf_ent (entget (ssname js (setq n (1+ n)))) lst_pt (list (cdr (assoc 10 dxf_ent)) (cdr (assoc 11 dxf_ent)) (cdr (assoc 12 dxf_ent)) (cdr (assoc 13 dxf_ent)) ) ) (if (equal (caddr lst_pt) (cadddr lst_pt)) (setq lst_pt (list (car lst_pt) (cadr lst_pt) (caddr lst_pt) (car lst_pt))) (setq lst_pt (append lst_pt (list (car lst_pt)))) ) (while (cdr lst_pt) (setq px (inters p1 p2 (car lst_pt) (cadr lst_pt) T)) (if px (progn (setq px (inters (list (car px) (cadr px) 0.0) (list (car px) (cadr px) 100.0) (car lst_pt) (cadr lst_pt) nil)) (if (and px (not (member px lst_px))) (setq lst_px (cons px lst_px)) ) ) ) (setq lst_pt (cdr lst_pt)) ) ) (if lst_px (progn (setq new_lst nil) (while lst_px (setq l (mapcar '(lambda (x) (distance x p1)) lst_px)) (setq el (nth (- (length lst_px) (length (member (apply 'min l) l))) lst_px)) (setq lst_px (vl-remove el lst_px) new_lst (cons el new_lst) ) ) (setq pt_all (append (list (cadr all_pt)) new_lst pt_all)) ) (setq pt_all (append (list (cadr all_pt)) pt_all)) ) ) (T (setq pt_all (append (list (cadr all_pt)) pt_all))) ) (setq all_pt (cdr all_pt)) ) (command "_.3dpoly") (foreach el pt_all (command "_none" (trans el 0 1))) (command "") (entdel (cdar dxf_lw)) ) (T (princ "\nAucune 3DFACE trouvée!")) ) (if (not (zerop (rem (setq loop (1+ loop)) 2))) (vla-Offset vla_obj (- (/ dxf_elw 2.0))) ) ) (setvar "cmdecho" 1) ) ) (prin1) ) NB: Le dessin d'essai que j'avais fourni en exemple ne fonctionne pas pour cette routine car j'avais déjà décomposé ma maille. -
Ma proposition puisque les réponses sont rares ! :( (defun cen-grav (ptlst / n) (setq n (float (length ptlst))) (list (/ (apply '+ (mapcar 'car ptlst)) n) (/ (apply '+ (mapcar 'cadr ptlst)) n)) ) Accepte une liste de n éléments sour la forme ((x y) (x1 y1) .....) pas de Z! (cen-grav '((10.0 5.0) (4.0 15.0) (-2.0 -5.0))) -> (4.0 5.0)
-
Avant de tenter une réparation, essayes de refaire un profil, peut être que celui que tu utilises et issu de l'ancienne configuration, ou est corrompu, et pose problème. Cette solution tout bête a pour ma part, déjà résolu pas mal de problèmes. Ces profils stockent beaucoup d'informations, et si une seule est défectueuse "ça fout le bazar". Chose étrange une réinstallation ou réparation ne corrige pas, bien souvent, ce problème de profil...
-
Si LTExtender ne comprend pas (setvar "Variable" valeur), peut être est il possible de le faire par un command afin de conserver la même fonctionnalité qu'avant. exemple: Remplacer (setvar "clayer" old_CLAY) par (command "'_.SETVAR" "CLAYER" old_CLAY) Notez l'apostrophe après le 1er " . Ca peut permettre de modifier une variable en transparence.
-
Projection de LWPOLYLINE simple sur 3Dface
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
En fait dans la routine, je fais 2 passes. La première avec une "capture" aux points de sommets de la polyligne décalée en 2D, j'obtiens une liste de point 3D qui est la projection de la forme géométrique en XY de ma polyligne. (sommets situés à l'interieur d'une 3Dface) A partir de cette liste je refais une seconde passe avec "trajet" pour obtenir les intersections entre sommet et les arrêtes de 3Dfaces. pour que ma nouvelle polyligne épouse le cheminement en Z des 3Dfaces J'insère ces sommets dans ma liste précédente (en controlant les doublons et l'ordre des nouveaux point) et dessine ma poly3D Donc dans ma routine le problème vient (dans la 1ère passe) que dès qu'un sommet (le 1er rencontré) EST contenu dans ma dalle il faudrait que je reprenne le sommet n-1 et applique le mode trajet comme à la seconde passe. En résumé, quand la polyligne n'est pas contenu entièrement dans la dalle, il faudrait que je fixe de nouveaux sommet en point d'appui en bord de dalle. Tiens d'avoir résumé mon problème, m'a peut être donné la solution PS: Voici ce qu'aurait du donner un rendu en possédant le matériaux http://img341.imageshack.us/img341/6334/mntyo5.th.jpg En grande taille Ca y est j'ai résolu mon problème, d'avoir formulé des explications m'a éclairé. Je me suis servi du boundingbox de ma pmaille de départ (avant la décomposition en 3Dface). [Edité le 25/5/2007 par bonuscad] -
message \" voulez vous reelement effectuer cette action\"
bonuscad a répondu à un(e) sujet de SYSTEMTRY dans AutoCAD 2006
Pour tâtonner et essayer de résoudre ton problème, pourrais tu donner la valeur des variables suivantes: MAXSORT SORTENTS TREEDEPTH TREEMAX -
Projection de LWPOLYLINE simple sur 3Dface
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Modèle Numérique Terrestre. Pourtant je viens de le télécharger chez moi ! :o Il faut tapez les 3 lettres aléatoires proposées, puis attendre 45s avant de pouvoir télécharger. Le fichier dwg contient une dalle (carré) constitué de 3dfaces régulières en XY mais pas en Z, et un fichier lisp qui fonctionne pour ce dessin, qui projette les bords d'une polyligne2D épaisse sur le maillage. On observe pour les projections que la terminaison en bord de dalle n'est pas parfaite, c'est ça mon problème que je cherche à résoudre. J'ai la réponse a ma question, le rendu ne fonctionne pas car il manque l'image qui ma servi à définir le matériaux (un ECW converti en TGA) Si ça interesse quelqu'un (pour voir), je joindrais le fichier demain, mais il faudra soit le placer dans la même arborescence que moi, ou redéfinir le matériaux Ou plus simplement je ferais une image depuis mon poste du résultat final -
Projection de LWPOLYLINE simple sur 3Dface
bonuscad a posté un sujet dans Pour aller plus loin en LISP
Bonjours à tous, Pour une fois, je fais appel à vos lumières, car je piétine lamentablement. J'y suis presque mais n'arrive pas à parfaire la routine. Mon but et de projeter une polyligne optimisée (sans arc, tout ce qui a de plus simple) sur des 3dFace (qui représente un MNT en quelque sorte) Le problème que je n'arrive pas à appréhender la finalisation de ma projection en bordure, je voudrais que ma 3dpoly finisse exactement au bords de ma dalle, ceci pour pouvoir la joindre par la suite. (avec l'excellente routine de Gilles) Vous trouverez ICI un fichier de test et le lisp. Je me fous de l'élégance de la routine, pourvu qu'elle fonctionne dans le dessin fourni, ce n'est pas un chalenge mais cela me permettrait d'avancer dans mon boulot plus rapidement (j'ai 290 dalles à traiter !) Par la même occasion, pouvez vous me dire si vous obtenez quelque chose dans une vue3D en faisant un rendu avec l'option photo-réaliste Merci à ceux qui prendront le temps de me donner un coup de main. -
Merci du partage, je le garde précieusement! ;) Très intéressant, une particularité que j'aime beaucoup (ça peux, peut être me servir...) [surligneur]CELA RETOURNE LA SURFACE PROJETEE SUR LE SCU COURANT. [/surligneur] :P Si tu en as d'autre comme ceci, ça m'intéresse beaucoup. Un GRAND Merci !
-
Un script ! Tu l'importe sous excel au format ASCII, tu insère une colonne au début dans laquelle du mets la commande POINT recopier sur le nombre de lignes voulues. Tu enregistre ton fichier au format ASCII avec l'extension SCR et lu lance le script. Ceci pour la manière très basique, tu peux améliorer ton script au début pour fixer le calque, désactiver les accroches objet et autres actions ... ou fixer tout ceci avant de lancer le script.
-
un system d\'quation à 2inconnues en lisp
bonuscad a répondu à un(e) sujet de cloclo26000 dans AutoCAD 2008
Sans parler de la résolution algébrique, pour pouvoir tester ton code (sur une version francaise) on est obligé de reprendre ton code Il y a des underscores "_" devant certaine commandes mais pas toutes ??? :o Suivant l'état de la variable "Osmode", le programme n'arrive pas à terme.... Sur les résultats des équations je n'ai pas vérifié en le faisant "à la mano" et je n'ai pas de calculatrice graphique et pré-programmé pour vérifier les résultats. Ton code n'est intéressant que pour un étudiant, mais généralement ils ont de super calculatrice mais pas Autocad... ;) Que dire de plus ... -
Une solution parmi tant d'autre: (defun c:rect_3pt ( / sv_snap sv_ortho p1 p2 p3 p4) (setq sv_snap (getvar "SNAPANG") sv_ortho (getvar "ORTHOMODE") ) (initget 1) (setq p1 (getpoint "\n1er coin: ")) (initget 33) (setq p2 (getpoint p1 "\n2ème coin adjacent: ")) (grdraw p1 p2 7) (setvar "SNAPANG" (angle p1 p2)) (setvar "ORTHOMODE" 1) (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384))) (initget 33) (setq p3 (getpoint p2 "\n3ème coin adjacent: ") p4 (polar p3 (angle p2 p1) (distance p2 p1)) ) (redraw) (setvar "cmdecho" 0) (command "_.PLINE" p1 p2 p3 p4 "_CLOSE") (setvar "cmdecho" 1) (setvar "osmode" (rem (getvar "osmode") 16384)) (setvar "SNAPANG" sv_snap) (setvar "ORTHOMODE" sv_ortho) (prin1) )
-
Je ne sais pas si j'ai bien compris la question, elle me semble confuse . :casstet: A ce que j'ai compris, essayes ceci en ligne de commande dans l'EP: ((lambda ( / p1 p2) (setq p1 (getpoint "\nSpécifiez le premier point: ")) (if p1 (setq p2 (getpoint p1 "Spécifiez le deuxième point: "))) (if (and p1 p2) (distance (trans p1 3 2) (trans p2 3 2)) (prin1)) )) Tu as aussi la commande "CONVESPACE" ou "TRANSPACE" pour des conversions d'un espace à l'autre.
-
et si on ce limite aux entiers valides comme pour ta liste, toujours avec un foreach ((lambda ( / l) (foreach n '(1 2 3 5 7 10 11 12 14 20 30 31 33 37 39 40 44 76 80) (if (zerop (rem n 2)) (setq l (cons n l))) (reverse l))))
-
A droite ou à gauche ?
bonuscad a répondu à un(e) sujet de Didier-AD dans Pour aller plus loin en LISP
Ce que j'utilise pour ce genre problème ((lambda ( / e_sel ename pt ob param deriv alpha v1 v2 det_or) (setq e_sel (entsel) ename (car e_sel) pt (trans (cadr e_sel) 1 0) ob (vlax-ename->vla-object ename) pt (vlax-curve-getClosestPointTo ob pt) param (vlax-curve-getparamatpoint ob pt) deriv (vlax-curve-getfirstderiv ob param) alpha (atan (cadr deriv) (car deriv)) v1 (mapcar '- (polar pt alpha 1.0) pt) v2 (mapcar '- (trans (getpoint "\nDonnez un point: ") 1 0) pt) det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2)) ) (cond ((> det_or 0.0) (princ "\nVous avez cliquez à GAUCHE")) ((< det_or 0.0) (princ "\nVous avez cliquez à DROITE")) ) (prin1) )) -
Challenge : parallèles ?
bonuscad a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Je vois que le week-end de l'ascension a été fertile aux lispeurs, Bon je vais pas faire de proposition, car ce que j'utilise pour ce genre de calcul vectoriel et tiré d'une page allemande , donc aucun honneur pour moi. Mais ces routines proposées me semblent fiables car j'ai toujours pu les mettre en application avec les résultats escomptés dans mes propres routines. -
Une voie possible pour un résultat irréprochable. Configurer un traceur Adobe générique en Post-Script, faire une sortie sur fichier. Dans PhotoShop importer un fichier EPS, il te demandera alors comment tu veux pixelliser ton image. Plus tu pixellisera ton fichier EPS vectoriel, meilleure sera la définition, mais plus lourd sera ton fichier. A toi de trouver les meilleurs paramètre suivant le résultat voulu. Et pour ceux qui n'ont pas Photoshop mais utilise GIMP, on peut faire aussi un import d'un fichier EPS, mais il faut au préalable installer gswin et recopier les 4 fichiers contenu dans le dossier "bin" de gs pour les mettre dans le dossier "bin" de Gimp. [Edité le 21/5/2007 par bonuscad]
