Ellionel Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Bonjour , J'ai un gros problemes , j'ai recupérer des plans , et je dois en autre calculer les carac méca ( poids périm , inertes ,..) de ces profils . Ils ont été mal dessinés , il y a aucune polyligne de fermée , j'utiliserai bien la fonction , "objet,polyligne , joindre ou clore , mais cela ne me donne pas les résultats espéraient . Si vous pouviez m'aiguiller sur une routine , en lisp ou vba , pour automatiser cela ,soit ( fermer polyligne , créer region , calcul inertie , deplacer la profil au point 0,0 ) . A bientot .
didier Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 bonjour, message typique du nouvel inscrit,je n'ai pas compris la finalité,tes "profils" sont dessinés en LIGNES ?y a t'il des ARCS ?pourquoi les déplacer au point 0,0,0 ? La première solution qui me vient à l'esprit c'estd'isoler tes éléments, de faire un zoom qui centre bien l'objet à l'écranensuite utiliser la commande CONTOUR, en choisissant l'option REGION. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
zebulon_ Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 bonjour, tu sélectionnes toutes tes polylignes avec _qselect (ou menu contextuel : sélection rapide ...)Dans _qselect, tu choisis :- Appliquer à : dessin entier- Type d'objet : Polyligne- Propriétés : fermée- Opérateur : = égal à- Valeur : Non mode d'application : inclure dans le nouveau jeu de sélection puis OK Toutes tes polylignes non fermées sont sélectionnées. Il suffit de lancer la commande _properties (ou menu contextuel : Propriétés ...) et changer la ligne Fermée : Non en Fermée : Oui. Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Ellionel Posté(e) le 22 novembre 2006 Auteur Posté(e) le 22 novembre 2006 Merci pour vos réponses , je vais essayer cela des cet a Midi .Je souhaite dépalcer le profil (déssiné avec des lignes , des arc , des slines , des ellipses ,...,) au point 0,0. je m'explique , je souhaite que le centre de garvité du profil ( 1 ou plusieurs région) soit au pint 0,0 , car ainsi j'aia les moments d'inertie correct . Merci encore et à bientot .
lecrabe Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Hello Il faut faire attention, car clore / fermer (par cette excellente méthode) plusieurs centaines / milliers de polylignes peut provoquer quelques surprises ! Des effets papillons (croisement) par exemple si les polylignes ont été mal dessinées ! Donc apres la manipulation, qq zooms en profondeur pour examiner "un peu" les polylignes closes / fermées peut s'avérer utile ... Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Salut, Une réponse en LISP : (defun c:inert_prof (/ pl reg cen inert) (if (setq pl (ssget "_:S:E" '((0 . "LWPOLYLINE")))) (progn (setq pl (vlax-ename->vla-object (ssname pl 0))) (vla-put-closed pl :vlax-true) (setq reg (car (vlax-invoke (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object) ) ) 'addRegion (list pl) ) ) ) (setq cen (append (vlax-get reg 'Centroid) '(0.0))) (vla-Move reg (vlax-3d-point cen) (vlax-3d-point '(0 0 0))) (setq inert (vlax-get reg 'MomentofInertia)) (alert (strcat "Moments d'inertie.\nX: " (rtos (car inert) 2 1) "\nY: " (rtos (cadr inert) 2 1) ) ) ) ) (princ) ) [Edité le 22/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Re, En l'état, la routine ci dessus ne fonctionne qu'avec des polylignes. Elle les ferme si elle ne le sont pas, crée une region, la déplace de façon à ce que le centre de gravité soit en 0,0 et retourne les moments d'inertitie dans un message.La polyligne source n'est pas effacée. Il est possible de modifier cette routine :- si la région doit être créée à partir de plusieurs objets- si les objets sources doivent être effacés.- si on préfère ne pas replacer la région à son point départ - si on veut mettre un objet point sur le centre de gravitéetc ... Si tu veux bien préciser ta demande, je verrais ce que je peux faire. [Edité le 22/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Ellionel Posté(e) le 22 novembre 2006 Auteur Posté(e) le 22 novembre 2006 Merci encore pour vos reponses . Je vous soupsonne de ne pas manger pour etre aussi prompt pour les reponse . :D Je vais tester tout cela et je vous tiens au courant ...
zebulon_ Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Je vous soupçonne de ne pas manger pour etre aussi prompt pour les reponses bienvenu dans la secte CADxp qui, par la prière, le jeûne, la pénitence, la solitude et dans l'état de célibat, recherche l'union avec la divinité Autocad. Mais CADxp n'est pas monothéiste, tu trouveras aussi des adeptes d'autres chapelles : Catia, MicroStation, Revit etc... et les plus dangereux : les adeptes de LISP et VLISP.Tu ne pourras pas dire que tu n'as pas été prévenu :) Amicalement Zebulon_ 1 C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Ellionel Posté(e) le 22 novembre 2006 Auteur Posté(e) le 22 novembre 2006 Voilou , 1-Je viens de tester le lisp . Cela me retourne comme message :""""; erreur: type d'argument incorrect: numberp: nil" ""Je travaille avec autocad 2007 , Il me retourne ce message , juste apres avoir charger la lisp . 2- La methode à zébulon 'qselect ' ne marche pas tres bien , car quand il ferme les polylignes , il l'utilise la fonction clore et du coup c'est pas top . Merci encore !!!
(gile) Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Cela me retourne comme message :""""; erreur: type d'argument incorrect: numberp: nil" ""Je travaille avec autocad 2007 , Il me retourne ce message , juste apres avoir charger la lisp . Est tu bien sûr d'avoir copié tout le code et que le code ? :casstet: quand il ferme les polylignes , il l'utilise la fonction clore et du coup c'est pas top . J'ai peur de ne pas bien comprendre, le LISP aussi, pour fermer les polylignes utilise un équivalent de la fonction clore. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 les adeptes de LISP et VLISP.Eh oui, mefie-toi du Lost In Stupid Parenthesis http://smileys.sur-la-toile.com/repository/Grands_Smileys/emoticon-msn-hypnose.gif.gif @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
zebulon_ Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 On est deux a ne pas comprendre.Je pense que dans son fichier il y a des bouts de lignes, des arcs qui devraient faire partie d'un polyligne, mais qui sont des lignes et des arcs, tous seuls dans leur coin. Alors, bien sûr, si on fait juste "clore", ça donne de la daube. Si c'est ça, il pourra peut être s'en sortir en isolant le calque sur lequel se trouve les objets à analyser (pour autan qu'ils sont sur un calque à part ?), puis en lançant la commande PEDIT Multiple et sélectionner les objets à transformer en polylignes. Commande: pe PEDIT Sélectionnez la polyligne ou [Multiple]: m Choix des objets: Spécifiez le coin opposé: 19 trouvé(s) Entrez une option [Clore/Ouvrir/Joindre/Epaiss/Lissage/sPline/Retrouver/Typeligne gén/Annuler]: jType de jointure = ProlongerEntrez une distance approximative ou [type de Jointure] <0.00>:16 segments ajoutés aux 3 polylignesEntrez une option [Clore/Ouvrir/Joindre/Epaiss/Lissage/sPline/Retrouver/Typeligne gén/Annuler]: c Donc en faisant un Joindre (avec une distance de 0.00, ou un peu plus si c'est vraiment mal dessiné) avant de faire le Clore. Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
didier Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 hello c'est le pôv garçon qui revient avec ses radoteries... il n'est possible de programmer que si la base graphique est propre,il n'existe pas de solution aisée pour ton problème, isole les objets et utilise CONTOUR,tu obtiendras des entités créées par toi qui ensuitepourront subir un traitement LISP ou autrepour les centres de gravité ou autre... amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
esbe Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Hello à tous ;) J'ai le même probleme et biensur la selection rapide et le "fermé=oui" me donne une grosseuce,grosseuce catastropheu !!! Bref je n'ai pas le temps de tout reprendre en contour, puisque qu'il le refuse aussi et je voudrais juste hachurer mais je ne parviens pas à donner une tolerance suffisante poour que cela marche !!!Je croyais qu'autocad 2005 permet d'hachurer des zone non closes ??Q"en était-il donc ??? Mercdi d'avance
(gile) Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Re, Voici une version plus aboutie, elle fonctionne avec les arcs, cercles, ellipses, lignes, polylignes, splines. les objets doivent être jointifs. Si plusieurs régions sont créées, les ilots dans le profil (trous) sont soustraits de la région qui a la plus grande superficie. Une fois le LISP chargé, taper prop_profil et sélectionner tous les objets qui constituent un profil. Si les objets sélectionnés constituent un contour fermé, une (ou des) région(s) est (sont) créée(s). Si plusieurs régions sont créées, celles dont les surfaces sont plus petites sont soustraites de celle dont la surface est la plus grande, pour ne donner qu'une région avec des ilots (trous). Seule la région créée est conservée (a sa place originale). Un message donne ensuite les moments d'inertie et l'aire de la région. (defun c:prop_profil (/ ss lst reg cen inert) (prompt "\nSélectionnez les objets décrivant le profil: ") (if (setq ss (ssget '((0 . "ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE,REGION,SPLINE")))) (progn (setq lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) ) (if (vl-every '(lambda (x) (= x "AcDbRegion")) (mapcar 'vla-get-ObjectName lst) ) (setq reg lst lst nil ) (progn (foreach obj lst (if (= (vla-get-ObjectName obj) "AcDbRegion") (setq lst (append (vlax-invoke obj 'Explode) (vl-remove obj lst))) ) ) (if (not (listp (setq reg (vl-catch-all-apply 'vlax-invoke (list (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object) ) ) 'addRegion lst ) ) ) ) ) (setq reg nil) ) ) ) (if reg (progn (setq reg (vl-sort reg '(lambda (e1 e2) ( (while (cdr reg) (vla-Boolean (last reg) acSubtraction (car reg)) (setq reg (cdr reg)) ) (setq cen (append (vlax-get (car reg) 'Centroid) '(0.0))) (vla-Move (car reg) (vlax-3d-point cen) (vlax-3d-point '(0 0 0))) (setq inert (vlax-get (car reg) 'MomentofInertia)) [surligneur](vla-Move (car reg) (vlax-3d-point '(0 0 0)) (vlax-3d-point cen))[/surligneur] (alert (strcat "Moments d'inertie.\nX: " (rtos (car inert) 2 1) "\nY: " (rtos (cadr inert) 2 1) "\nAire de la section: " (rtos (vla-get-Area (car reg))) "\nPérimètre: " (rtos (vla-get-Perimeter (car reg))) ) ) (mapcar 'vla-delete lst) ) (alert "Pas de région créée.") ) ) ) (princ) ) [Edité le 22/11/2006 par (gile)] [Edité le 23/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Le LISP prop_profil accepte désormais aussi les régions. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Ellionel Posté(e) le 23 novembre 2006 Auteur Posté(e) le 23 novembre 2006 Merci pour ce lisp . Il marche tres bien , serais til possible de deplacer la region au point 0,0, et ensuite afficher les données :Moments d'inerties ,l'aire et le périmetre . :) Pour le probleme des polylignes non fermées , je crois que la solution serait d'automatiser "Modification-objet-polyligne-multiple- Oui-Joindre-type de jointure-les deux- )Puis recommencer mais cette fois ci finir par clore , et ensuite lancer ton lisp .Et peut etre commencer par "overkill" Existe til une façon "simple " de faire cela , svp ??? Merci pour vos réponses ,
(gile) Posté(e) le 23 novembre 2006 Posté(e) le 23 novembre 2006 Salut, Il marche tres bien , serais til possible de deplacer la region au point 0,0, et ensuite afficher les données :Moments d'inerties ,l'aire et le périmetre . Tu ne le vois pas à l'écran, mais le LISP déplace la région (centre de gravité en 0,0) avant de récupérer les moments d'inertie, puis le replace dans sa position initiale.Si tu veux que la région reste en 0,0 supprime ou met un point virgule devant la ligne :[surligneur](vla-Move (car reg) (vlax-3d-point '(0 0 0)) (vlax-3d-point cen))[/surligneur] Je rajoute le périmètre aux informations données dans le message.Si tu préfères que ces informations apparaissent dans la fenêtre de texte, c'est possible aussi. Pour le probleme des polylignes non fermées , je crois que la solution serait d'automatiser "Modification-objet-polyligne-multiple- Oui-Joindre-type de jointure-les deux- )Voici un petit LISP qui fait ça, je pense qu'il est inutile de clore ou de faire un overkill puisque tous les objets sont ensuite transformés en une région unique par le LISP prop_profil. (defun c:JoinPoly (/ ss) (if (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE")))) (if (or (= 1 (getvar "PEDITACCEPT")) (vl-every '(lambda (x) (= "LWPOLYLINE" (cdr (assoc 0 (entget x))))) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) ) (command "_.pedit" "_m" ss "" "_j" "_j" "_b" pause "_c" "") (command "_.pedit" "_m" ss "" "_y" "_j" "_j" "_b" pause "_c" "") ) ) (princ) ) [Edité le 23/11/2006 par (gile)] [Edité le 23/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Ellionel Posté(e) le 23 novembre 2006 Auteur Posté(e) le 23 novembre 2006 Je viens de tester l'enchainement des deux lisp . :D Ils marchent tres bien je dois juste faire clore apres le remier lisp , car sans cela , il ne me créer pas de région dans le second lisp . Je peux donc ainsi transformer un profil aml déssiné en une region fermée avec les caractéristiques méca . Je vais essayer de comprendre comment fonctione les lisp pour pouvoir essayer de me dépatouiller . Merci Encore
(gile) Posté(e) le 23 novembre 2006 Posté(e) le 23 novembre 2006 Pour que le premier LISP ferme la poly à la fin, il suffit de rajouter "_c" entre pause et "".Je modifie le code ci-dessus. 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