(gile) Posté(e) le 24 juillet 2008 Posté(e) le 24 juillet 2008 Salut, Ce sujet m'a motivé pour finaliser un truc que j'avais en tête. Comme on ne peut pas (encore ?) faire de bloc dynamique 3d, j'ai essayé de faire un truc pour insérer un bloc en 3d tout en l'étirant sur son axe X en spécifiant 2 points.Le bloc peut contenir des solides 3d.Si le bloc contient un attribut dont l'étiquette est LONG il prendra automatiquement pour valeur la longueur du bloc sur l'axe X et elle pourra être extraite avec EXTATTBE. EDIT : réparé bug dans les SCU non // au SCGEDIT 2 : Ajout de données attachées au bloc pour l'utilisation de EDITLEN (voir plus bas) ;;; STRETCHINS (gile) 24/07/08 ;;; Insère le bloc spécifié en l'étirant sur son axe X suivant les ;;; 2 points 3d spécifiés. ;;; Si le bloc contient un attribut dont l'étiquette est LONG, ;;; il prendra automatiquement la valeur de la longueur du bloc. (defun c:stretchins (/ blk bl minpt maxpt len p1 p2 dis scl vec x y z att) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if (setq blk (getblock nil)) (progn (setq bl (vla-InsertBlock (vla-get-ModelSpace *acdoc*) (vlax-3d-point '(0 0 0)) blk 1 1 1 0 ) ) (vla-put-Normal bl (vlax-3d-point '(0 0 1))) (vla-getBoundingBox bl 'minpt 'maxpt) (setq len (- (car (vlax-safearray->list maxpt)) (car (vlax-safearray->list minpt)) ) ) (vla-delete bl) (while (and (setq p1 (getpoint "\nSpécifiez le point d'insertion ou : " ) ) (setq p2 (trans (getpoint p1 "\nSpécifiez l'autre extrémité: ") 1 0 ) ) ) (setq p1 (trans p1 1 0) dis (distance p1 p2) scl (/ dis len) vec (mapcar '(lambda (x) (/ x scl)) (mapcar '- p2 p1)) ) (mapcar '(lambda (x1 x2) (set x1 (eval x2))) '(x y z) vec) (setq bl (vla-InsertBlock (vla-get-ModelSpace *acdoc*) (vlax-3d-point '(0 0 0)) blk scl 1 1 0 ) ) (vla-put-Normal bl (vlax-3d-point '(0 0 1))) (if (and (equal x 0 1e-9) (equal y 0 1e-9)) (vla-Rotate3d bl (vlax-3d-point '(0 0 0)) (vlax-3d-point '(0 1 0)) (if (minusp z) (/ pi 2) (/ pi -2) ) ) (progn (vla-Rotate3d bl (vlax-3d-point '(0 0 0)) (vlax-3d-point '(0 0 1)) (setq a (atan y x)) ) (vla-Rotate3d bl (vlax-3d-point '(0 0 0)) (vlax-3d-point (list y (- x) 0)) (if (equal x 0 1e-9) (atan z (abs y)) (atan z (/ x (cos a))) ) ) ) ) (vla-Move bl (vlax-3d-point '(0 0 0)) (vlax-3d-point p1)) (if (and (setq att (vlax-invoke bl 'getAttributes)) (setq att (mapcar (function (lambda (x) (cons (vla-get-TagString x) x)) ) att ) ) (setq att (cdr (assoc "LONG" att))) ) (vla-put-Textstring att (rtos dis)) ) (vlax-ldata-put bl "len" len) (vlax-ldata-put bl "vec" vec) ) ) ) (princ) ) ;;; Getblock (gile) 03/11/07 ;;; Retourne le nom du bloc entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou depuis la boite ;;; de dialogue standard d'AutoCAD ;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc") (defun getblock (titre / bloc n lst tmp file what_next dcl_id nom) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst) ) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getblock:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un bloc\"") ) ";initial_focus=\"bl\";:boxed_column{ :row{:text{label=\"Sélectionner\";alignment=left;} :button{label=\">>\";key=\"sel\";alignment=right;fixed_width=true;}} spacer; :column{ :button{label=\"Parcourir...\";key=\"wbl\";alignment=right;fixed_width=true;}} :column{:text{label=\"Nom :\";alignment=left;}} :edit_box{key=\"tp\";edit_width=25;} :popup_list{key=\"bl\";edit_width=25;}spacer;} spacer; ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getblock" dcl_id)) (exit) ) (start_list "bl") (mapcar 'add_list lst) (end_list) (if (setq n (vl-position (strcase (getvar "INSNAME")) (mapcar 'strcase lst) ) ) (setq nom (nth n lst)) (setq nom (car lst) n 0 ) ) (set_tile "bl" (itoa n)) (action_tile "sel" "(done_dialog 5)") (action_tile "bl" "(setq nom (nth (atoi $value) lst))") (action_tile "wbl" "(done_dialog 3)") (action_tile "tp" "(setq nom $value) (done_dialog 4)") (action_tile "accept" "(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)" ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0)) (setq what_next 1) (setq what_next 2) ) ) ((= what_next 4) (cond ((not (read nom)) (setq what_next 2) ) ((tblsearch "BLOCK" nom) (setq what_next 1) ) ((findfile (setq nom (strcat nom ".dwg"))) (setq what_next 1) ) (T (alert (strcat "Le fichier \"" nom "\" est introuvable.")) (setq nom nil what_next 2 ) ) ) ) ((= what_next 5) (if (and (setq ent (car (entsel))) (= "INSERT" (cdr (assoc 0 (entget ent)))) ) (setq nom (cdr (assoc 2 (entget ent))) what_next 1 ) (setq what_next 2) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) Exemple en image, le bloc "Tube100" est inséré avec STRETCHINS et le bloc "Rac_100_90°" avec INS3D (sur cette page)Je n'y connais rien en tuyauterie, c'est juste un exemple. http://img151.imageshack.us/img151/9522/stretchinsgf6.png [Edité le 24/7/2008 par (gile)][Edité le 24/7/2008 par (gile)][Edité le 24/7/2008 par (gile)][Edité le 24/7/2008 par (gile)] [Edité le 25/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 24 juillet 2008 Posté(e) le 24 juillet 2008 Salut,pour mon besoin perso je n'en ai pas besoin.... (ou je ne le vois pas encore).Mais c'est vraiment un superbe outils !Les logiciels de CAO paramétrables n'ont qu'on bien se tenir ! Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
cdi Posté(e) le 24 juillet 2008 Posté(e) le 24 juillet 2008 un truc que j'avais en tête. ....... Bonjour Ouf ......Pas mal, pas mal.
(gile) Posté(e) le 24 juillet 2008 Auteur Posté(e) le 24 juillet 2008 Merci à vous, Pour un fonctionnement plus cohérent avec les solide de section non circulaire, j'ai modifié les rotations 3d. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 24 juillet 2008 Posté(e) le 24 juillet 2008 hello, le (gile) il est formidable chapeau bas. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 24 juillet 2008 Auteur Posté(e) le 24 juillet 2008 Merci :red: J'ai apporté une modification à STRETCHINS pour pouvoir utiliser la routine suivante qui permettra de modifier ultérieurement la longueur totale des blocs insérés. EDITLEN invite l'utilisateur à sélectionner un bloc, contrôle si le bloc a été inséré avec STRETCHINS (données attachées),Invite l'utilisateur à spécifier la nouvelle longueur totale du bloc.Le bloc est modifié du côté duquel il a été sélectionné (comme avec MODIFLONG).S'il contient l'attribut LONG, celui-ci est mis à jour. EDIT : remplacé osnap qui (buguait parfois suivant les composants du bloc et le point de sélection) par une fonction de mon cru. ;;; EDITLEN (gile) 24/07/08 ;;; Modifie la longueur totale d'un bloc inséré avec STRETCHINS ;;; Met à jour l'attribut LONG (defun c:EditLen (/ ent bl att len pt ins vec scl ext move dis) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if (and (setq ent (entsel "\nSélectionnez un bloc: ")) (setq bl (vlax-ename->vla-object (car ent))) (setq len (vlax-ldata-get bl "len")) (setq ins (vlax-get bl 'InsertionPoint)) (setq pt ((lambda (p1 / p2 nor sc) (if (and (setq nor (vlax-get bl 'normal)) (setq p2 (trans p1 1 2)) (setq p2 (trans (list (car p2) (cadr p2) (1+ (caddr p2))) 2 0 ) ) (/= 0 (setq sc (apply '+ (mapcar '* nor (mapcar '- p2 p1))) ) ) ) (mapcar (function (lambda (x1 x2) (+ (* (/ (apply '+ (mapcar '* nor (mapcar '- p1 ins)) ) sc ) (- x1 x2) ) x1 ) ) ) p1 p2 ) ) ) (cadr ent) ) ) (setq vec (vlax-ldata-get bl "vec")) (setq scl (vla-get-XScaleFactor bl)) (setq ext (mapcar '(lambda (x1 x2) (+ x1 (* x2 scl))) ins vec)) (if ( (setq move t) T ) (setq dis (getdist (trans (if move ext ins ) 0 1 ) "\nSpécifiez la longueur: " ) ) ) (progn (vla-StartUndoMark *acdoc*) (vla-put-XScaleFactor bl (/ dis len)) (if move (vla-Move bl (vlax-3d-point '(0 0 0)) (vlax-3d-point (mapcar '(lambda (x) (* x (- scl (/ dis len)))) vec)) ) ) (if (and (setq att (vlax-invoke bl 'getAttributes)) (setq att (mapcar (function (lambda (x) (cons (vla-get-TagString x) x)) ) att ) ) (setq att (cdr (assoc "LONG" att))) ) (vla-put-TextString att (rtos dis)) ) (vla-EndUndoMark *acdoc*) ) ) (princ) ) [Edité le 24/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cdi Posté(e) le 25 juillet 2008 Posté(e) le 25 juillet 2008 Les logiciels de CAO paramétrables n'ont qu'on bien se tenir ! SalutParfait..........nickel j'adhère totalement à ce que dit bred
FRAXA Posté(e) le 25 juillet 2008 Posté(e) le 25 juillet 2008 Bonjour!Ca marche à partir de quelle version? HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
(gile) Posté(e) le 25 juillet 2008 Auteur Posté(e) le 25 juillet 2008 Salut, Les logiciels de CAO paramétrables n'ont qu'on bien se tenir ! N'exagérons rien, on est loin du compte ! Ca marche à partir de quelle version? À priori à partir de 2000 (mais je sais qu'il peut y avoir des problèmes avec les fonctions vlax dans les versions 2000/2002). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cdi Posté(e) le 25 juillet 2008 Posté(e) le 25 juillet 2008 N'exagérons rien, on est loin du compte ! Salut gile Ah Probablement mais déjà ça rivalise sérieusement avec Mechanical Alors oui,........ la cote ne pilote pas le modèle, pour certaines choses, ce n'est pas indispensable
Bred Posté(e) le 25 juillet 2008 Posté(e) le 25 juillet 2008 Alors oui,........ la cote ne pilote pas le modèle,Moi, ce que j'en pense... ;)Hein, (gile), en liaisonnant l'attribut à la cote (faire slectionner la cote puis l'élément correspondant) ? :PEt sans réacteur, juste avec un bouton de mise à jour... pour rester simple... je suis sûr que tu ais déjà dessus.... (par contre je ne vois pas la possibilité de mettre à jour le reste du plan lors de la modification d'un élément) Moi, je dis ça, mais je ne l'utiliserais pas.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 25 juillet 2008 Auteur Posté(e) le 25 juillet 2008 Tu as mis le doigt dessus Bred, le pilotage du modèle par les cotes suppose d'autres contraintes pour déterminer de quel côté le modèle doit être modifié par exemple.C'est toute la philosophie des logiciels paramétriques. J'ai fait EDITLEN pour ça, on modifie la longueur totale de l'objet en spécifiant la nouvelle longueur la modification intervenant du côté duquel l'objet a été sélectionné (mais le reste du dessin ne bouge pas...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 25 juillet 2008 Auteur Posté(e) le 25 juillet 2008 Il reste quand même un problème avec ces routines que je crains de ne pouvoir résoudre. Ces routines jouent avec l'échelle X du bloc, or ni APLANIRGEOM ni la "bombe" de Tramber n'agissent sur les bloc dont les échelles ne sont pas uniformes. Impossible donc de générer un objet 2d à partir de ces objets :( [Edité le 25/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
cdi Posté(e) le 25 juillet 2008 Posté(e) le 25 juillet 2008 Re je ne l'utiliserais peut être pas non plus... Il empêche que EDITLEN n'est pas un gadget, et loin de là,il peut rendre un sacré service pour les domaines du procédé en pharmacopée "les points sensibles règle des 3D"........ tuyauterie en tout genre.... Alors pour eux je dis merci
FRAXA Posté(e) le 25 juillet 2008 Posté(e) le 25 juillet 2008 À priori à partir de 2000 (mais je sais qu'il peut y avoir des problèmes avec les fonctions vlax dans les versions 2000/2002). j'ai un message d'erreur sur ma version 2005erreur dans le fichier de boite de dialogue"C:\Temp\Temp03.dcl",ligne5:attribut incorrect.Symbole : "dth". Merci d'avance pour toutes explications HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800
(gile) Posté(e) le 25 juillet 2008 Auteur Posté(e) le 25 juillet 2008 Salut, OK c'est un problème avec l'affichage dans CADxp (un saut de ligne transformé en espace)Je répare, il faut refaire le copier/coller de STRETCHINS et le recharger. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kohen.g Posté(e) le 29 juillet 2008 Posté(e) le 29 juillet 2008 Bonjour,Je connais comment dessiner en 3D ce que tu as fait j'en suis capable mais sortir la nomenclature automatiquement ça je ne suis pas assez calé la dedans c'est pour cela que je vous demande des explications et comme vous etes bien bon a ce niveau j'en profite pour m'améliorer et apprendre Giles c'est exactement ce que je recherche ce que tu as fais sur ton plan 3D sauf que je ne métrise pas ta démarche peux tu m'expliquer simplement merci de ta comprehension Dis moi les coude tu les as sortis d'une bibliothèque ? Moi pour faire le piping j'utilise le routing et les raccords 3D polyligne suite à ton pgmvoila un peu comment je procéde et pours les vannes je les dessines Par contre j'ai un pgm en 2D si ca interresse
(gile) Posté(e) le 29 juillet 2008 Auteur Posté(e) le 29 juillet 2008 Salut, Dis moi les coude tu les as sortis d'une bibliothèque ? Non, je n'ai de bibliothèque pour ce genre de chose, ce n'est pas mon domaine (je fais dans la menuiserie/construction de décors). J'ai fait le bloc de manière à pouvoir l'insérer avec le LISP ins3d (sur cette page). Le point d'insertion et l'orientation sont choisis pour qu'il soit axé comme les axes X et Y. http://img177.imageshack.us/img177/9408/pipe1lg6.png Le bloc "tube100" est fait pour être inséré avec le LISP stretrchins (voir plus haut).Il doit être axé sur l'axe X et comporter au moins un attribut (invisible) dont l'étiquette est : LONG. http://img297.imageshack.us/img297/3568/pipe2xp1.png Ensuite, en m'accrochant sur une polyligne 3d servant d'axe, j'insère les coudes avec ins3d. http://img208.imageshack.us/img208/8124/pipe3zu3.png Puis j'insère les tubes avec stretchins en m'accrochant aux extrémités de la polyligne ou aux centres des cylindres des coudes. http://img364.imageshack.us/img364/1210/pipe4aq1.png Une extraction d'attributs avec la commande EXTATTBE me fait mon quantitatif. http://img364.imageshack.us/img364/8499/pipe5if8.png Je peux modifier ultérieurement la longueur des tubes avec le LISP editlen (voir plus haut); mon quantitatif se met à jour. http://img185.imageshack.us/img185/8646/pipe6zo3.png [Edité le 29/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kohen.g Posté(e) le 30 juillet 2008 Posté(e) le 30 juillet 2008 Bonjour,Je comprends ta méthode elle est pas mal sauf comment je fais pour sortir la totalité de mon matériel si au lieu d'insérer un bloc 3D (coude) je cintre mon tube y a t'il une astuce pour sortir la longueur d'une polyligne?
(gile) Posté(e) le 30 juillet 2008 Auteur Posté(e) le 30 juillet 2008 Je comprends ta méthode elle est pas mal Merci. y a t'il une astuce pour sortir la longueur d'une polyligne? Tu sélectionnes la polyligne et sa longueur est affichée dans la fenêtre des Propriétés.Sinon, il doit y avoir une demi douzaine de LISP qui calculent la longueur totale des lignes/polylignes... sélectionnées. Fais une recherche. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kohen.g Posté(e) le 30 juillet 2008 Posté(e) le 30 juillet 2008 Gile j'ai trouver un de tes lisp qui me donne et affiche la longueur de segment polyligne c'est celui ci seglen par contre est il possible de rajouter des traits de cotation? et est il possible que le texte s'accroche suivant le plan de la polyligne
kohen.g Posté(e) le 30 juillet 2008 Posté(e) le 30 juillet 2008 J'ai cherché j'ai trouvéquelque chose qui m'interesserais , isérer un champ sur une polyligne mais j'ai essayé je comprend pas Pour info j'utilise :le Pgm que tu as fais curve2pipe je m'en sert il est top par contre dis moi si c'est possible d'inserer un champs ( Diamètre) sur une polyligne si oui peux tu m'expliquer ou me le faire ex tu choisis par ex DN100 , j'aimerais que le champs donne DN100Idem pour les autres diamètreset derniere demande si tu peux intégrer la commande de cotation intégré Merci en tout cas pour tes gracieuses aides
(gile) Posté(e) le 30 juillet 2008 Auteur Posté(e) le 30 juillet 2008 Les polylignes 3d n'ont, par définition, pas de plan. Faire un cotation automatique est déjà quelque chose de complexe en 2d et risque de souvent donner des résultats insatisfaisants.En 3d, je pense que rien ne peut remplacer l'œil de l'utilisateur pour faire une cotation lisible en fonction de la vue choisie. Je sais, c'est du boulot, mais on te paye pour ça ? non ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kohen.g Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Bonjour,Je voulais savoir si c'etait possible comme sur inventor de modifier la longueur de l'elément en cliquant sur la cote et que celle ci se modifier en fonction de la longueur donnéeMerci
(gile) Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Salut, Non, ce n'est pas possible.AutoCAD n'est pas un logiciel paramétrique. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant