mateus Posté(e) le 1 août 2013 Auteur Posté(e) le 1 août 2013 Bonjour Didier et merci pour ta réponse, En fait je souhaiterai récupérer les noms de mes entités des mes jointures ( ex : (<Nom d'entité: 7ffff8c6f30>) pour pouvoir faire rappel à eux afin de les joindre au réseau principal. Merci d'avance Didier
mateus Posté(e) le 1 août 2013 Auteur Posté(e) le 1 août 2013 Re bonsoir Didier, au même titre que le souhait de récupérer les noms d'entités de mes polylignes, j'aimerai récupérer également récupérer celles de mes points (pt3 pt4 pt5 pt6 pt7 pt8)pour chaque jonctions avec le réseau principal toujours. Merci d'avance Amicalement.
alala Posté(e) le 1 août 2013 Posté(e) le 1 août 2013 Bonjour, Si je comprend bien le soucis, pourquoi ne pas te faire une liste à la création des entités? Lorsque tu fait une polyligne tu peu poursuivre avec un entlast que tu enregistrera dans une liste dans un ordre qui t'arrange pour ensuite réutiliser ces entités à ta convenance. Le plus simple serait encore de créer les polylignes avec un Entmakex comme ça tu pourrais récupérer l'entité dés sa création sans passer par un entlast. @+ C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
mateus Posté(e) le 2 août 2013 Auteur Posté(e) le 2 août 2013 Bonjour alala, en fait c'est bien ça que je veux faire (utiliser entlast) pour récupérer mes entités mais je veux les récupérer pour chacune de mes jonctions comme tu peux le voir dans mon programme au post #46 (fonction n°8). Je ne trouve pas le moyen de récupérer toutes les entité car (entlast) me retourne le dernier élément en vue (progn ;;tracé des jonctions du côté "rouge" (foreach n lst_pt ;;pour chaque point d'insertion existant dans la liste "lst_pt" on créer les points permettant de réaliser les jonctions (setq pt3 (polar n (+ orient (/ pi 2)) decalageCandelabre) pt4 (polar n (+ orient pi) (/ decalageCandelabre 2)) pt5 (polar n (+ orient 0) (/ decalageCandelabre 2)) ) (command "polylign" n pt3 "");; EXEMPLE POUR CETTE LIGNE : ICI SI JE VEUX RECUPERER LA POLYLIGNE QUI DEBUTE DU POINT "n" AU POINT "pt3", LE PROBLEME EST QUE CELA ME RETOURNE LA DERNIERE ENTITEE TRACEE CONNUE (command "polylign" n pt4 "");;RECUPERER ENTITE (command "polylign" pt4 pt3 "");;RECUPERER ENTITE (command "polylign" n pt5 "");;RECUPERER ENTITE (command "polylign" pt5 pt3 "");;RECUPERER ENTITE ;;tracé des jonctions ======================= [[ ICI IL FAUT RECUPERER LES ENTITES POUR FINALISER PAR LE RACCORD ]] ==================================== Amicalement
alala Posté(e) le 2 août 2013 Posté(e) le 2 août 2013 D'ou l'intérêt defaire une liste par exemple: (setq malistedepoly '()) (command "polylign" n pt3 "") (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" n pt4 "") (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" pt4 pt3 "") (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" n pt5 "") (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" pt5 pt3 "") (setq malistedepoly (cons malistedepoly entlast)) Donc la liste "malistedepoly" contiendra les nom d'entités désirés dans l'ordre ou elle ont été crées. A toi ensuite d'exploiter la liste à ta convenance. C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
mateus Posté(e) le 2 août 2013 Auteur Posté(e) le 2 août 2013 Merci pour ta réponse alala, Le problème c'est qu'il faut que je récupère chaque entité de polyligne tracée pour chaque jonction parce que j'ai utilisé la fonction (foreach) (pour chaque point d'insertion "n" trouvé sur le réseau principal --> tracer les polylignes de jonctions #46 Donc ce que je cherche à faire, c'est de récupérer tous mes noms d'entité (polyligne et même points, voir schéma d'explication joint au #48 "Explications_details_entitees.pdf" en utilisant des listes comme tu as dis alala mais de façon à ce que je les récupère pour chaque jonctions. Amicalement
alala Posté(e) le 5 août 2013 Posté(e) le 5 août 2013 bonjour, Il suffira d'entrer la création de la liste dans la boucle. (setq malistedepoly '()) (foreach n lst_pt ;;pour chaque point d'insertion existant dans la liste "lst_pt" on créer les points permettant de réaliser les jonctions (setq pt3 (polar n (+ orient (/ pi 2)) decalageCandelabre) pt4 (polar n (+ orient pi) (/ decalageCandelabre 2)) pt5 (polar n (+ orient 0) (/ decalageCandelabre 2)) ) (command "polylign" n pt3 "");;RECUPERER ENTITE (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" n pt4 "");;RECUPERER ENTITE (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" pt4 pt3 "");;RECUPERER ENTITE (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" n pt5 "");;RECUPERER ENTITE (setq malistedepoly (cons malistedepoly entlast)) (command "polylign" pt5 pt3 "");;RECUPERER ENTITE (setq malistedepoly (cons malistedepoly entlast)) ;;tracé des jonctions ======================= [[ ICI IL FAUT RECUPERER LES ENTITES POUR FINALISER PAR LE RACCORD ]] ==================================== (command "inserer" "candelabre1" pt3 1 1 orient "") ;; insère les candélabres aux points de piquages [[ PB REDEFINIR LANGLE ]] ) A voir ensuite comment tu souhaite exploiter cette liste qui contiendra tous les noms de polylignes crées. Personnellement j'ai tendance à faire le moins de grosses listes possibles (de plus en plus longues à traiter) donc dans ton cas si tu le peu il serait intéressant d'exploiter les informations que tu récolte au plus vite, donc dans la boucle. En testant ton Lips je me pose une question (peu être bête) mais pourquoi faire une choix de placement d'un coté ou de l'autre de la ligne principale dans un premier temps avec la souri, puis avec un choix de couleur ensuite? Si c'est pour une présentation pense à bien réfléchir à l'utilisateur final et son approche du "logiciel".les temps d'exécution notamment me semblent un peu long. @+ C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
mateus Posté(e) le 5 août 2013 Auteur Posté(e) le 5 août 2013 Bonsoir alala, Encore merci pour ta réponse, grâce à toi j'ai enfin pu récupérer mes entités ! Je n'ai pas encore testé ce que je voulais faire pour raccorder et joindre à mon réseau principal mais j'essaierai très prochainement. C'est vrai que c'est un peu long car il faut cliquer sur la souris plusieurs autant de fois qu'il y a de luminaires pour terminer le programme. Sait tu d'où vient ce problème par hasard, j'aimerai bien qu'ils se positionnent sans qu'on ai besoin de cliquer plusieurs fois sur la souris. Amicalement
mateus Posté(e) le 19 août 2013 Auteur Posté(e) le 19 août 2013 Bonjour à tous, Ce message s'adresse à tous et toutes mais plus particulièrement à Didier si tu passe dans le coin :). Cela fait un moment que je n'ai pas eu le temps de retoucher à mon programme mais je m'y remet depuis hier et il beugue toujours au niveau de l'orientation de mes candélabres: Si je choisis de mettre "0" en guise d'orientation pour l'insertion de mes blocs, le programme est fluide mais l'orientation est mauvaise. Sinon , si je choisis de mettre "orient" qui est la variable qui définit la vraie orientation de mes candélabres par rapport à mon réseau, non seulement le programme n'est pas fluide parce que le programme prend en compte une orientation de "1" (je ne sais pas pourquoi) et il faut que je clique autant de fois sur la souris qu'il y aura d'implantations(étrange) celui-ci étant mon premier problème. Le deuxième : raccord-jointure entre mes raccordements et le réseau principal.J'ai enfin pu récupérer mes entités de types polylignes ( pour les droites qui représentent les piquages) et les points d'insertions au nombre de 3 pour chaque piquage. (Merci alala) Ce que j'aimerai faire c'est éventuellement supprimer mon réseau principal et relier le tout avec la commande polyligne mais je ne sais pas trop comment m'y prendre... Merci d'avance.Commandes_v0.1.1.LSPINIT.lsp
didier Posté(e) le 19 août 2013 Posté(e) le 19 août 2013 coucou je passe effectivement par là (hihi)j'ai travaillé un bout de routine sur ton souci mais j'ai fait des impasses par rapport à toij'ai fait "simple"par contre je me tâte pour savoir si je dois te le faire passer, pas que je veuille garder pour moi, je suis partageur et ça ne me sert à rien ce genre de routinemais si tu es en phase apprentissage je me doute que tu vas copier-coller et là c'est pas bien du tout (hihi) en passant, je comprends pas tout ce que tu dis, EXPLIQUE en français dans le texte...du style :je fais une droite du point A au point B je la décale vers la gauche de la valeur x et ensuite sur cette ligné décalée j'insère des candélabres avec un espacement qui correspond à la variable toto que je relie à la ligne première par des pieds d'équerre (approché) à une valeur en rapport à la valeur de décalage.tu vois le genre d'explication pour que quelqu'un extérieur à ton projet puisse rentrer dedans. pour ce qui est de l'orientation de tes blocs c'est du pur AutoCAD rien de lisp là dedans, et je répète ce que je serine depuis des générationsavant de programmer il faut maîtriser le logiciel je dis bien "maîtriser"tu as appris à marcher avant de savoir courir, non ? fais-moi savoir si tu es intéressé amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 19 août 2013 Auteur Posté(e) le 19 août 2013 J'en étais sur que tu viendrai ahaha !! Merci Didier pour ta réponse et pour ta routine dont tu as pris le temps de faire pour m'aider. Tout d'abord concernant cette routine mon but n'est pas de la prendre et de la copier coller mais de comprendre comment d'autres personnes extérieures comme toi fonctionnent. Prendre les bons côtés du code de ces personnes et retravailler ou garder ce que moi j'estime de bon de mon programme (même si ce ne l'est pas pour certain). D'ailleurs, un autre autocadien programmer, pour pas le nommé : Olivier m'avait fait à sa manière avec les fonctions visual lisp ce programme (merci encore et bonjour à toi si tu passes par ici Olivier). Son programme je l'ai gardé et je compte le réutiliser (reprendre sa manière de traiter son programme modifier , rajouter etc.) Pour l'orientation Didier, je sais bien que c'est du pûr autocad mais lors de mes insertions autocad justement ne veut rien savoir. Comme je t'ai dis sur le post précédent lorsque je mets "0" en orientation, ce n'est pas la bonne orientation mais le programme est fluide dans le sens ou il insère automatiquement les candélabres (blocs) par contre si je mets l'orientation qui est "orient" (variable définissant l'angle) le programme perd contrôle, n'est plus fluide du tout, il faut cliquer sur la souris pour que tous les blocs s'insèrent et ne s'insèrent d'ailleurs pas avec la bonne orientation. :unsure: Pour le reste de mon programme je souhaiterai comme montré dans le post 49 joindre mon réseau principal avec mes piquages. J'ai pensé à supprimer la polylign réseau dans un premier temps. Ensuite tracer les droites qui lieraient les piquages (comme montré en photo ci-joint) Pour finir par le raccordement en rayon Bonne soirée ! Il me reste un mois avant la fin du monde !!!! <_<
didier Posté(e) le 19 août 2013 Posté(e) le 19 août 2013 Coucou regarde ce code et dis-moi si ça convient . pour ce qui est de tes blocs fais gaffe de désactiver l’accrochage pendant la routine si ça se trouve ça vient de là. (setq oldosmode (getvar "osmode")); je mémorise dans la variable oldsomode les accrochages actifs(setvar "osmode" 0); je désactive tous les accrochageset à la fin du programme : (setvar "osmode" oldosmode); je reviens à l'état initial amicalement (vl-load-com) (setq oldosmode (getvar "osmode")) (setvar "osmode" 0) (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (vla-get-ModelSpace AcDoc) base (vlax-ename->vla-object (car (entsel "\nRéseau de base : "))) pdep (vlax-curve-getstartpoint base) pfin (vlax-curve-getendpoint base) dir (angle pdep pfin) Lbase (distance pdep pfin) Deport (getdist (list (/ (+ (car pdep) (car pfin)) 2) (/ (+ (cadr pdep) (cadr pfin)) 2) ) "\nDeport de l'alignement : ") ecartement (getdist "\necartement : ") PK ecartement ) (setq listepol (list pdep)) (while (< PK Lbase) (setq PM (vlax-curve-getParamAtDist base PK)) (setq PT (vlax-curve-getPointAtDist base PK)) (setq PTG (Polar PT (+ dir (/ pi 2)) Deport)) (setq tempo1 (polar pt (- dir pi) (* Deport 0.1))) (setq listepol (append (list tempo1) listepol)) (setq listepol (append (list ptg) listepol)) (setq tempo2 (polar pt dir (* Deport 0.1))) (setq listepol (append (list tempo2) listepol)) (command "_insert" "candelabre1" ptg "" "" "") (setq PK (+ PK ecartement)) ) (setq listepol2 (apply 'append listepol)) (setq tmp (vlax-make-safearray vlax-vbDouble (cons 0 (- (length listepol2) 1)))) (vlax-safearray-fill tmp listepol2) (setq mapol(vla-addPolyline space tmp)) (vla-put-Color mapol"10") (setvar "osmode" oldosmode) (princ) Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 20 août 2013 Auteur Posté(e) le 20 août 2013 Merci Didier pour ta routine, j'ai compris ton code jusqu'à l'endroit ci-dessous où je fut largué <_< (setq listepol2 (apply 'append listepol)) (setq tmp (vlax-make-safearray vlax-vbDouble (cons 0 (- (length listepol2) 1)))) (vlax-safearray-fill tmp listepol2) (setq mapol(vla-addPolyline space tmp)) (vla-put-Color mapol"10") (setvar "osmode" oldosmode) (princ) Pour l'orientation des blocs par contre, je ne comprends pas car même avec ton code l'orientation se fait mal, j'ai tenté de prendre d'autres blocs et de changer de pc, rien... Je me posais une question aussi que veut dire calcul du paramètre? A quel moment par contre la polyligne est tracée dans le code je ne le vois pas ? C'est quasi ce que j'aimerai faire de mon programme ( je te joins mon schéma comme d'habitude :) ) Merci beaucoup Didier
didier Posté(e) le 22 août 2013 Posté(e) le 22 août 2013 Coucou A quel moment par contre la polyligne est tracée dans le code je ne le vois pas ? c'est là :(setq mapol(vla-addPolyline space tmp)) amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 25 août 2013 Auteur Posté(e) le 25 août 2013 Merci beaucoup Didier ! Merci pour ton aide !! Amicalement
mateus Posté(e) le 28 août 2013 Auteur Posté(e) le 28 août 2013 Bonjour à tous, j'ai un soucis sur une erreur et je n'arrive pas à me déboguer. l'erreur est la suivante : ; erreur: type d'argument incorrect: point 2D/3D: <Nom d'entité: 7ffff710d60> et le déboguage s'arrête sur cette ligne : (setq pt3 (polar n (+ rot (/ pi 2)) decalageCande)) Je joins le lisp complet Merci par avancecourbe_test.lsp
didier Posté(e) le 1 septembre 2013 Posté(e) le 1 septembre 2013 coucou je ne sais pas de quoi tu parles dans ton dernier message, tu es toujours aussi brouillon dans tes questions !!! je viens te filer une combine à deux balles pour faire tes raccords de polylignes c'est pas du grand art mais ça fonctionneil suffit de coller çà à la fin de ton programme(setvar "filletrad" 1.2) (command "_fillet" "p" "_l") filletrad est la variable qui gère le rayon des raccords circulaireset ensuite je lance la commande raccord,je réponds P comme polyligne,je réponds _l (comme last ou dernier) la polyligne à raccorder est la dernière entité créée au moment de l'appel de la commandeet c'est tout ...à ta guise de mettre un rayon différent, pas trop petit sinon les sommets sous les candélabres vont se voir traités, avec une taille de rayon de l'ordre du mètre ils sont trop pointus pour être raccordés. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 1 septembre 2013 Posté(e) le 1 septembre 2013 Salut, Comprendre les messages d'erreur LISP n'est pas bien difficile et est souvent suffisant pour comprendre l'erreur. ; erreur: type d'argument incorrect: point 2D/3D: Signifie simplement qu'une fonction requiert un "point 2D/3D" comme argument et que c'est un nom d'entité (ENAME) qui lui a été passé, d'où le "type d'argument incorrect". et le déboguage s'arrête sur cette ligne : (setq pt3 (polar n (+ rot (/ pi 2)) decalageCande))On peut donc raisonnablement penser que l'erreur survient lors de l'appel à la fonction polar qui requiert un "point 2D/3D" comme premier argument et que c'est un nom d'entité et pas un "point 2D/3D" (liste de 2 ou 3 nombres) qui est affecté à la variable n. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 1 septembre 2013 Posté(e) le 1 septembre 2013 coucou oui, ça je l'avais vu mais un peu après avoir répondu, quand je parler de "brouillon" c'est du style voilà l'erreur : je fais comment ? pour avoir un peu suivi le sujet je ne comprends toujours pas toutes ces demandes de variables ni cette façon d'opérerj'ai chargé le lisp et ne vois pas le but de toutes ces manipulations mais je ne suis pas un expert dans la compréhension de l'écriture des autresj'ai du mal à me gérer quelquefois pour être franc alors chez les autres ...pourquoi y-a t-il des ename dans cette liste alors qu'elle se nomme listepts ? c'est à çà que doit répondre mogo... je reprends mon crion ne me retirera pas de l'idée que si c'est un devoir d'école c'est la pure bêtise d'un "sachant" qui a mis çà au programmeapprendre (ou commencer) le lisp alors que les pré-requis du dessin ne sont pas acquis c'est que j'appelle les gens qui mettent des croix dans des cases, çà c'est fait, cà c'est fait etc..et ensuite ceux qui ont ces diplômes se ramassent des pelles dès le premier jour de travailje me calme amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 2 septembre 2013 Auteur Posté(e) le 2 septembre 2013 Bonjour à vous ! Tout d'abord merci Didier et Gile pour vos explications. (Gile j'ai maintenant compris mon erreur, c'est vrai qu'en sachant que polar attend un point, étant donné que ma variable n vaut un "ename", l'erreur survient.) Merci Je vais essayer de bien me faire comprendre et d'expliquer ce que je souhaite faire pour finir le programme.Pour commencer, j'ai décalé la polyline du trottoir pour obtenir la polyline réseau, ensuite j'ai décalé la poly réseau pour obtenir celle des candélabres. J'ai placé mes 3 points qui permettent de relier le réseau principal aux candélabres. (image ci-jointe "POINTS ANTENNES") en utilisant les fonctions "vla". Maintenant ce qu'il me reste à faire c'est d'ajuster dans un premier temps mes antennes au réseau principal (image ci-jointe: "ajustement" --> ajuster le bout de polyligne jaune avec les antennes en rouge afin d'obtenir le résultat escompté en image ci-jointe "explications ajustements-raccords") Puis terminer par raccorder en rayon (image ci-jointe "raccord-rayon") PT2 et PT3 (les points qui lies les antennes au réseau ) au réseau principal Pour l'ajustement j'ai essayé de procéder avec un ajustement "trajet", en définissant pour chaque piquage deux points intermédiaires qui me permettront de suivre un trajet et donc de réaliser les ajustements. J'ai utilisé la commande "point" que vous pouvez voir dans le programme joint en guise de test (pour voir si les points étaient placés aux bons endroits). Je me suis rendu compte que non (image ci-jointe : "explications ajustement" : le polygone en couleur jaune montre bien que les deux points "ptIntermediaire" "ptTrottoir" (noms des variables dans le programme)que j'ai voulu insérer ne sont pas à la position souhaitée, quant au polygone vert, il montre les points aux endroits où j'aimerai vraiment qu'ils soient pour réaliser la commande "ajuster" "trajet". Voila j'espère être plus clair dans ma démarche. j'aimerai vraiment finir ce bout de programme (je profite de mes deux semaines de vacances pour bosser là dessus avant de devoir rendre le projet mais quand je vois que je coince pour des trucs pareils, je me demande comment je fais pour continuer et persévérer tellement ça me démotive) Merci de votre aide. AmicalementECL2.lsp
didier Posté(e) le 2 septembre 2013 Posté(e) le 2 septembre 2013 Coucou si tu fais la polyligne de réseau comme je te l'ai indiqué tu pourras utiliser la combine de mon dernier message pour faire les raccords.si tu fais autrement... je manque de temps en dehors du week-end pour t'aider. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
mateus Posté(e) le 2 septembre 2013 Auteur Posté(e) le 2 septembre 2013 Merci Didier pour ta réponse mais c'est juste que je ne comprends pas comment tu veux faire pour faire un raccord rayon si t'as pas encore ajuster. Ci joint la photo qui montre la poly réseau et les piquages. peux tu m'expliquer comment faire fonctionner la commande "_fillet" et à quel endroit dois je la placer parce que j'ai même essayé dans la barre de commande j'ai pas réussi AmicalementECL2.lsp
-Olivier- Posté(e) le 2 septembre 2013 Posté(e) le 2 septembre 2013 Bonjour Mogo,comment tu veux faire pour faire un raccord rayon si t'as pas encore ajusterTeste manuellement la commande et tu te rendras compte qu'il est parfaitement inutile d'ajuster tes polylignes avant de faire le raccord.Olivier
mateus Posté(e) le 2 septembre 2013 Auteur Posté(e) le 2 septembre 2013 je l'ai essayé manuellement ça ne fonctionne pas
mateus Posté(e) le 2 septembre 2013 Auteur Posté(e) le 2 septembre 2013 J'ai essayé d'utiliser la commande "_Fillet" pour raccorder en rayon la poly en rouge avec les piquages en couleur cyan sans faire d'ajustement je n'arrive pas.
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