bipbip Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Bonjour, Comment faire pour obtenir le métré d'un dessin de chemin de cable fait en multiligne. J'ai essaye avec liste mais ca donne rien. ??? Une idee ?
(gile) Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Salut, Je ne connais pas bien les objets MLINE (je ne les utilises pas), mais j'ai essayé de faire un petit LISP qui fonctionne, la longueur de la multiligne sélectionnée est retournée sur la ligne de commande. (defun c:mline_len (/ ent elst plst) (if (and (setq ent (ssget "_:S:E" '((0 . "MLINE")))) (setq elst (entget (ssname ent 0))) (setq plst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 11)) elst ) ) ) ) (princ (apply '+ (mapcar '(lambda (x1 x2) (distance x1 x2)) plst (if (= 2 (logand 2 (cdr (assoc 71 elst)))) (cdr (append plst (list (car plst)))) (cdr plst) ) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Bonjour à toutes et tous, (gile) ,J'ai testé "mline_len" , Renvoi la longueur suivant le type de justification (dessus-nulle ou dessous) lors de sa création ! Ne serait-il pas préférable d'avoir toujours la longueur à l'axe ? Bien pratique cette commande ! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Renvoi la longueur suivant le type de justification (dessus-nulle ou dessous) lors de sa création ! Oui, ce sont les points enregistrés dans les données de l'entité. Ne serait-il pas préférable d'avoir toujours la longueur à l'axe ? Je n'en sais rien, je n'utilise pas ces entités, mais ce que je sais c'est que ça compliquerait beaucoup le code ! Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Re, Merci de ta réponse, mais ce que je sais c'est que ça compliquerait beaucoup le code ! Moi par contre, je n'en sais rien,... C'était une question ! On peut également recherché le linéaire de l'extérieur ou de l'intérieur d'un mur ! Du moment que l'utilisateur sait qu'il récupère la longueur entre points enregistrés dans les données de l'entité, y'a pas de soucis . Le métré recherché conditionnera le choix du tracé des multilignes,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
bipbip Posté(e) le 12 juillet 2008 Auteur Posté(e) le 12 juillet 2008 bonjour, Merci a tous pour ces precieux renseignements. Je vois que seul le lisp peut me sauverdu piege de mligne.De plus c vraiment pas evident de travailler avec un tel outil !!!! Pour ce qui est du developpement exterieur du mur ou interieur c'est pas vital. C'est juste faire une estimation. Un bon WE .......
lili2006 Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Re, Tout est bien qui fini bien alors, J'me la garde au chaud aussi cette routine,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Rere, (defun c:mline_len [surligneur] (/ ent elst plst)[/surligneur] Par curiosité (et pour compréhension!), que représente les éléments que l'on trouve très souvent derrière le "defun c: lafonction" ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Par curiosité (et pour compréhension!), que représente les éléments que l'on trouve très souvent derrière le "defun c: lafonction" ? La fonction defun sert à définir une fonction.Le premier argument est un symbole décrivant le nom de la fonction, le second une expression contenant les arguments requis par la fonction et les variables locales. Si la fonction ne requiert ni argument ni variable, l'expression doit quand même être présente : expression vide ().Puis viennent les expressions dont l'évaluation retournera le résultat désiré. (defun symbole ([arguments…] [/ variables...]) expression...) Généralement, un (defun c:* ...) ne comporte pas d'arguments (on ne peut pas appeler une commande avec arguments), mais souvent des variables.Pour être différenciées des arguments, les symboles des variables sont placées après une barre oblique. Les variables ainsi déclarées sont dites "locales", les valeurs qui leur sont attribuées dans la fonction ne le sont que pendant le déroulement de la fonction. Si les variables ne sont pas déclarées, leur valeur est conservés pendant toute la session du dessin, on parle alors de variable "globales". Exemple : ;; fonction avec déclaration de variable (defun c:test1 (/ a) (print a) ; affiche la valeur de a (setq a 20) ; attribue la valeur 20 à la variable a (print a) ; affiche la nouvelle valeur de a (princ) ) ;; fonction sans déclaration de variable (defun c:test2 () (print a) ; affiche la valeur de a (setq a 30) ; attribue la valeur 30 à la variable a (print a) ; affiche la nouvelle valeur de a (princ) ) Une fois ces fonctions chargées on peut faire un petit test à la ligne de commande Attribution de la valeur 10 à la variable a dans le dessin (hors fonction) : Commande: (setq a 10)10 Si on interroge la variable, sa valeur est retournée : Commande: !a10 Si on exécute test1, les valeurs avant et après le (setq ...) sont affichées : Commande: test1 nil20 Si on interroge la variable a, sa valeur est revenue à 10 : Commande: !a10 Si on exécute test2, les valeurs avant et après le (setq ...) sont affichées : Commande: test2 1030 Si on interroge la variable a, sa valeur a été changée en 30 : Commande: !a30 [Edité le 12/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 12 juillet 2008 Posté(e) le 12 juillet 2008 Rere, Ok (gile), Merci pour ces explications. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
fabcad Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Bonjour A tous, Je lispe mais je ne connais pas la syntaxe "_:S:E" dans la ligne de sélection des objets : (ssget "_:S:E" '((0 . "MLINE")))) Merci pour les infos, Fabrice
(gile) Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Salut fabcad, "_:S:E" est une combinaison d'options pour ssget : - le underscore (_) c'est pour "l'international", il est indispensable pour certaines options ssget, pas nécessaire pour d'autres, dans le doute, je le met systématiquement.- :S c'est pour sélectionner un seul objet- :E c'est pour pour sélectionner tout ce qui est derrière la cible de sélection (pas de fenêtre ni de capture. La combinaison de ces options revient à ne sélectionner qu'un unique objet en un seul clic comme avec entsel, mais l'utilisation de ssget permet l'usage d'un filtre. À la place de : (and (setq ent (ssget "_:S:E" '((0 . "MLINE")))) (setq elst (entget (ssname ent 0))) ) J'aurais pu écrire : (and (setq ent (car (entsel)) (setq elst (entget ent)) (= (cdr (assoc 0 elst)) "MLINE") ) [Edité le 15/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 (setq ent (ssget "_:S:E" '((0 . "MLINE"))))est quand même beaucoup plus joli que(and (setq ent (car (entsel)) (setq elst (entget ent)) (= (cdr (assoc 0 elst)) "MLINE") )... Soit dit en passant... "Chacun compte pour un, et nul ne compte pour plus d'un."
Bred Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 est quand même beaucoup plus joli queJe ne suis pas d'accord, car on ne peux mettre de texte avec ssget, ce qui est particulièrement pratique lorsque l'on veut faire sélectionner un seul type d'objet a l'utilisateur ! ... sauf grâce à la super petite routine de (gile) ici ! Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Matt666 Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Ah oui... C'est vrai ! :cool: Je parlais surtout d'un point de vue code brut ! ;) La beauté du code quoi.Mais le résultat l'est moins, c'est vrai ! "Chacun compte pour un, et nul ne compte pour plus d'un."
(gile) Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Eh oui Matt666, il ne faut pas tomber dans ce travers (dans lequel je tombe trop souvent) qui consiste à se focaliser su le style d'un code. À priori, une routine se doit avant tout d'être efficace... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Un petit truc en plus ! (ssget "_+.:E:S" '((0 . "DIMENSION"))) Le plus plus représente un AND Voici un extrait d'un message d'un forum US que j'ai conservé concernant les filtres avec certaine option non documentés dans l'aide: (ssget "_+.:E:S" '((0 . "DIMENSION"))); E =Everything under cursor S =Single + =AND (ssget "_:L" '((-4 . ""))); L =Looked layer exclusion http://discussion.autodesk.com/thread.jspa?threadID=430674 I picked this up from some helpful soul a while back :-(ssget) optionsSome of these are undocumented.A AllB BoxC CrossingCP Crossing Polygon:D Duplicates OK:E Everything in apertureF FenceG GroupsI ImpliedL Last:A Rejects frozen layers:L Rejects locked layersM Multiple:N NestedP Previous:P Rejects Viewport:S Force single object selection onlyW WindowWP Window PolygonX Extended search (search whole database) Also, the following on a thread about this subject - sorry I lost the"Author" info :- Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Merci pour la précision Bonuscad, mais personnellement je n'ai jamais réussi à voir la différence entre :(ssget "_+.:E:S")(ssget "_:E:S")(ssget "_:S:E")comme si le "AND" était par défaut. Par contre, contrairement à ce que je disais (et à ce que dit la citation donnée par Bonuscad), :S ne permet qu'une sélection mais peut sélectionner plusieurs objets. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 15 juillet 2008 Posté(e) le 15 juillet 2008 Merci a vous tous pour vos réponses.Bonne journée...
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