Aller au contenu

Centre de gravité


Messages recommandés

Posté(e)

Bonjour,

Je suis un utilisateur débutant en lisp sur autocad et je me fabrique des petites fonctions. J'ai créé un lisp qui sélectionne un ensemble de polylignes calcule leur surface et implante le texte de l'aire sur le premier point de chaque polyligne. J'aimerai bien trouver un moyen de faire en sorte que le texte se place au centre de chaque polyligne. J'ai bien tenté d'utiliser la variable centroid, mais je crois que je l'utilise très très mal:

(setq pt1 (getvar "Centroid"))

 

Voilà le code en question où le texte se place sur le premier point de la polyligne

;Pseudo code

;choisir une région - renvoyer centre - mettre un point au centre

(defun c:textaire ( )

(setq jsel (ssget))

(if(= jsel nil)

(exit)

)

(setq ctr 0)

(setq nb(sslength jsel))

(while(< ctr nb)

(setq obo(ssname jsel ctr))

(setq ctr(+ 1 ctr))

(setq pt1(cdr (assoc 10 (entget obo))))

(command "aire" "objet" obo)

(setq surf(getvar "area"))

(setq surf (/ surf 10000))

(setq surftxt(strcat(rtos surf 2 2)" m²"))

(command "texte" pt1 "8" "0"surftxt)

);fin du while

(princ))

;fin du defun

 

J'espère que quelqu'un pourra m'aider.

Merci d'avance!

Je déteste modiflistechelle dans la version AutoCAD 2008 ! Mais bon, avec 4 Go de ram et un quadcore ça passe...

Posté(e)

Je n'ai pas trop le temps de préciser, mais ce que je peux te dire, c'est que le centroïd se récupère uniquement sur un objet "région" (me semble-t'il).

 

Donc :

1er étape > créer une région à partir de ta polyligne

2ème > récupérer le centroïde

3ème > supprimer la région

 

Les "Lispeurs fous" du forums t'en diront certainement plus...

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Salut,

 

CENTROID n'est pas une variable système dont on peut récupérer la valeur avec (getvar), mais une propriété des objets SOLID et REGION.

 

Pour récupérer la valeur de CENTROID il faut passer par les fonctions VLISP :

 

(vlax-safearray->list (vlax-variant-value (vla-get-centroid (vlax-ename->vla-object (car (entsel)))))) 

Cette ligne de code retourne les coordonnées du centre de gravité de l'objet sélectionné (à condition que ce soit un solide ou une région).

 

À ce propos, ce sujet et celui là qui contient un LISP qui place un point sur le centre de gravité d'une structure composée de plusieurs régions ou solides de densité différentes.

 

Les "Lispeurs fous" du forums t'en diront certainement plus...

 

J'ai été "adoubé" Lispeur par Bonuscad le Grand il y a peu, ;)

mais je suis fou depuis bien plus longtemps.:mad2:

 

[Edité le 16/11/2005 par (gile)]

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

Posté(e)

Bonjour,

D'abord, merci de porter un intérêt à ma requette, j'ai essayé d'intégrer ce morceau de code au programme, mais Autocad me répond dans sa langue: "erreur: no function definition: VLAX-ENAME->VLA-OBJECT", comme j'ignorais jusqu'à aujourd'hui l'exisntence des Vla-object, je manipule tout ça à l'aveugle, j'aimerai bien quelques éclaircissements. sur ce problème...

Merci d'avance!

François :casstet:

Je déteste modiflistechelle dans la version AutoCAD 2008 ! Mais bon, avec 4 Go de ram et un quadcore ça passe...

Posté(e)

Salut,

 

Normalement çà ne devrait plus être nécessaire pour les versions antérieures à 2002, mais peut-être faut il que tu fasse (vl-load-com) au tout début ou avant ton programme. Cette fonction charge les fonctions VLISP.

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

Posté(e)

D'abord merci de te donner autant de mal pour mon misérable programme, j'ai bien parcouru les liens que tu m'as indiqué et j'ai repéré cette fonction à charger (vl-load-com) car j'utilise 2002, mais curieusement, ça n'a rien changé, alors je crois que je vais devoir me mettre au script...même si pour l'instant je n'y comprends rien de rien ... Snif.

Merci quand même!

Fransois

Je déteste modiflistechelle dans la version AutoCAD 2008 ! Mais bon, avec 4 Go de ram et un quadcore ça passe...

Posté(e)

Salut,

 

Une discussion ou j'ai donné une réponse pour une solution simple avec des polylignes.

Bien que cette solution soit exacte que pour des polylignes SANS arrondis, elle peut

suffire pour placer un texte "a peu près" au centre (même en cas d'arrondi)

 

Enfin à voir, l'avantage est que cela n'utilise pas les fonction activeX (vl-load-com) et que tu n'auras pas besoin de conversion en région.

 

Alternative en macro Diesel:

^C^C_.undo;_begin;_.id;\_.-boundary;_none;@;;_.area;_object;_last;_.erase;_last;;_.-text;_justify;_bcenter;_none;@;;;$M=Surface=$(getvar,area);_.move;_last;;_none;@;\_.undo;_end;^Z

 

[Edité le 18/11/2005 par bonuscad]

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

Posté(e)

Juste une question

 

Si l'on fait la moyenne des X et la moyenne des Y des sommets des polyligne, on n' a pas un point qui se trouve a peu pres au centre ?

 

@+

 

MDSV31

Dessinateur Indépendant

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é