Aller au contenu

Surfaces de hachures


Lespounse

Messages recommandés

Bonjour,

 

J'utilise actuellement un lisp pour afficher les surfaces des polylignes de mes dessins et j'aimerais le faire fonctionner sur des hachures ... si quelqu'un peut m'aider ?

 

voici la bête (c'est un lisp que j'ai récupèré sur ce site et que j'ai légèrement modifié):

 

 

;; Texte centré sur le centre de gravité et ligne de rappel jusqu'au premier sommet
;; Champs dynamiques
(defun c:surprise (/ ad sp ts lp pl sl dl pa sa da ht ip tx)
 (vl-load-com)
 (setq	ad (vla-get-ActiveDocument (vlax-get-acad-object))
sp (if (= (getvar "CVPORT") 1)
     (vla-get-PaperSpace ad)
     (vla-get-ModelSpace ad)
   )
ts (getvar "TEXTSIZE")
lp (getvar "LUPREC")
sa (getstring T
	      "\nPrécisez le type de surface ou < Aucun >: "
   )
da (getint
     (strcat "\nEntrez le nombre de décimales pour les surfaces <"
	     (itoa lp)
	     ">: "
     )
   )
 )
 (if (setq ht
     (getdist
       (strcat "\nSpécifiez la hauteur de texte <" (rtos ts) ">: ")
     )
     )
   (setvar "TEXTSIZE" ht)
   (setq ht ts)
 )
 (foreach d '(dl da) (or (eval d) (set d lp)))
 (vla-StartUndoMark ad)
 (if (ssget '((0 . "LWPOLYLINE")))
   (vlax-for o	(vla-get-ActiveSelectionSet ad)
     (setq rg (vlax-invoke sp 'addRegion (list o))
    ip (trans (vlax-get (car rg) 'Centroid) 1 0)
    id (itoa (vla-get-ObjectID o))
     )
     (vla-addLine
sp
(vlax-3d-point ip)
(vlax-3d-point (vlax-curve-getStartPoint o))
     )
     (setq tx (vla-addMText
	 sp
	 (vlax-3d-point '(0 0 0))
	 ht
	 (strcat
	   "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
	   id
	   ">%).Area \\f \"%lu2%pr"
	   (itoa da)
	   (if (= pa sa "")
	     ""
	     (strcat "%ps[ \  , \m² \n " sa "]")
	   )
	   "\">%"
	 )
       )
     )
     (vla-put-Width tx 0.0)
     (vla-put-BackgroundFill tx :vlax-true)
     (vla-put-AttachmentPoint tx acAttachmentPointMiddleCenter)
     (vla-Move tx (vla-get-InsertionPoint tx) (vlax-3d-point ip))
     (mapcar 'vla-delete rg)
   )
 )
 (vla-EndUndoMark ad)
 (princ)
)

 

[Édité par (gile) : formatage et ajout des balises bbcodes]

Lien vers le commentaire
Partager sur d’autres sites

Super, tu as fait vite !

 

j'ai essayé ton lisp et il m'affiche le nombre de surfaces sélectionnées et l'aire cumulée.

en fait le but n'est pas de calculer mais de faire apparaitre la surface de chaque hachure, à la manière du lisp de mon premier message qui fonctionne trés bien, mais seulement pour les polylignes.

 

 

 

[Edité le 11/6/2009 par Lespounse]

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Le LISP ci dessus place le texte (champ) sur le centre de gravité de chaque polyligne.

Or obtenir le centre de gravité d'une hachure est plus complexe.

J'ai fait une cote mal taillé en mettant le texte sur le centre de l'emprise (BoundigBox) de la hachure.

 

(defun c:surprise (/ ad sp ts lp pl sl dl pa sa da ht ip tx ss)
 (vl-load-com)
 (setq	ad (vla-get-ActiveDocument (vlax-get-acad-object))
sp (if (= (getvar "CVPORT") 1)
     (vla-get-PaperSpace ad)
     (vla-get-ModelSpace ad)
   )
ts (getvar "TEXTSIZE")
lp (getvar "LUPREC")
sa (getstring T
	      "\nPrécisez le type de surface ou : "
   )
da (getint
     (strcat "\nEntrez le nombre de décimales pour les surfaces 		     (itoa lp)
	     ">: "
     )
   )
 )
 (if (setq ht
     (getdist
       (strcat "\nSpécifiez la hauteur de texte : ")
     )
     )
   (setvar "TEXTSIZE" ht)
   (setq ht ts)
 )
 (foreach d '(dl da) (or (eval d) (set d lp)))
 (vla-StartUndoMark ad)
 (if (ssget '((0 . "HATCH")))
   (progn
   (vlax-for o	(setq ss (vla-get-ActiveSelectionSet ad))
     (setq id (itoa (vla-get-ObjectID o)))
     (vla-getBoundingBox o 'll 'ur)
     (setq ip (mapcar
	 (function (lambda (x1 x2) (/ (+ x1 x2) 2)))
	 (vlax-safearray->list ll)
	 (vlax-safearray->list ur)
       )
     )
     (setq tx (vla-addMText
	 sp
	 (vlax-3d-point '(0 0 0))
	 ht
	 (strcat
	   "%		   id
	   ">%).Area \\f \"%lu2%pr"
	   (itoa da)
	   (if (= pa sa "")
	     ""
	     (strcat "%ps[" sa" \n, m²]")
	   )
	   "\">%"
	 )
       )
     )
     (vla-put-Width tx 0.0)
     (vla-put-BackgroundFill tx :vlax-true)
     (vla-put-AttachmentPoint tx acAttachmentPointMiddleCenter)
     (vla-Move tx (vla-get-InsertionPoint tx) (vlax-3d-point ip))
     (mapcar 'vla-delete rg)
   )
   (vla-delete ss)
   )
 )
 (vla-EndUndoMark ad)
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

C'est presque ça !

serait il possible d'associer une ligne à chaque textmult qui relierait par exemple le centre de la hachure au centre du texte ?

et histoire de chipoter, ce serait possible de faire passer le type de surface avant la valeur ?

là, ce serait vraiment génial !

et merci encore Gile !

Lien vers le commentaire
Partager sur d’autres sites

serait il possible d'associer une ligne à chaque textmult qui relierait par exemple le centre de la hachure au centre du texte ?

 

J'ai dit ci-dessus qu'il n'était difficile de déterminer le centre d'une hachure (il faut reconstituer le ou les contours) et que le texte est placé au centre de la "bounding box" de la hachure.

 

ce serait possible de faire passer le type de surface avant la valeur ?

Le code ci-dessus est modifié.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

alors pour finir j'aurai besoin d'un lisp qui me permettrait d'associer une ligne (disons d'une longueur définissable lors de l'exécution du lisp) au point d'insertion d'une multitude de textmult qui auraient été sélectionnés au préalable (ou lors de l'exécution du lisp).

 

Le but est en fait d'associer une ligne à des centaines de textmult d'un coup !

 

merci à l'importance que tu accorde à mon problème ...

 

Lien vers le commentaire
Partager sur d’autres sites

j'ai dit ou fait quelque chose qu'il ne fallait pas ?

qu'est-ce qu'il y a à modérer ?

 

et puis le lisp que j'ai proposé au départ liait déjà une ligne à un textmult alors je pensais qu'une simple petite épuration de celui-ci suffirait (quand à m'y mettre je promet que je suis en train de faire le nécessaire mais ça reste quand même compliqué pour quelqu'un qui a découvert le lisp il y a peu !)

 

je continue en tout cas à espérer que quelqu'un pourra m'aider ...

 

:exclam:

Lien vers le commentaire
Partager sur d’autres sites

dis donc, toi qui semble être relativement gradé (avec ta super ceinture rouge)

tu ne pourrai pas m'éclairer des fois ? ;)

 

Un jour j'avais même doublé Patrick quand il était encore webmaster. Mon secret ?

Je bavarde. blabla bla.

Mais je préfère que les gens apprennent. Bien sûr je suis capable, en principe, mais je suis assez lent et je n'ai de temps que pour de tout petit bouts de code et du clavardage. J'ai quand même du monde devant mon écran en permanence.

 

Je suis ceinture rouge en dessin et technique ! Là je fais l'effort de comprendre les demandes.

En lisp, je regarde, je corrige, j'aide mais je n'aime pas quand je ne comprends pas vraiment la demande dans l'instant. En gros, j'aide pour des demandes pures de programmeur débutants.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Je suis ceinture rouge en dessin et technique ! Là je fais l'effort de comprendre les demandes.

En lisp, je regarde, je corrige, j'aide mais je n'aime pas quand je ne comprends pas vraiment la demande dans l'instant. En gros, j'aide pour des demandes pures de programmeur débutants.

 

pour ce qui est du programmeur débutant, je suis ton homme !

je n'ai jamais créé de lisp mais j'essaye d'en bidouiller ...

Sais tu a qui je peux poser ma dernière question pour accrocher une ligne à des textmult sélectionnés ?

j'en ai vraiment besoin et ça fait des heures que je bricole sans arriver à rien !

merci

 

Lien vers le commentaire
Partager sur d’autres sites

J'ai regardé plus en avant ce que faisais le code.

Je l'ai adapté car la boucle ne fonctionne pas chez moi, je ne sais pas pourquoi.

 

Mais ton souhait, je ne le comprends pas. Voilà !

 

Peut-être un image...... ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
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é