iowa13 Posté(e) le 26 mars Posté(e) le 26 mars Je voudrais savoir s'il est possible de définir dans le lisp un épaisseur de polyligne. Le but: Faire le contour de mon mur avec une polyligne ep 1 et le remplir avec les hachures. Je dupliquerai le lisp en y modifiant l'epaisseur et le type de hachure pour différente création 1 lisp pour du béton mur ep1; 1 lisp pour de l'isolant ep0 ....... Il y a surement d'autres méthodes, mais ne connaissant rien, j'essaie d'adapter des programmes trouvés par ci par la..... Merci de votre aide ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; https://www.cadtutor.net/forum/topic/77129-polyline-and-hatching-with-autolisp/ ;; User makes a polyline by selecting points. The polyline is auto closed, a hatch is drawn inside ;; Make Polyline Hatch (defun c:mph ( / ss sc pp pt pts ln ls pline) (setq sc (getreal "\nScale: ")) (if (= 0.0 sc) (setq sc 1.0) ) (prompt "\nSelect points to make a Closed Polyline. Press enter to close the polyline: ") (setq pts (list)) (setq ls (list)) (setq pt (getpoint "\nPoint 1: ")) (setq pp pt) (setq pts (append pts (list pt))) (while (setq pt (getpoint pt "\nPoint: ")) ;; draw temporary line (setq ls (append ls (list (drawLine pp pt)))) (setq pp pt) (setq pts (append pts (list pt))) ) (setq pline (drawLWPoly pts 1)) ;; delete temporary lines (foreach ln ls (entdel ln) ) (hatch_closed_polyline (ssadd pline) sc) ) ;; https://www.cadtutor.net/forum/topic/18257-entmake-functions/ (defun drawLine (p1 p2) (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))) ) (defun drawLWPoly (lst cls) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls)) (mapcar (function (lambda (p) (cons 10 p))) lst))) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; user selects existing polylines; a hatch will be drawn inside ;; Select Polyline Hatch (defun c:sph ( / ss sc) (setq sc (getreal "\nScale: ")) (prompt "\nSelect Closed Polylines to Hatch: ") (while (setq ss (ssget '((0 . "LWPOLYLINE")))) (hatch_closed_polyline ss sc) ;;(entmakex-hatch hList 0.0 "ANSI31" 1.0) ) ) ;; slightly modified from this code: ;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/entmake-hatch-with-base-point-or-object-polyline-entity-name/m-p/8703197#M383362 (defun hatch_closed_polyline (ss sc / cnt e hList) (if (= 0.0 sc) (setq sc 1.0) ) (setq cnt (sslength ss)) (while (<= 0 (setq cnt (1- cnt))) (setq e (ssname ss cnt)) (if (setq tmp (CreateHatchList e)) (setq hList (cons tmp hList)) );if );while (setq hList (reverse hList)) (if (entmakex-hatch hList 0.0 "ANSI31" sc) (prompt "\nSuccess!") (prompt "\n...Failure.") );if (princ) );defun (defun CreateHatchList (e / i j pList found) (foreach i (entget e) (if (= 10 (car i)) (progn (setq pList (cons i pList)) (setq found nil j (member i (entget e))) (while (and (not found) (< 0 (length j))) (if (= 42 (car (car j))) (setq pList (cons (car j) pList) found t) );if (setq j (cdr j)) );while );progn );if );foreach (reverse pList) );defun ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun entmakex-hatch (l a n s) ;; By ElpanovEvgeniy ;; L - list point ;; A - angle hatch ;; N - name pattern ;; S - scale ;; return - hatch ename (entmakex (apply 'append (list (list '(0 . "HATCH") '(100 . "AcDbEntity") '(410 . "Model") '(100 . "AcDbHatch") '(10 0.0 0.0 0.0) '(210 0.0 0.0 1.0) (cons 2 n) (if (= n "SOLID") '(70 . 1) '(70 . 0) ) ;_ if '(71 . 0) (cons 91 (length l)) ) ;_ list (apply 'append (mapcar '(lambda (a) (apply 'append (list (list '(92 . 7) '(72 . 1) '(73 . 1) (cons 93 (/ (length a) 2))) (mapcar '(lambda (b) b) a) '((97 . 0)) ) ;_ list ) ;_ apply ) ;_ lambda l ) ;_ mapcar ) ;_ apply (list '(75 . 0) '(76 . 1) (cons 52 a) (cons 41 s) '(77 . 0) '(78 . 1) (cons 53 a) '(43 . 0.) '(44 . 0.) '(45 . 1.) '(46 . 1.) '(79 . 0) '(47 . 1.) '(98 . 2) '(10 0. 0. 0.0) '(10 0. 0. 0.0) '(451 . 0) '(460 . 0.0) '(461 . 0.0) '(452 . 1) '(462 . 1.0) '(453 . 2) '(463 . 0.0) '(463 . 1.0) '(470 . "ANSI31") ) ;_ list ) ;_ list ) ;_ apply ) ;_ entmakex ) ;_ defun (princ "\nCOMMAND MPH: Make Polyline Hatch.") (princ "\nCOMMAND SPH: Select Polyline Hatch.") (princ)
didier Posté(e) le 26 mars Posté(e) le 26 mars Bonjour @iowa13 Mais ne connaissant rien, j'essaie d'adapter des programmes trouvés par-ci par-là. Mon discours est connu, mais je ne peux m'empêcher de le répéter quand je lis ce genre de prose. C'est une des pires "fausse bonne idée" que de faire ainsi. Aujourd'hui, il est facile de se former, et la formation commence par des fonctions simples, par la compréhension du langage choisi, petit à petit, on va grandir, complexifier pour finalement devenir autonome. Allez, on attaque une formation... Je fais partie des gens qui ont galéré pour apprendre, l'internet étant moins présent, nous devions apprendre par tâtonnements et empirisme. Beaucoup de frustrations, mais aussi beaucoup de fierté aux premières réussites. J'ai dans l'idée de faire des formations, mais elles ne sont pas encore finalisées, toutefois en attendant ce jour, je me mets à disposition des gens qui veulent apprendre. Si tant est qu'ils aient réellement*** envie d'apprendre. Amicalement ***se préparer aux efforts. Éternel débutant... Mon site perso : Programmer dans AutoCAD
iowa13 Posté(e) le 26 mars Auteur Posté(e) le 26 mars Je veux bien me former, mais il faudrait des tutos pour les nuls à l'esprit basic Ou un site pour expliquer en détail chaque commande. Exemple, que veut dire . .setq pts (list (setq ls (append ls (list (drawLine pp pt entmakex qu'est ce donc...? bref toute les commandes. certaines commandes sont peut etre simple, mais il faut savoir les imbriquer.... Je suis sur que la demande n'est pas compliqué 3pts ou plus a fermer et hachurer l'intérieur, mais il faut trouver le point de départ de la relexion et de la mise en place. Il faut surtout de la méthode je pense
Turtle76 Posté(e) le 26 mars Posté(e) le 26 mars il y a 56 minutes, iowa13 a dit : Je veux bien me former, mais il faudrait des tutos pour les nuls à l'esprit basic Ou un site pour expliquer en détail chaque commande. heuuuu ... regarde dans la signature de Didier ... Sinon je te donne un indice ici : https://www.da-code.fr/ ----------------------------------------------------------------------------------------------------------------------------------- Autocad Map 2024 - Covadis v18.2
iowa13 Posté(e) le 26 mars Auteur Posté(e) le 26 mars j'ai déjà jeter un œil, mais je ne dois pas avoir la bonne approche de réflexion. Je vais me débrouiller merci quand meme
Luna Posté(e) le 26 mars Posté(e) le 26 mars Coucou @iowa13, La programmation n'a rien de magique, pour apprendre il faut comprendre et pour comprendre il faut de la rigueur et de la curiosité. Trouver des personnes pour t'aider à te former n'est pas si difficile, en revanche cela demande du temps et de la persévérance. Comme le dit @didier à partir du moment où les personnes sont réellement motivées pour se former, tout est possible ! il y a 50 minutes, iowa13 a dit : Exemple, que veut dire . .setq pts (list -> Aucune idée ! Car je n'ai jamais vu de .setq je ne parviens même pas à voir où tu as pu voir chat... Puisque tu es désireux d'apprendre, je ne vais pas te proposer de lignes de code ou de programmes tout fait tout beau. En revanche je vais t'aiguiller vers des fonctions dont tu auras besoin pour parvenir à tes fins ou avancer vers une solution : • (command), permet d'appeler une commande AutoCAD. Exemple : (command "_POLYLIGN") Il suffit ensuite de suivre les instructions requise par la commande pour la faire fonctionner. Tant qu'une commande n'a pas atteint sa finalité, elle sera toujours active. Un "" permet de simuler un ESPACE/ENTER • (while), permet de créer une boucle tant que la condition en argument est vrai • (getpoint), permet de demander à l'utilisateur de renseigner un point (3D) • (entlast), permet de récupérer le nom d'entité de la dernière entité crée • "_-HATCH", le nom de la commande "HACHURE" sans ouvrir la boîte de dialogue. Cette fonctionnalité est issue du "-" devant le nom de la commande, le "_" signifie que l'on utilise un nom (commande ou option) international (cela permet que le programme fonctionne aussi bien sur un AutoCAD dont la langue est définie sur Français, Anglais, Allemand, etc...) Pour répondre à ton problème, il existe de trèèèèès nombreuses solutions, plus ou moins complexe. Donc en voulant recopier des programmes à droite à gauche, forcément tu utilises des programmes beaucoup trop complexes ! Très honnêtement, même une simple macro permet de répondre à ton besoin... Bref, bon courage pour nous sortir un programme écrit par ta main, sans recopier le code de qui que se soit. Même si chat paraît difficile au début, tu ne pourras qu'être fier une fois que tu auras développer ton premier code par toi-même 🙂 Bisous, Luna
iowa13 Posté(e) le 26 mars Auteur Posté(e) le 26 mars il y a 5 minutes, Luna a dit : .setq Surement une erreur de frappe de ma part. Pour le principe, j'imagine bien que la demande n'est pas compliqué et peut etre faite simplement. A moi de comprendre les boucles, les conditions, les récuperations d'entités.. une entité.?? J'ai du boulot. PS: si un admin veut bien supprimer ce sujet qui au final ne sert a rien... Merci pour les infos
didier Posté(e) le 26 mars Posté(e) le 26 mars Bonjour @iowa13 Surement une erreur de frappe de ma part. Ce genre de phrase qui semble anodine est dramatique en programmation et ne dois JAMAIS servir d'excuses, on vérifie... Je ne suis pas tout à fait d'accord avec @Luna au sujet de la progression. À mes yeux, il faut comprendre comment on applique des fonctions simples et dans ma formation, je commence par l'arithmétique pour enchaîner rapidement sur la compréhension des listes (bases du langage) et seulement une fois que ces bases sont assimilées, on passe à (command) pour commencer à dessiner. Si ces bases ne sont acquises, on va vite se planter et de dégoûter, il y a qu'à voir le genre de question qu'on trouve ici, neuf fois sur dix l'auteur de la question manque de bases, de fondations. Au fait, pourquoi le sujet est marqué "à supprimer" ? Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
iowa13 Posté(e) le 26 mars Auteur Posté(e) le 26 mars Pour l'erreur de frappe, j'ai fait un copier coller et modifier le texte avant d'ou le . qui ne doit pas etre la et je n'avais pas pris tout le code.... bref 1) Pour le "A supprimer", il n'y a pas réellement de réponse à la question, sauf "c'est très simple, forme toi" 2) je ne veux pas polluer le forum avec des sujet qui ne seront pas résolu.
didier Posté(e) le 26 mars Posté(e) le 26 mars Bonjour @iowa13 Ben oui, la réponse est la formation, voici une citation dont l'auteur n'est pas certain, mais qui est particulièrement explicite : Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours. Revenons à la question initiale, si on applique 1 comme épaisseur à la polyligne, faut-il la décaler de 0.5 à l'intérieur du mur ? sinon à l'impression le dessin sera faux. Le mieux serait d'avoir un dessin en exemple avant/après pour qu'on puisse comprendre les besoins réels. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
iowa13 Posté(e) le 26 mars Auteur Posté(e) le 26 mars il y a 11 minutes, didier a dit : si on applique 1 comme épaisseur à la polyligne, faut-il la décaler de 0.5 à l'intérieur du mur Je ne me suis même pas posé cette question. Ce que je cherche a avoir, c'est un contour de mur plus épais et des hachures dans le contour . histoire que le contour du mur ressorte à l'impression... pourquoi dites vous que ce serait faux.? PS: si vous pouviez faire plus de vidéo de ce type, https://www.youtube.com/watch?v=aM-sLlztIjU , personnellement je pense que je comprendrais mieux
didier Posté(e) le 26 mars Posté(e) le 26 mars Bonjour @iowa13 Car une fois le dessin imprimé, si on doit prendre la mesure, on se fixe sur la fin de l'encrage du trait, pas sur l'axe. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 26 mars Posté(e) le 26 mars Bonjour @iowa13 Merci pour le rappel à la vidéo, mais c'est un webinaire, ce n'est pas une formation, c'est pour montrer aux gens ce qui existe et qu'ils ignorent peut-être, pas plus. Quand je parle de mes formations à venir, je parle de vraies formations, avec explications détaillées, exemples appliqués et demande d'exercices à réaliser par les stagiaires. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 26 mars Posté(e) le 26 mars il y a une heure, iowa13 a dit : Ce que je cherche a avoir, c'est un contour de mur plus épais et des hachures dans le contour . histoire que le contour du mur ressorte à l'impression... Alors, je crois que ce que tu cherches en réalité c'est plutôt l'épaisseur de ligne à l'impression Ainsi ta polyligne à une épaisseur qui ne sera visible qu'à l'impression mais le contour de la ligne sera toujours bonne. Car en effet utiliser la propriété "Largeur Globale" d'une polyligne pour un mur, c'est une fausse bonne idée... Car comme le dit @didier, cela prête à confusion et même si en théorie les cotations auront une accroche aux sommets de la polyligne (donc au centre), cela reste une mauvaise pratique à mon avis. Bisous, Luna
didier Posté(e) le 26 mars Posté(e) le 26 mars Bonjour @Luna Je ne vois pas en quoi l'épaisseur rend le tracé moins faux. Je parle de kutch pas de cotation AutoCAD. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
iowa13 Posté(e) le 27 mars Auteur Posté(e) le 27 mars Il y a 15 heures, didier a dit : Bonjour @iowa13 Merci pour le rappel à la vidéo, mais c'est un webinaire, ce n'est pas une formation, c'est pour montrer aux gens ce qui existe et qu'ils ignorent peut-être, pas plus. Quand je parle de mes formations à venir, je parle de vraies formations, avec explications détaillées, exemples appliqués et demande d'exercices à réaliser par les stagiaires. Amicalement En tout cas, c'est très bien expliqué. Si vous avez des formations de ce type, je suis preneur... Pour le trait plus épais, c'est pour ce principe. Il est vrai que lors de cotations, ce serait plus simple que l’épaisseur soit à l'intérieur du cadre, mais on s’éloigne de la demande de base 🙂 Ma méthode de travail n'est peut être pas la bonne.
didier Posté(e) le 27 mars Posté(e) le 27 mars Bonjour @iowa13 Il y a très longtemps (je ne suis plus très jeune) il m'est arrivé de sévir sur des dossiers de plans d'immeubles. Et on dessinait à la main, donc on dessinait au 0.18 le nu fini du mur, puis on repassait au 0.35 mais décalé (au jugé) d'une demi-plume et quand on kutchait, on trouvait la bonne cote. Quand AutoCAD est apparu (1986 pour moi), il nous a fallu trouver une solution, mais elle n'était pas en LSP, tout à la mano. Aujourd'hui, vous relancez la question et je vais voir ce qu'on peut en faire pour vous satisfaire. S'il vous plaît, faites-moi passer un fond de plan pour travailler sur du réel. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 28 mars Posté(e) le 28 mars Le 26/03/2024 à 18:20, didier a dit : Je ne vois pas en quoi l'épaisseur rend le tracé moins faux. Je parle de kutch pas de cotation AutoCAD. Coucou, Je ne dis pas que le tracé est moins faux, disons simplement que lorsque j'ai appris à faire du dessin en bâtiment, les largeurs de plumes à l'impression sont normées et on ne considérait pas la largeur de plume pour tracer l'épaisseur des murs me semble-t-il. Mais chat remonte à quelques années déjà et peut-être que je dis des bêtises ^^ Mais il est évident que si l'on mesure sur un plan papier ou sur AutoCAD, les cotations seront naturellement différentes entre les deux méthodes ce qui n'est pas normal et confus. Bisous, Luna
iowa13 Posté(e) le 2 avril Auteur Posté(e) le 2 avril N'étant pas dans l'horlogerie, je ne suis pas au dixième de millimètre lorsque je kutch...c’était juste pour un aspect visuel. Si cela posait problème, Autodesk aurait arrangé les choses et fait en sorte que lorsqu’on épaissit sa ligne, l’épaisseur aille vers l'intérieur du trait et non à son axe..
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