Aller au contenu

texte dynamique surface pour lot demande aide


Messages recommandés

Posté(e)

Bonjour,

Architecte chez un promoteur immobilier depuis peu, je débute en lisp et je cherche quelques routines pour permettre de gagner du temps quand je travaille sur un lotissement avec plus de 50lots à bâtir. J'ai très légèrement modifié la routine "surface-plancher" que j'ai trouvé ici, mais je n'arrive pas à mes fins, si quelqu'un pouvait m'aider, ce serait top. Le but est de cliquer dans une surface close, que ça génère une polyligne fermée sur le calque "01-EMPRISE LOT" et que ça créé le texte surface (sans décimal) sur le calque "01-EMPRISE LOT SURFACE" de manière à pouvoir geler indépendamment l'un de l'autre. Pourriez-vous m'indiquer la commande à ajouter pour créer le 2nd calque et quelle ligne je dois modifier pour que la surface soit sur le 2nd calque. Malgré plusieurs tests, il n'arrive pas à créer le calque. (j'ai 15ans de pratique sur autocad et je découvre le lisp....merci d'avance).

Sylvain.

(vl-load-com)

(defun c:surflot ( / AcDoc Space nw_style e_last pt_in htx rtx obj ename nw_obj)

	(setq

		AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))

		Space

		(if (= 1 (getvar "CVPORT"))

			(vla-get-PaperSpace AcDoc)

			(vla-get-ModelSpace AcDoc)

		)

	)

	(cond

		((null (tblsearch "LAYER" "01-EMPRISE LOT"))

			(vlax-put (vla-add (vla-get-layers AcDoc) "01-EMPRISE LOT") 'color 0)

		)

	)

	(cond

		((null (tblsearch "STYLE" "Arial"))

			(setq nw_style (vla-add (vla-get-textstyles AcDoc) "Arial"))

			(mapcar

				'(lambda (pr val)

					(vlax-put nw_style pr val)

				)

				(list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag)

				(list "Arial.shx" 0.0 (/ (* 15.0 pi) 180) 1.0 0.0)

			)

		)

	)

	(setq e_last (entlast))

	(while (setq pt_in (getpoint "\nSpécifiez un point intérieur <Entrée pour finir>: "))

		(bpoly pt_in nil '(0 0 1))

		(cond

			((not (eq e_last (entlast)))

				(if (not htx)

					(progn

						(initget 6)

						(setq htx (getdist pt_in (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: ")))

						(if htx (setvar "TEXTSIZE" htx))

						(setq htx (getvar "TEXTSIZE"))

					)

				)

				(if (not rtx)

					(if (not (setq rtx (getorient pt_in "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0))

				)

				(setq

					obj (entlast)

					ename (vlax-ename->vla-object obj)

				)

				(vlax-put ename 'Layer "01-EMPRISE LOT")

				(setq

					nw_obj

					(vla-addMtext Space

						(vlax-3d-point (trans pt_in 1 0))

						0.0

						(strcat

							"%<\\AcObjProp.16.2 Object(%<\\_ObjId "

							(itoa (vla-get-ObjectID ename))

							">%).Area \\f \"%lu2%pr0%ct8[1]%ps[,"

							"m²]\">%"

						)

					)

				)

				(mapcar

					'(lambda (pr val)

						(vlax-put nw_obj pr val)

					)

					(list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation)

					(list 5 (getvar "TEXTSIZE") 5 (trans pt_in 1 0) "Arial" "01-EMPRISE LOT" rtx)

				)

				(setq e_last (entlast))

			)

			(T

				(princ "\nAucun contour trouvé.")

			)

		)

  )

	(prin1)

)

SURFACELOT.lsp

Posté(e)

Merci beaucoup c'est exactement ça du coup en cherchant un peu je suis tombé sur Pline_block.lsp avec une variante où (gile) a donné la possibilité de soit placer le bloc qui indique la surface à l'endroit souhaiter soit faire "enter" et qu'il soit automatiquement centré, serait-il possible d'avoir la même évolution ? j'ai comparé les deux codes mais je n'arrive pas à comprendre.. (cf 

)

Posté(e)

Comme on a déjà cliqué un point pour reconstituer la polyligne fermée, il faut ajouter une option pour demander à utiliser le point cliqué ou le Centroïde.

Dans ce cas, reprendre cette partie du code de Giles qui crée une région à partir de la poly fermée pour en calculer le centroïde.

  (if (not
	(setq
	  ins
	   (getpoint
	     "\nSpécifiez le point d'insertion ou : "
	   )
	)
      )
    (progn
      (if (= (vla-get-closed obj) :vlax-false)
	(progn
	  (vla-put-closed obj :vlax-true)
	  (setq op T)
	)
      )
      (setq reg	(vlax-invoke space 'addRegion (list obj))
	    ins	(vlax-get (car reg) 'Centroid)
      )
      (if op
	(vla-put-closed obj :vlax-false)
      )
      (vla-delete (car reg))
    )
  )

Attention, le centroïde d'une surface en forme de U ne se situe pas forcément à l'intérieur de la polyligne.

 

Olivier

Posté(e)

Merci Olivier mais je débute en Lisp et honnêtement je n'ai aucune idée où coller cela 😕. pour la remarque sur le centroïde je pense que ça ne posera pas de problème je compte utiliser ce lisp sur les plans de parcelle de lotissement où les terrains sont principalement rectangulaire. 

Posté(e)

je vais tester mais pour être clair, j'ai découvert les lisp jeudi dernier donc si tu veux pour moi ces lignes de code ne veulent rien dire, en une semaine j'ai réussi à changer les unités ou le nombres de chiffres après la virgule ou quelque truc basique pour pouvoir utiliser une 20ene de lisp mais c'est loin d'être gagné. bonne soirée

Posté(e)

Quand on débute, modifier un programme, que l'on a pas écrit et que l'on en comprends pas, s'avère quasi impossible ou en tout cas très long et risqué.

Il faut malheureusement passer par un apprentissage des bases d'algorithmiques et de la syntaxe du langage afin d'au moins comprendre ce que fait le programme pour pouvoir isoler chaque portion : demander de cliquer un point ou sélectionner des objets, dessiner un polyligne ou autre, changer les propriétés d'un objet (calque, couleur...)

Le site internet de @didier https://www.da-code.fr est très bien fait, et tu as la bible de gilles : https://apps.autodesk.com/ACD/fr/Detail/Index?id=6145646386361353211&appLang=fr&os=Win32_64

Posté(e)

Merci infiniment pour le temps que tu as passé pour faire cela 🙏 avec les commentaires c'est top et ça me montre bien où débute et où fini une commande! je vais me pencher sur les deux liens que tu m'as transmis.

Posté(e)
Il y a 15 heures, Olivier Eckmann a dit :

Voilà la version modifiée et commentée pour l'apprentissage 🙂

SURFACELOT.lsp 5.23 Ko · 3 téléchargements

Merci et bravo pour tes commentaires où je retrouve bien ma démarche de montage d'un code.

J'aurais pas fait mieux.

C'est malheureusement une démarche que j'effectue que très rarement quand je publie un code.

Encore merci pour ton travail !

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

Posté(e)

Merci @bonuscad,

 

Je rentre rarement autant dans les détails surtout pour un programme aussi court, mais ayant appris tout seul la programmation, j'ai besoin que ce soit clair.

Et je me suis aperçu, quand tu reviens après plusieurs mois (ou années) sur du code que tu as écrit, tu te poses parfois des questions sur un traitement spécifique en te disant, mais pourquoi j'ai fait ça, c'est inutile et finalement, il y avait souvent une bonne raison.

Donc j'ai pris l'habitude de mettre des commentaires dès que je fais un truc qui m'a demandé de sortir des clous ou de traiter d'une manière un peu différente de d'habitude.

Quand j'ai eu l'occasion de bosser avec une équipe de développement, chaque fois que l'on changeait un morceau de code (sur un module commercialisé), on mettait systématiquement en commentaire (pour conserver) la partie modifiée avec la date de modification.

C'est pareil, j'aime bien que mon code (déclaration, opération...) soit bien aligné. Donc je m'arrange pour nommer mes variables avec le même nombre de lettre (quand c'est possible) et j'aligne mes opérations. Ca ne sert à rien, mais c'est plus clair (enfin pour moi) à relire.

 

Après, on est souvent pressé d'avoir un résultat qui fonctionne donc on zappe cette étape.

 

Olivier

  • Upvote 1

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é