Aller au contenu

Messages recommandés

Posté(e)

Avec entsel, on obtient bien le vertex de poly3D cliqué.

 

Mais ca ne marche pas sur une poly, comment fait-on ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

hello Tramber,

pas clair, mais bon, on va essayer de comprendre.

que souhaites tu obtenir ?

la définition du segment de polyligne

sur lequel tu cliques au message "choix des objets"

ça doit être ça, car j'ai testé, et je ne vois pas de VRAIE différence.

voir peut être du côté de PLINETYPE

à suivre ...

amicalement

 

Posté(e)

Salut Didier !

 

Je cherche le numéro du segment de polyligne surlequel je clique.

 

En fait, j'y arrive, mais ca ne m'a pas l'air très catholique.

 

En particulier ca ne marche pas pour une poly à 2 segments.

 

Pourvu que je dorme cette nuit ! :P

 


(entget (car(setq Ent (entsel ))))
(setq pointpro (cadr ent))

(setq listedpoin(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget  (car ent)))))

(trouvepres pointpro listedpoin)

 

avec

 


(defun trouvepres  (pt1 vlist / a li poinba repere)
 (setq pt1 pointpro vlist listedpoin a 0 li (list 120000) poinba (list 1200000 1200000) repere 0)
 (repeat (1- (length vlist))
   (setq tmpPt (nth a vlist))
   (setq li (append li (list (distance pt1 tmpPt))))
   (if (      (progn
       (setq poinba tmpPt)
       (setq repere a)))
   (setq a (1+ a)))repere)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

je te salue l'ami,

voilà ma solution,

il doit y en avoir d'autres, mais celle ci a deux mérites

elle existe et elle fonctionne.

le principe est le suivant

je liste la polyligne,

je choisis un point sur un segment quelconque,

je calcule l'angle du premier segment

je calcule l'angle entre le point du premier segment et le point choisi

si c'est bon, (à la sixième décimale, faut bien filtrer), ça s'arrête

avec une indication du numéro du segment,

si c'est pas bon je passe au suivant et je fais le même test,

et ainsi de suite.

tiens moi au courant.

bonsoir

(setq ent (car (entsel)))

(setvar "osmode" 512)

(setq pt (getpoint "\nchoix du segment ...\n"))

(setq pt (list (car pt) (cadr pt)))

(setvar "osmode" 0)

(setq lc (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10))(entget ent))))

(setq lon (length lc))

(setq n 0)

(setq segment 1)

(setq test1 0

test2 200

)

(repeat lon

(setq tempo1 (nth n lc)

n (+ 1 n)

tempo2 (nth n lc)

test1 (rtos (angle tempo1 tempo2) 2 6)

test2 (rtos (angle tempo1 pt) 2 6))

(if ( = test1 test2)

(progn

(alert (strcat "il s'agit du segment : " (itoa segment)))

(quit)

)

)

(setq segment (+ segment 1))

)

ben voilà, c'est tout ce que j'avais à dire

amicalement

Posté(e)

Salut Tramber,

 

En regardant le fil http://www.cadxp.com/sujetXForum-3162.htm

 

Je trouve que la demande est similaire et pourrait être aussi résolue par la même démarche.

 

La solution de Didier est bonne (mais plante sur le vertex qui peut clore une polyligne)

Avec ces 2 dicussions tu trouveras certainement la solution que tu désire.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci bien les gars !

 

C'est un vrai problème quand les poly contiennent des arcs ! Non ?

 

Je me suis même demandé à un moment, s'il ne fallait pas mieux transformer en polyligne ancienne génération, car là, entsel renvoie le vertex sur lequel on clique, celui qu'on cherche. C'est ce que me propose Didier avec PLINETYPE, il me semble.

 

Mais j'ai de la matière pour la semaine maintenant.

 

[Edité le 18/10/2004 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Tu peux utiliser PLINETYPE en effet mais, à ce moment là, ce n'est plus (entsel) mais (nentsel) qu'il faut utiliser.

Tu as certainement penser juste mais écrit faux ;)

 

Mais si tu utilise cet accés direct aux sous-entité, la procédure pour identifier le numéro de segment va devenir difficile, mais c'est peut être un faux problème par rapport a ce que tu veux obtenir (identifier le segment ou obtenir ses points de définition ?)

En effet la routine de Didier ne fonctionne pas avec des arcs.

 

La routine sur laquelle je te renvoie assume les arcs mais pas les splines. Elles te retourne les sommets précédent et suivant. (tu peux la modifier pour obtenir la position du segment si c'est vraiment ça que tu cherche)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

bonsoir les furieux,

ben je vais regarder de près la routine de Serge,

car ce que j'ai pondu, c'est perfectible,

c'est vrai que je n'ai pas pensé aux arcs éventuels.

Une preuve de plus,

qu' à plusieurs têtes

on pense plusieurs fois ... et on se sent moins seul,

Einstein devait se sentir terriblement seul, lui ...

 

à bientôt

 

 

Posté(e)

Tramber,

 

Il y a aussi ce code (ne s'applique qu'aux polylignes optimisées). Tient compe des arcs. À noter une variante pour la détection des sommets.

 

(defun c:test (

/ dist n place pline plinesel point selectedDist

sommet sommets vlaPline

)

(setq plinesel (entsel "\nSélectionnez la polyligne:"))

(setq pline (car plinesel))

(setq point (osnap (cadr plinesel) "_nearest"))

(setq vlaPline (vlax-ename->vla-object pline))

(if (= (vla-get-objectname vlaPline) "AcDbPolyline")

(progn

(setq selectedDist (vlax-curve-getDistAtPoint vlaPline point))

(setq sommets (safearray-value (variant-value (vla-get-Coordinates vlaPline))))

(setq n (1- (length sommets)))

(setq place nil)

(while (> n 0)

(setq sommet (list (nth (1- n) sommets) (nth n sommets)))

(setq dist (vlax-curve-getDistAtPoint vlaPline sommet))

(if (and (not place) (< dist selectedDist)) (setq place (/ (1+ n) 2)))

(setq n (- n 2))

)

;; Note: L'index du premier sommet est 1.

(princ (strcat "\nLe point choisi se situe entre les sommets "

(itoa place) " et " (itoa (1+ place))

" de " (itoa (/ (length sommets) 2)) " sommets."

))

))

(princ)

)

 

 

Tout ce que j'ignore, je le dois à mes connaissances (l'inverse se dit aussi).

 

Serge

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é