CADxp: Ventilation de surfaces - CADxp

Aller au contenu

  • 4 Pages +
  • 1
  • 2
  • 3
  • Dernière »
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Ventilation de surfaces

#1 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 07 février 2019 - 10:44

Bonjour,

Grâce aux différents posts du forum j'ai pu réaliser une bonne partie des fonctions que j'imaginais pour nous faciliter la vie sur autocad.

Je bloque sur une fonction que j'avais imaginé et je ne sais pas si elle est réalisable :

- demander le coefficient
- sélectionner une ou plusieurs polyligne fermée.
- pour chaque polyligne ventiler la surface avec 11.50m² et le coefficient renseigné. Le reste de la surface (arrondi au décimètre) est indiqué à 0.10

Par exemple, si ma première polyligne fait 12.62m² alors j'aurais un bloc :

Citation

11.50 | 0.35
1.1 |0.10


Si la polyligne fait 11.50m² (arrondi) alors seulement la première ligne est renseignée.

Si la polyligne fait 11.40m² alors la surface totale est appliqué au coefficient indiqué :

Citation

11.40 | 0.35


Cela serait-il possible ?

Merci pour votre aide et vos informations.
0

#2 L'utilisateur est hors-ligne   x_all 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3420
  • Inscrit(e) : 27-juin 06
  • Location04190

Posté 07 février 2019 - 15:52

je m’immisce même si je ne suis pas sur de savoir répondre...
autocad sais tout faire quand il s'agit de dessiner ou de calculer (en tout cas avec les lisp) mais il en aucun cas autocad sait ventiler ,sauf quand je demande une hachure par point et que le ventilo de mon PC s'affole.
Donc, si tu veux une réponse, commence par poser une question qui ait un sens intelligible pour un programmateur. Quand tu dis:
pour chaque polyligne ventiler la surface avec 11.50m² et le coefficient renseigné.ça veux dire quoi?
faire souffler le PC ?poser un texte avec écrit "11.50m²" au centre de gravité de la surface fermée?renseigner un attribut de bloc? (quel nom du bloc et des attributs et peut etre un exemple en DWG)
ajouter un bloc ventilateur de 11.50m²Le coef est il fixe sur le dessin? propre à chaque poly?
Le reste de la surface (arrondi au décimètre) est indiqué à 0.10ça veux dire quoi?
déduire arbitrairement une poly dont la surface est égale à la surface totale S - 11.50?Faut il y poser un texte? où? valeur = S-Sv ou =0.10 ou (S-Sv)/10 ?

En relisant les réponses type que tu proposes je comprend encore moinssi S=12.62 d’où sort le 0.35? (12.62-11.5 = 1.12)
Bref, éclairci un peu le post car en l'état je doit pas être le seul à pas comprendre le Quoi avant de chercher le Comment

"La possibilité d'expliquer m'a toujours paru comme la seule excuse à l’existence de la parole"
JL Godard

quelques trucs sur autocad
0

#3 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 07 février 2019 - 16:04

Merci pour ton intervention.

Effectivement je n'ai peut être pas assez expliqué mes attendus.

Au début de la fonction, on nous demande quel coefficient utiliser. Ici je lui renseigne "0.35".

Après je sélectionne la polyligne et ensuite il me demande où placer le block.

Je précise ici qu'il utilise la surface arrondi au décimètre, donc 12.62m² devient 12.60m². Et que 11.50m² ne changera pas donc indiqué en dur dans le code.

Ce block contiendrait les informations suivante :

Citation

11.50 / 0.35
1.10 / 0.10


Si j'ai une polyligne de 13.18m², il arrondi à 13.20m² et indique le bloc suivant :

Citation

11.50 / 0.35
1.7 / 0.10


Si j'ai une polyligne de 10.48m², il arrondi à 10.50m² et indique le bloc suivant :

Citation

10.50 / 0.35


J'espère que cela est plus compréhensible maintenant ;)

Edit : je rajoute également que le texte affiché est bien "11.50 / 0.35" et pas le résultat de la division des deux.
0

#4 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 07 février 2019 - 17:55

J'ai essayé de modifier le Lisp TotalArea de gile sans succès.

A la ligne :

((= (vla-get-TagString att) "UNIT")
(vla-put-TextString att (cadr data))
)

J'ai mis :

((= (vla-get-TagString att) "UNIT")
(vla-put-TextString att strcat(" / "(cadr data)))

Mais sans succès.
)
0

#5 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11083
  • Inscrit(e) : 02-septembre 05

Posté 07 février 2019 - 21:00

Salut,

Sans vouloir aucunement préjuger tes capacités en LISP, je tiens quand même à signaler que vouloir modifier TotalArea nécessite une bonne connaissance de concepts avancés de Visual LISP comme, entre autres, les réacteurs.

Ceci dit, si tu veux qu'on puisse t'aider, tu devrais montrer ce que tu as déjà essayer d'écrire pour ta fonction et expliquer clairement comment, à partir des données en entrée (le coefficient spécifié par l'utilisateur et l'ire d'une polyligne) tu procèdes pour arriver aux résultats escomptés. Ceci s'appelle l'algorithme et souvent, un algorithme correctement décrit représente l'essentiel du travail, sa conversion en code est alors évidente.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#6 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 07 février 2019 - 21:29

Pour le moment mes essais ont surtout constitué à modifier ton code Lisp.

J'arrive à afficher ce que j'ai besoin dans le bloc mais il reste pas mal à faire.

Vu que j'y connais pas grand chose c'était plus simple de partir de ton code :/
0

#7 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 08 février 2019 - 09:22

Ok j'avance pas mal sur la modification du code pour avoir ce dont j'ai besoin.

Petite question (gile), lors de la mise à jour d'une polyligne, est-ce possible de récupérer la valeur d'un des attributs pour le modifier ?
0

#8 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7990
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 09 février 2019 - 07:52

Coucou

A
llez j'enfourche mon cheval de bataille encore une fois !
P
our Hydro8 :
A
vant de démonter un lance-flammes pour allumer tes clopes essaie avec des allumettes.

T
es explications, sans être confuses, ne sont pas tout à fait compréhensibles
C
e qui ferait avancer les choses serait de déposer (wetransfer) un dessin avec deux ou trois exemples de ce que tu souhaites comme résultat
C
omme ça on travaillerait avec tes blocs et tes données entrantes
P
ar exemple : le coefficient, c'est quoi ? une entrée de l'utilisateur ou bien doit-il être déduit de la superficie obtenue ?
F
ranchement je pense qu'en quelques lignes de code on arrive à faire ce que tu veux
M
ets-toi à la place de ceux qui veulent t'aider et donne-leur les moyens de le faire.
C
'est pas bien compliqué ce que tu demandes

A
micalement

Éternel débutant ...
Les bases AutoLisp
0

#9 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11083
  • Inscrit(e) : 02-septembre 05

Posté 09 février 2019 - 10:47

Voir le messageHydro8, le 07 février 2019 - 21:29 , dit :

Pour le moment mes essais ont surtout constitué à modifier ton code Lisp.

J'arrive à afficher ce que j'ai besoin dans le bloc mais il reste pas mal à faire.

Vu que j'y connais pas grand chose c'était plus simple de partir de ton code :/


Pour abonder dans le sens de didier, partir d'un code existant dont on pense qu'il fait "un peu" ce qu'on souhaite est rarement une bonne idée, et ce n'est jamais une bonne idée quand on ne comprends pas tout ou parie de ce code.
Comme je l'ai déjà dit, TotalArea est un des LISP les plus complexes que j'ai publié et ce n'est certainement pas une bonne base pour débuter. Vouloir mettre à jour dynamiquement des attributs liés à une polyligne à l'aide réacteurs quand on ne sais pas bien comment modifier une valeur d'attribut, c'est un peu comme vouloir courir un marathon quand on sait à peine marcher.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#10 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 09 février 2019 - 14:32

Bonjour

Merci de vos réponses. Effectivement je suis parti trop rapidement dans la modification de ce Lisp.

Pour que sa soit plus simple, voici un dwg du résultat a peu prêt voulu :

https://we.tl/t-DJThMkUHha

Contrairement à TotalAraa, je ne souhaite pas de fenêtre de configuration mais utiliser le clavier.

Et que la fonction continue quand on a sélectionné une polyligne ( en effet on ne pourra pas en sélectionner plusieurs ).
0

#11 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11083
  • Inscrit(e) : 02-septembre 05

Posté 09 février 2019 - 14:57

Je ré-essaye une dernière fois.

Il faut que tu réalises bien qu'en programmation tu t'adresses à une machine qui, certes calcule très vite, mais est complètement dénuée d'intelligence et d'intuition.
Il faut donc que tu lui donnes dans le détail toutes les instructions nécessaires pour obtenir le résultat désiré. Dis toi qu'il faut faire de même quand tu t'adresses à des humains à qui tu demandes de l'aide.

- À commencer par les données en entrée, lesquelles sont spécifiées par l'utilisateur, lesquelles sont des constantes définies "en dur" dans le programme.
- Puis quelles sont les opérations à effectuer avec ces données pour arriver aux résultats souhaités.
- Et pour finir, que faire avec ces résultats.

Quand tu auras clairement définit chacune de ces taches, la structure de ton programme sera faite, il ne restera plus qu'à coder.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#12 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 09 février 2019 - 15:27

C'est clair dans ma tête mais j'ai pas réussi a bien le transposer par écrit.

L'utilisateur lance la fonction. Elle lui dit :

"Sélectionnez la polyligne ou [C]oeff (0.35) ou [B]ase (11.5)"

Si l'utilisateur choisit "C" out "B" il rentre la valeur qui deviendront les valeurs par défaut pour le prochain lancement.

L'utilisateur sélectionné la polyligne puis indique l'endroit où insérer le bloc.

Dans ce bloc il y a 4 données dont trois variables :
- le coefficient indiqué avec [C]
- la base [B] si la surface de la polyligne est supérieur sinon la surface de la polyligne.
- la surface de la polyligne - base [B] si elle est supérieure à 0 sinon 0.
- un coefficient de 0.10 indiqué en dur dans le bloc.

Une fois le bloc inséré, l'utilisateur est invité à sélectionner la prochaine polyligne etc....

J'espère que ces explications sont plus clairs que précédemment !
0

#13 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11083
  • Inscrit(e) : 02-septembre 05

Posté 09 février 2019 - 16:10

Voir le messageHydro8, le 09 février 2019 - 15:27 , dit :

C'est clair dans ma tête mais j'ai pas réussi a bien le transposer par écrit.


"le transposer par écrit", c'est précisément ce qu'on fait quand on écrit un programme, c'est pourquoi je me suis permis d'insister pour que tu le fasses d'abord en français.

On peut maintenant essayer de résoudre chacune des étapes, séparément dans un premier temps, en fonction de ce que sais déjà faire.

Pour la saisie des données, par exemple, tu auras besoin d'utiliser entsel pour inviter l'utilisateur à sélectionner une polyligne, mais aussi initget pour lui permettre d'entrer des options (Coeff ou Base), d'utiliser if ou cond pour analyser l'entrée utilisateur, le tout probablement dans une boucle while tant que le résultat n'est pas une polyligne.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#14 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7990
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 09 février 2019 - 16:49

Coucou

À
mon tour,

M
erci de ces explications, tardives mais elles sont tout de même là

I
l est écrit : "Sélectionnez la polyligne ou [C]oeff (0.35) ou base (11.5)"

J
e pense qu'il faut comprendre, Sélectionner la polyligne, valider, ensuite entrer le coefficient, deux étapes, non ?

Dans l'exemple fourni : pourquoi une polyligne a un coef de 0.26 ?
Éternel débutant ...
Les bases AutoLisp
0

#15 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 09 février 2019 - 16:57

Enfaite les valeurs coeff et base ont une valeur par défaut (11.5/0.35) qui permet d'éviter que l'utilisateur les rentres la première fois (si c'est possible) et qu'il sélectionne directement la polyligne.

Le 23 correspond a une valeur de base différente de la valeur par défaut.
0

#16 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7990
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 09 février 2019 - 17:32

Désolé

J
e ne comprends pas la logique à suivre.
P
ar défaut il y a un coef de 0.35, on peut le mettre en choix prédéfini, OK
E
t dans ce cas on écrit la superficie de la polyligne moins 11.5 et le reste à 0.10
M
ais si l'utilisateur répond autre chose que 0.35 quelle est la valeur qu'il faut écrire
C
ar dans le fichier exemple je ne vois pas le rapport entre 23 à 0.26 et 4 à 0.10

M
erci de clarifier pour qu'on puisse s'y mettre


Éternel débutant ...
Les bases AutoLisp
0

#17 L'utilisateur est hors-ligne   Hydro8 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 159
  • Inscrit(e) : 23-octobre 17

Posté 09 février 2019 - 18:09

Le calcul est identique seul la base et le coefficient change.

Prenons une polyligne de 25m², si je laisse par défaut j'aurais :

11.5 / 0.35
13.5 / 0.10

Maintenant si en base je mets 23, j'aurais :

23 / 0.35
2.0 / 0.10

Édit :

Prenons B = Base / C = Coeff / S = surface polyligne

Var1 = if(S > B ){ B }else{ S }
Var2 = C
Var3 = if(S > B ){ S - B }else { 0 }

Mon block sera composé de :

Var1 | Var2
Var3 | 0.10
0

#18 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7990
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 10 février 2019 - 09:39

Coucou

J
e pense qu'il y a un réel problème de communication, qu'est-ce que tu es compliqué !!!
J
'ai écrit un truc vite fait (sans vrais contrôles) pour voir si j'ai bien compris intégré tes explications

D
onc tu choisis une polyligne, un message te demande de rentrer base ou 0.35, si tu valides à vide ce sera le 0.35 qui sera pris par défaut
D
eux cas se présentent
L
a superficie est supérieure à 11.5 et dans ce cas : attribut 1 sera 11.5 attribut 2 sera 0.35 attribut 3 sera (surf-Poly moins 11.5)
L
a superficie est inférieure à 11.5 et dans ce cas : attribut 1 sera SurfPoly attribut 2 sera 0.35 attribut 3 sera 0.0

S
i tu n'as pas validé à vide au message, tu rentres la valeur de la base puis le coefficient et dans ce cas :
attribut 1 sera "base" attribut 2 sera le coefficient attribut 3 sera (surf-Poly moins base)

P
our ce qui de ton bloc tu n'es pas vraiment dans les clous, c'est quoi ces étiquettes ? UNIT et LABEL et quelle est son unité de création ?
T
u as dû copier-coller depuis un autre dessin et je me permets de te conseiller de créer un bloc dédié avec un point d'insertion qui veuille dire quelque chose
C
'est pas très "informatique" cette façon de faire.

L
es contrôles porteront si le code va dans le sens attendu, sur le fait que la poly soit fermée ou pas, sur la sélection de polyligne et pas d'autre chose... et plus si tu veux
V
oici le code vite fait sur le gaz :


Éternel débutant ...
Les bases AutoLisp
0

#19 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7990
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 10 février 2019 - 09:40

(setq poly (car (entsel "\nChoix de la polyligne\n")))
(setq polyvla (vlax-ename->vla-object poly))
(setq surf (vlax-get-property polyvla 'area))

(setq dec 1)

(setq choix (getreal "\nChoisissez Base ou le coef <0.35> (par défaut) : "))
(if (null choix)
  (setq choix 0.35)
  (progn
	(setq choix2 (getreal "\nEntrez le coefficient\n"))
	)
  )


(cond
  ((and (< surf 11.5)(= 0.35 choix)) (setq surf1 surf surf2 0.0))
  ((and (> surf 11.5)(= 0.35 choix)) (setq surf1 11.50 surf2 (- surf surf1)))
  ((/= choix 0.35)(setq surf1 choix choix choix2 surf2 (- surf surf1)))
  )
(setq pins (getpoint"\nPoint d'insertion du bloc ?\n"))
(command "_insert" "Totalarea" pins "10" "" ""  (rtos surf1 2 dec) (rtos choix 2 2) (rtos surf2 2 dec))

(princ)

 

Éternel débutant ...
Les bases AutoLisp
0

#20 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3527
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 10 février 2019 - 13:35

Salut Didier,

Je n'ai pas vu le fichier d'Hydro8 mais d'après ton message, UNIT et LABEL sont les définitions d'attributs du super lisp de gile, Totalarea. UNIT est pour indiquer l'unité² et LABEL pour mettre Chambre, Bureau, Salon, etc.Lorsqu'on utilise le bloc Totalarea avec le lisp Totalarea, lorsqu'on sélectionne un polyligne fermé, la superficie s'indique directement grâce à la troisième définition d'attribut. Celle-ci se modifie automatiquement lorsqu'on modifie la polyligne. Mais encore faut-il utiliser le lisp Totalarea avec le bloc Totalarea qui lui est associé pour que ça fonctionne.

Dans le cas présent, Hydro8 est partie sur la base du lisp Totalarea qu'il souhaitait modifier et je suppose donc, qu'il a utiliser le bloc qui va avec.
Steven________________________________________
Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.
Pour la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.
En rêve; AutoCAD sous Linux.
0

Partager ce sujet :


  • 4 Pages +
  • 1
  • 2
  • 3
  • Dernière »
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)