mlon Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 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
gile Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 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
bonuscad Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 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
mlon Posté(e) le 10 juin 2005 Auteur Posté(e) le 10 juin 2005 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écisionset bon week end... je sais ce que je sais mais comment connaître mon ignorance
gile Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 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 !
mlon Posté(e) le 10 juin 2005 Auteur Posté(e) le 10 juin 2005 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 nilSpécifiez un point:Point incorrect.Spécifiez un point:Point incorrect." je sais ce que je sais mais comment connaître mon ignorance
gile Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 Avant le premier appel à une fonction VL il faut activer la fonctionalité ActiveX en faisant un (vl-load-com) Il faut aussi, bien sûr que VxGetInters soit chargé. Là çà devrait marcher.
mlon Posté(e) le 10 juin 2005 Auteur Posté(e) le 10 juin 2005 et comment on charge cette fonction???? je sais ce que je sais mais comment connaître mon ignorance
gile Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 Dans l'onglet "Outils" -> "Charger une application..." par exemple ou la copier dans l'éditeur VisualLISP et la charger à partir de là
mlon Posté(e) le 10 juin 2005 Auteur Posté(e) le 10 juin 2005 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
mlon Posté(e) le 10 juin 2005 Auteur Posté(e) le 10 juin 2005 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
Tramber Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 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 ./__\. (.°=°.)
gile Posté(e) le 10 juin 2005 Posté(e) le 10 juin 2005 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
mlon Posté(e) le 10 juin 2005 Auteur Posté(e) le 10 juin 2005 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
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