PPI Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Bonjour a tous, je bute sur un truc (tout bete), je cherche à avoir la longueur d'un cylindre 3D créé par la commande autocad : 'cylindre'. auriez-vous une solution ? merci beaucoup ...
bonuscad Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Bonjour, Si tu es sûr de pouvoir retrouver le SCU de construction (s'il y en a eu un!), la commande PROPMECA (_MASSPROP) de donnera la boite de délimitation, en soustrayant le Z mini au Z maxi, tu devrais avoir la hauteur de ton cylindre... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
PPI Posté(e) le 6 septembre 2007 Auteur Posté(e) le 6 septembre 2007 bonjour et merci, je retrouve bien ma longueur de cylindre en faisant comme vous dites, mème si pour mes constructions de tube je change tres souvent de SCU. Je trace d'abord mon axe de tube (bien sur il peut avoir différente orientation de SCU), puis j'oriente mon SCU Z suivant mon axe de tube et enfin je dessine mon cylindre. Donc grace à votre méthode, en revenant dans le SCU Z de mon tube je retrouve bien ma longueur.Par contre j'aimerais savoir maintenant comment retrouver le SCU de mon tube lors de sa création de tel maniere à traiter en automatique tout cet ensemble.en gros :1)sélection du cylindre2)quel SCU lors de la crétion de mon cylindre3)ensuite PROPMECA pour trouver la longueur de mon/mes cylindre Merci encore pour cette réponse tres utile.
PPI Posté(e) le 6 septembre 2007 Auteur Posté(e) le 6 septembre 2007 rebonjour, j'ai trouvé une solution (grace a vous),il faut que j'extrais le volume de mon cylindre, et vu que je connais le rayon de celui ci,je peux tres facilement en déduire ma longueur de tube. par contre comment faire pour réussir à récupérer le diametre ou rayon de mon cylindre ? merci
Tramber Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Hihihi, bah tu divise la volume par la longueur !!! Plus sérieusement, il existe un lisp qui traduit les données 3D du moteur volumique (ACIS) mais il ne marche que sur les versions Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
PPI Posté(e) le 6 septembre 2007 Auteur Posté(e) le 6 septembre 2007 excellent, merci de cette aide précieuse ....autrement si quelqu'un saurait comment extraire le rayon d'un cylindre en LISP ...ca serait sympa a+
(gile) Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Salut, Je pense avoir trouvé quelque chose en Visual LISP. Avec la propriété Position des primitives 3d (coordonnées du centre de la base du solide) et le centre de gravité (Centroid) on retrouve aisément la hauteur du cylindre, puis à partir du volume, le rayon. (if (and ;; sélection du solide (setq cyl (car (entsel "\nSélectionnez un cylindre: "))) ;; transformation du nom d'entité en objet vla (setq cyl (vlax-ename->vla-object cyl)) ;; l'objet est bien un solide 3d (= (vla-get-ObjectName cyl) "AcDb3dSolid") ;; l'objet est bien un cylindre (primitive) (= (vl-catch-all-apply 'vla-get-SolidType (list cyl)) "Cylindre") ) (setq ;; hauteur du cylindre ht (* 2 (distance (vlax-get cyl 'Position) (vlax-get cyl 'centroid))) ;; rayon du cylindre rad (sqrt (/ (vla-get-Volume cyl) (* pi ht))) ) (princ "\nEntité non valide.") ) PS : La propriété Position est peut-être arrivée avec la version 2007, comme la poignée située au centre de la base des primitives et qui sert à déplacer ces solides. [Edité le 6/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PPI Posté(e) le 6 septembre 2007 Auteur Posté(e) le 6 septembre 2007 merci beaucoup gile, mais je ne suis déja pas bien fortiche en Lisp mais le Vlisp encore moins ....j'ai trouvé comment charger le fichier déja !!!mais il me met une erreur apres la sélection du cylindre : Sélectionnez un cylindre: ; erreur: no function definition: VLAX-ENAME->VLA-OBJECT ???!!!???!!! en tout cas merci quand mème ...
(gile) Posté(e) le 7 septembre 2007 Posté(e) le 7 septembre 2007 Salut, Il faut ajouter l'expression (vl-load-com) avant l'expression que je t'ai donnée pour charger les fonctions Visual LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PPI Posté(e) le 7 septembre 2007 Auteur Posté(e) le 7 septembre 2007 exact, en gratouillant un peu à droite et à gauche, j'avais trouvé l'expression (vl-load-com).je te remercie beaucoup, cela m'a vraiment fait avancer dans le bon sens. Alles un autre défi ?voila je voudrais que mon bout de prog sélectionne tout les cylindres dans mon dessin pour en faire une liste que je pourrais transformer en fichier texte. as-tu une idée ? j'ai planché dessus cette nuit jusqu'a au moins 2H du mat,en Lisp, je pourrais y arriver, mais 'entsel' ,e reconnais pas les objets 'cylindre' ...à moins que je me trompe de commande .... a+ et merci encore .... voila mon p'tit bout de prog : (defun c:lg () (if (and;; sélection du solide(setq cyl (car (entsel "\nSélectionnez un cylindre: "))) ;; transformation du nom d'entité en objet vla(setq cyl (vlax-ename->vla-object cyl)) ;; l'objet est bien un solide 3d(= (vla-get-ObjectName cyl) "AcDb3dSolid") ;; l'objet est bien un cylindre (primitive)(= (vl-catch-all-apply 'vla-get-SolidType (list cyl)) "Cylindre") ) (setq;; hauteur du cylindreht (* 2 (distance (vlax-get cyl 'Position) (vlax-get cyl 'centroid))) ;; diametre du cylindrediam (* 2 (sqrt (/ (vla-get-Volume cyl) (* pi ht)))) ) (princ "\nEntité non valide.") ) (setq calque (cdr (assoc 8 (entget (car (entsel)))))) (princ)(prompt "\nRepere ligne = ")(princ calque)(princ)(prompt "\nDiamètre = ")(princ diam)(princ)(prompt "\nLongueur = ")(princ ht)(princ) )
(gile) Posté(e) le 7 septembre 2007 Posté(e) le 7 septembre 2007 Salut, Voilà un exemple avec sélection de tous les cylindres du dessin, affichage du résultat dans la fenêtre de texte et possibilité d'enregistrer ce résultat dans un fichier txt. Tu devrais pouvoir l'adapter à tes besoins. (defun c:lg (/ ss n cyl txt ht diam file) ; déclaration des variables locales ;; chargement des fonctions Visual LISP (vl-load-com) (setq txt "") ;; sélection de tous les solides du dessin (if (setq ss (ssget "_X" '((0 . "3DSOLID")))) ;; parcourir le jeu de sélection (repeat (setq n (sslength ss)) ;; transformation du nom d'entité en objet vla (setq cyl (vlax-ename->vla-object (ssname ss (setq n (1- n))))) ;; si l'objet est un cylindre (if (= (vl-catch-all-apply 'vla-get-SolidType (list cyl)) "Cylindre" ) (setq ;; hauteur du cylindre ht (* 2 (distance (vlax-get cyl 'Position) (vlax-get cyl 'centroid) ) ) ;; diametre du cylindre diam (* 2 (sqrt (/ (vla-get-Volume cyl) (* pi ht)))) ;; concatenation du texte txt (strcat txt "Repère ligne =\t" (vla-get-Layer cyl) "\nDiamètre =\t" (rtos diam) "\nLongueur =\t" (rtos ht) "\n\n" ) ) ) ) ) (if (/= txt "") (progn (textscr) ; afficher la fenêtre de texte (princ txt) ;; proposer l'enregistrement dans un fichier (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] : " ) "Oui" ) ;; choix et création du fichier (progn (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "txt" 1) "w" ) ) (princ txt file) (close file) ) ) (graphscr) ; retour à la fenêtre de dessin ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
PPI Posté(e) le 7 septembre 2007 Auteur Posté(e) le 7 septembre 2007 Hiiii pinaize ... merci beaucoup beaucoup beaucoup. Je vais maintenant l'adapter. encore Merci
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