CADxp: Récupérer le nombre de polyligne qui passe sur une autre polyligne - CADxp

Aller au contenu

Page 1 sur 1

Récupérer le nombre de polyligne qui passe sur une autre polyligne

#1 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 31 juillet 2019 - 09:37

Hello,

Petite question, est-ce que c'est possible de récupérer le nombre de polyligne situé sur une polyligne avec une plus grosse épaisseur ? Exemple: Multiple polyligne

J'aimerai récupérer le chiffre "3" car il y a 3 polylignes qui passent sur la polyligne orange.

Merci bye!
0

#2 L'utilisateur est hors-ligne   COME 

  • ceinture noire
  • Groupe : Membres
  • Messages : 447
  • Inscrit(e) : 16-septembre 13

Posté 31 juillet 2019 - 11:07

Voir le messageAzRoDoRzA, le 31 juillet 2019 - 09:37 , dit :

Hello,

Petite question, est-ce que c'est possible de récupérer le nombre de polyligne situé sur une polyligne avec une plus grosse épaisseur ? Exemple: Multiple polyligne

J'aimerai récupérer le chiffre "3" car il y a 3 polylignes qui passent sur la polyligne orange.

Merci bye!


Salut,

comment cela récupérer "3" ? Avec un lisp ? En valeur ? En... je sais pas ! Quel est le but final ? Image IPB
COME

La vie sans musique est tout simplement une erreur, une fatigue, un exil. »
Friedrich Nietzsche
0

#3 L'utilisateur est hors-ligne   >>NicoM 

  • ceinture verte
  • Groupe : Membres
  • Messages : 57
  • Inscrit(e) : 06-juin 19

Posté 31 juillet 2019 - 11:13

Je pense que la programmation de ce que tu décrit est une vrai usine à gaz :blink:
Projeteur Béton Armé sur Revit 2020 et AutoCAD 2020
Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.
0

#4 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 31 juillet 2019 - 13:07

COME: effectivement, quand je dis 3, je parle de récupérer la valeur "3" qui correspond aux nombre de polylignes qui se situe sur la polyligne orange, et oui, je cherche à faire ça en Lisp, mais si une commande existe, je pourrai l'utiliser dans mon programme :)

NicoM: Ah mince.. :(
0

#5 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 31 juillet 2019 - 13:53

Bon et bien je vais me contenter d'un getkword qui demande le nombre de cable sur ces polylignes, ça fera l'affaire.

Merci à vous
0

#6 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1911
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 31 juillet 2019 - 13:57

Bonjour,

Tu peux facilement obtenir la liste des points de ta polyligne avec ceci

;Retourne la liste des points 2d (coordonnées SCO) des sommets de la polyligne sélectionnée. 
(defun massoc (key alst)
  (if (setq alst (member (assoc key alst) alst))
    (cons (cdar alst) (massoc key (cdr alst)))
  )
)


puis l'utiliser comme ceci

(- (sslength (ssget "_F" (massoc 10 (entget (car (entsel "\n Sélectionnez une polyligne: ")))))) 1)

...plus je sais où je suis, moins je sais où je vais....
Extrait d'une double interview simultanée d'une particule élémentaire.
0

#7 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 31 juillet 2019 - 14:49

Salut Fraid,

J'avais pensé à cet idée, mais le problème c'est que même si ma polyligne est énorme, elle n'a que 2 sommet au centre des extrémité de celle-ci et donc avec ton programme, il me retourne 1 car il n'y a qu'une polyligne qui passe par ses sommets, il faudrait trouver un moyen de pouvoir lui dire "ce sommet la et ses alentours", exemple:

Le sommet de ma polyligne est (25.8524 82.6763) et mon autre polyligne à son sommet en (25.7399 82.461), est-ce que c'est possible de comparer ces valeurs avec un arrondi fournis ? Du style à 0.2 près ?
0

#8 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1911
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 31 juillet 2019 - 15:10

Je ne comprend rien à ce que tu dit.
Du moment qu'une polyligne croise celle sélectionnée,
elle est prise en compte grâce à ssget "_F" qui sélectionne selon un trajet.
Cela n'a rien à voir avec le nombre de sommet.
...plus je sais où je suis, moins je sais où je vais....
Extrait d'une double interview simultanée d'une particule élémentaire.
0

#9 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1911
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 31 juillet 2019 - 15:17

après si c'est pour sélectionner des polylignes similaires et très proches, tu fais une sélections rectangulaire autour du premier point.
...plus je sais où je suis, moins je sais où je vais....
Extrait d'une double interview simultanée d'une particule élémentaire.
0

#10 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 01 août 2019 - 13:41

Comme le montre la photo, mes polylignes ne se superposent pas (elle superposent uniquement la polyligne orange mais elle ne la "croise" pas car elle est juste plus épaisse et l'épaisseur n'est que graphique). Du coup oui j'aimerai donc sélectionner des polylignes très proches, la solution de sélection rectangulaire n'est pas bête, je vais tester ça merci!
0

#11 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1911
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 02 août 2019 - 09:21

Citation

Comme le montre la photo

je n'avais pas vu ton image ....

en effet j’étais à coté

je te propose cette petite fonction

;nbpolep : Renvois le nombre de polylignes passant sur la largeur de la polyligne sélectionnée, nil si échoue.
(defun nbpolep ( / oldosmode pol pt pt1 pt2 ep in nb)
    (setq   oldosmode (getvar 'osmode)
	    pol (entget (car (entsel "\n Sélectionnez une polyligne: ")))
            pt (cdr (assoc 10 pol));premier point
            ep (cdr (assoc 43 pol));largeur
    )
    (setvar 'osmode 0)
    (if (> ep 0)
        (setq   in (+ (/ ep 2) (/ ep 100));incrément légèrement supérieur à la moitié de la largeur
                pt1 (mapcar '(lambda (x) (- x in)) pt)
                pt2 (mapcar '(lambda (x) (+ x in)) pt)
                nb (- (sslength (ssget "_C" pt1 pt2 )) 1)
        )
    (princ "\nLa polyligne doit avoir une largeur")
    )
    (setvar 'osmode oldosmode)
    nb
)

...plus je sais où je suis, moins je sais où je vais....
Extrait d'une double interview simultanée d'une particule élémentaire.
0

#12 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 02 août 2019 - 11:13

Pas mal du tout merci! Il faut juste que je modifie le code pour ne compter que les polylignes car, à première vue, il compte aussi les blocs ^^ Mais j'ai la base c'est impeccable merci beaucoup!
0

#13 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1911
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 02 août 2019 - 11:19

c'est effectivement une base de travail, il y a d'autre testes et filtres à mettre en place.
comme le SCU, je pense que cela plante si il n'est pas en général.

n’hésite pas à demander si tu ne t'en sort pas.
...plus je sais où je suis, moins je sais où je vais....
Extrait d'une double interview simultanée d'une particule élémentaire.
0

#14 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 02 août 2019 - 11:23

C'est gentil merci! Je posterai le lisp qui prend en compte uniquement les polyligne dès que je l'aurai terminé (ça devrait pas être trop long mais on sait jamais ;) )
0

#15 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 02 août 2019 - 14:20

Bon bah voila le code qui permet d'obtenir le nombre de polyligne situé sur une polyligne (en largeur):

;nbpolep : Renvois le nombre de polylignes passant sur la largeur de la polyligne sélectionnée, nil si échoue.
(defun nbpolep ( / oldosmode pol pt pt1 pt2 ep in nb)
    (setq   oldosmode (getvar 'osmode)
            pol (entget (car (entsel "\n Sélectionnez une polyligne: ")))
            pt (cdr (assoc 10 pol));premier point
            ep (cdr (assoc 43 pol));largeur
    )
    (setvar 'osmode 0)
    (if (> ep 0)
        (setq   in (+ (/ ep 2) (/ ep 100));incrément légèrement supérieur à la moitié de la largeur
                pt1 (mapcar '(lambda (x) (- x in)) pt)
                pt2 (mapcar '(lambda (x) (+ x in)) pt)
                listPoly (ssget "_C" pt1 pt2 )
        )
    (princ "\nLa polyligne doit avoir une largeur")
    )
    (setq i 0)
    (setq nb 0)
    (while(< i (sslength listPoly))
        (setq isPoly (entget(ssname listPoly i)))
        (if(= (cdr (nth 1 isPoly)) "LWPOLYLINE")
            (setq nb (+ nb 1))
            (prin1 "Pas une polyligne")
        )
        (setq i (+ i 1))
    )
    (setq nb (- nb 1))
    (setvar 'osmode oldosmode)
    nb
)


Désolé pour la propreté je débute en Lisp :rolleyes:
0

#16 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1911
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 02 août 2019 - 14:40

Citation

Désolé pour la propreté je débute en Lisp


il ne faut pas, nous sommes tous des débutant, depuis plus ou moins longtemps...

tu fait des efforts, et c'est cela qui compte.

sans vouloir te décourager, il y avais juste à rajouter un filtre au ssget comme cela

nb (- (sslength (ssget "_C" pt1 pt2 '((0 . "LWPOLYLINE")))) 1)


et bravo
...plus je sais où je suis, moins je sais où je vais....
Extrait d'une double interview simultanée d'une particule élémentaire.
0

#17 L'utilisateur est hors-ligne   AzRoDoRzA 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 36
  • Inscrit(e) : 16-juillet 19

Posté 02 août 2019 - 15:03

Non non pas de problème je suis là pour apprendre!

Justement, j'avais vu que je pouvais le faire avec ça mais j'ai essayé mais ça me mettait "nombre d'arguments trop importants" quand je rajoutait ce petit bout de code et donc j'ai cherché une autre solution.

Et là je viens de retester et ça fonctionne, c'est à n'y rien comprendre, peut-être que j'avais oublié la double parenthèse :huh:

Merci en tout cas!
0

Partager ce sujet :


Page 1 sur 1


Réponse rapide

  

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)