Aller au contenu

Hachure et epaisseur de polyligne dans polyligne multipoints


iowa13

Messages recommandés

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)

 

Lien vers le commentaire
Partager sur d’autres sites

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.

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.0c

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
image.png.4f6c731471f2da79ac52b42db395f1d9.png

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

Lien vers le commentaire
Partager sur d’autres sites

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.

image002.jpg

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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..

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é