Aller au contenu

intersection


mlon

Messages recommandés

bonjour a tous! je cherche à touver l'intersection entre 1 droite et une polyligne

(propriétés des deux avec z constant = 0)

mon but est d'y placer un point

j'ai bien essayé avec

(command "_point" "_int" droite poly)

et avec

(command "_point "_int" coordonnées_droite coordonnées_poly)

mais rien n'y fait...

Merci d'avance...

 

je sais ce que je sais mais comment connaître mon ignorance

Lien vers le commentaire
Partager sur d’autres sites

Salut mlon,

 

Si tu veux te servir du mode d'accrochage aux objets "_int" il faut utiliser la foncton LISP (osnap) :

 

(command "_point" (osnap pt "_int"))

 

Dans ce cas pt est point qui doit être défini suffisamment proche de l'intersection pour que l'accrochage fonctionne.

 

Un autre moyen, meilleur il me semble, est d'utiliser (inters). C'est une fonction LISP qui nécessite 4 arguments : des points.

 

(inters pt1 pt2 pt3 pt4) retourne le point d'intersection du segment entre pt1 et pt2 et du segment entre pt3 et pt4.

(inters pt1 pt2 pt3 pt4 nil) retourne le point d'intersection prolongé.

 

A plus

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Ce que dit Gile est juste, mais assez galère a appliquer pour des polylignes optimisées "LWPOLYLINE" car il va falloir que tu identifie le bout de segment sélectionné.

Les anciennes serait plus facile à traiter avec la fonction (nentsel) puis un (entnext) pour acceder au sommet suivant.

 

Donc si tu veut pouvoir mixer different type d'objet, je pense qu'il va falloir te tourner ver les fonction (vlax....) pour plus de facilité.

 

Je te conseille de regarder un bout de code appeler VxGetInters

 

et de l'utiliser pour essayer, sous la forme:

(VxGetInters (vlax-ename->vla-object (car (entsel))) (vlax-ename->vla-object (car (entsel))) 0)

tu peut changer 0 en 3, tu auras alors l'intersection projetée

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

Lien vers le commentaire
Partager sur d’autres sites

ben ca a l'air d'être exactement ce ke je voulais ...reste plus k me mettre au vlisp...eh oui je ne connais pas du tout....enfin merci pour ces précisions

et bon week end...

je sais ce que je sais mais comment connaître mon ignorance

Lien vers le commentaire
Partager sur d’autres sites

Re-salut

 

Attention, VxGetInters retourne une liste de points, eh oui, il peut y avoir plusieurs intersections.

 

Donc, pour ton (ou tes) point(s) d'intersection il faut faire,

pour un point à la première intersection :

 

(command "_point"

(car

(VxGetInters

(vlax-ename->vla-object (car (entsel "\nPremier objet: ")))

(vlax-ename->vla-object (car (entsel "\nDeuxième objet: ")))

0

)

)

)

 

ou, pour un point sur chaque intersection :

 

(foreach pt

(VxGetInters

(vlax-ename->vla-object (car (entsel "\nPremier objet: ")))

(vlax-ename->vla-object (car (entsel "\nDeuxième objet: ")))

0

)

(command "_point" pt)

)

 

Bon courrage avec le vlisp, moi je patauge !

Lien vers le commentaire
Partager sur d’autres sites

au risque de dire une grosse connerie quand je rentre en ligne de commande ton vlisp ben ca marche po il me demande de spécifier le point et il dit

"

Premier objet:

Deuxième objet: ; erreur: type d'argument incorrect: VLA-OBJECT nil

Spécifiez un point:

Point incorrect.

Spécifiez un point:

Point incorrect.

"

je sais ce que je sais mais comment connaître mon ignorance

Lien vers le commentaire
Partager sur d’autres sites

wé enfin je l'ai chargée mais est ce bien cela

(defun VxGetInters (Fst Nxt Mde / IntLst PntLst)

(vl-load-com)

(setq IntLst (vlax-invoke Fst 'IntersectWith Nxt Mde))

(cond

(IntLst

(repeat (/ (length IntLst) 3)

(setq PntLst (cons

(list

(car IntLst)

(cadr IntLst)

(caddr IntLst)

)

PntLst

)

IntLst (cdddr IntLst)

)

)

(reverse PntLst)

)

(T nil)

)

)

je sais ce que je sais mais comment connaître mon ignorance

Lien vers le commentaire
Partager sur d’autres sites

wé je crois ke j'ai pas compris une subtilité de base ... peut etre si tu m'expliquais comme a un enfant de cinq ans...

:-)

n'ayant jamais travaillé avec vlisp je n'ai aucune fonction de chargée ; si elle s'imbriquent les unes dans les autres faut-il ke je les charge toutes?

je sais ce que je sais mais comment connaître mon ignorance

Lien vers le commentaire
Partager sur d’autres sites

le vl-load-com est necessaire sur les versions 2000 2002.

 

Par défaut, tu le mets au début de ta routine, comme ca elle deviendra compatible toutes versions

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

C'est tout à fait cela !

 

Que ce soit avec Vlisp ou Autolisp, quand une fonction appelle une autre fonction si ce n'est pas une fonction pré-définie dans AutoCAD (celle qui apparaissent en bleu dans l'éditeur VisualLisp)

il faut qu'elle soit chargée (dans le dessin en cours ou dans la session). il y a plusieurs façons de charger des fonctions à chaque démarrage pour qu'elles soient disponibles : à partir de la boite dialogue "charger une application..." cliquer sur le bouton "contenu" et "ajouter", copier les codes dans certains fichiers acaddoc200*.lsp, *.mnl...L'aide explique assez bien comment faire (guide de la personnalisation).

 

Sinon tu trouveras beaucoup d'informations ici

Lien vers le commentaire
Partager sur d’autres sites

encore une fois merci a tous ! ca marche mon capitaine bon je vous poste le reste du lisp pour que vous puissiez voir un peu à koi ke ca sert (le lisp est pas fini le but est en fait de créer des passages piétons ki se dessinent à partir de deux courbes et d'un vecteur directeur moyen le tout avec les arrondis aux courbes )

je me doute ke j'utilise certainement moins de 1% du languege mais bon du moment ke ca marche...la suite au prochain épisode ;)

(defun c:mm_pp ()

(prompt

"Passages piétons en courbes ---Conception Marcel--- vive les bugs"

)

(prompt "Sélectionnez la courbe 1")

(setq mm_courb1 (ssget)) ;crée un jeu de sélection avec la courbe 1 dedans

(prompt "Sélectionnez la courbe 2")

(setq mm_courb2 (ssget)) ;crée un jeu de sélection avec la courbe 2 dedans

(prompt

"Sélectionnez le support directeur du passage piéton"

)

(setq mm_suppor (ssget)) ;crée un jeu de sélection avec le support directeur du passage piéton dedans

(command "_ucs" "_g" "h")

(command "_point" "0,0,0")

(setq entfirst (entlast)

mm_temp entfirst

) ;crée un point en scu général à 0,0,0 (rare de trouver quelque chose en lambert à 0,0,0 à moins de bosser à bordeaux)

;et le place dans entfirst et et dans mm_temp; ce sera notre entité de base pour l'instant ;-)

(command "_copy" mm_courb1 mm_courb2

mm_suppor "" "0,0,0"

"-100000,-100000,0"

)

(setq mm_courb1 (entnext entfirst)

mm_courb2 (entnext mm_courb1)

mm_suppor (entnext mm_courb2)

)

(command "_erase" mm_temp "") ;efface le point temporaire en 0,0,0

(command "_divide" mm_suppor "3")

(setq pt2 (entnext mm_suppor)

pt3 (entnext pt2)

)

 

(setq proppt2 (entget pt2)

zpt2 (cadddr (assoc 10 proppt2))

ypt2 (caddr (assoc 10 proppt2))

xpt2 (cadr (assoc 10 proppt2))

 

proppt3 (entget pt3)

zpt3 (cadddr (assoc 10 proppt3))

ypt3 (caddr (assoc 10 proppt3))

xpt3 (cadr (assoc 10 proppt3))

coorpt2 (list xpt2 ypt2 zpt2)

coorpt3 (list xpt3 ypt3 zpt3)

)

 

(command "_xline" coorpt2 coorpt3 "")

(setq d1 (entnext pt3)

decal_temp (list (+ 100000 xpt2) (+ 100000 ypt2) zpt2)

 

)

 

(command "_offset" "1.5" d1 decal_temp "")

 

(setq decal_temp

nil

 

d2 (entnext d1)

 

)

(command "_mirror" d2 "" coorpt2 coorpt3 "non")

(setq d3 (entnext d2))

(vl-load-com)

(setq coorlpt4 (car (VxGetInters

(vlax-ename->vla-object mm_courb2)

(vlax-ename->vla-object d3)

0

)

)

xpt4 (car coorlpt4)

ypt4 (cadr coorlpt4)

coorpt4 (list xpt4 ypt4)

)

(command "_point" coorpt4)

 

 

) ;end defun

 

je sais ce que je sais mais comment connaître mon ignorance

Lien vers le commentaire
Partager sur d’autres sites

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é