Aller au contenu

Multilignes


Messages recommandés

Posté(e)

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 ?

Posté(e)

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

Posté(e)
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

Posté(e)

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/

Posté(e)

bonjour,

 

Merci a tous pour ces precieux renseignements. Je vois que seul le lisp peut me sauver

du 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 .......

Posté(e)

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: !a

10

 

Si on exécute test1, les valeurs avant et après le (setq ...) sont affichées :

 

Commande: test1

 

nil

20

 

Si on interroge la variable a, sa valeur est revenue à 10 :

 

Commande: !a

10

 

Si on exécute test2, les valeurs avant et après le (setq ...) sont affichées :

 

Commande: test2

 

10

30

 

Si on interroge la variable a, sa valeur a été changée en 30 :

 

Commande: !a

30

 

[Edité le 12/7/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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

Posté(e)

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

Posté(e)

(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."

Posté(e)
est quand même beaucoup plus joli que

Je 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...

Posté(e)

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."

Posté(e)

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

Posté(e)

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) options

Some of these are undocumented.

A All

B Box

C Crossing

CP Crossing Polygon

:D Duplicates OK

:E Everything in aperture

F Fence

G Groups

I Implied

L Last

:A Rejects frozen layers

:L Rejects locked layers

M Multiple

:N Nested

P Previous

:P Rejects Viewport

:S Force single object selection only

W Window

WP Window Polygon

X 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

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité