Aller au contenu

De \"vrais rectangles\" ?...


(gile)

Messages recommandés

Salut,

 

J'ai essayé de faire quelque chose pour que des polylignes rectangulaires se comportent comme de "vrais" rectangles.

 

http://img40.imageshack.us/img40/2363/rectangle.gif

 

La commande TREC utilise la commande RECTANG et lie un réacteur à la polyligne crée qui lui redonnera sa géométrie rectangulaire après un étirement.

 

La commande PL2REC invite l'utilisateur à sélectionner un rectangle (polyligne rectangulaire).

Si la sélection est valide, un réacteur sera lié à la polyligne qui lui donnera un comportement de "vrai rectangle".

 

La commande REC2PL supprime le réacteur lié à la polyligne sélectionnée.

 

La commande RECREMOVEALL supprime tous les réacteurs "rectangle".

 

NOTA : le LISP utilise des réacteurs persistant, il doit donc être chargé automatiquement à l'ouverture de chaque document.

 

Je n'ai pas encore testé très en profondeur, les retours sont donc les bienvenus.

 

EDIT 1 : copier un "vrai rectangle" génère un nouveau "vrai rectangle" (fonctionne aussi avec les commandes MIROIR et RESEAU)

 

EDIT 2 : Nouvelle version (voir Réponse 3)

 

EDIT 3 : réparé un dysfonctionnement suite à la pertinente remarque de Patrick_'reacteur'_35

 

EDIT 4 : réparé un dysfonctionnement signalé par Bonuscad (version 1.04)

 

EDIT 5 : ajouté des contrôles au cas ou un LISP modifierait ou copierait des "rectangles" (version 1.05)

 

Télecharger Rectangle1.05lsp

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

une super idée que tu nous donne là

je me permets de te faire les premières critiques

 

tu me connais et le mot critique n'est pas péjoratif

car ce n'est ni basé sur la jalousie ni sur l'envie.

 

tu devrais cacher ou refaire l'appel de la ligne de commande de la commande native "rectangle"

car si l'utilisateur utilise une des options proposées

Raccord ou Chanfrein par exemple

il n'y aura pas de "réactivité" de la figure créée.

 

ensuite et c'est encore à prouver, mais à la suite d'une copie

la réactivité de la figure est erratique.

(les angles droits ne le sont plus)

 

amicalement

 

ps: j'aurais bien aimé le voir "chez moi", snifs

 

 

 

[Edité le 29/6/2009 par didier]

Lien vers le commentaire
Partager sur d’autres sites

Merci pour le retour, didier.

 

tu devrais cacher ou refaire l'appel de la ligne de commande de la commande native "rectangle"

car si l'utilisateur utilise une des options proposées

Raccord ou Chanfrein par exemple

il n'y aura pas de "réactivité" de la figure créée.

J'y pense, mais c'est de la "cosmétique", pour l'instant la routine contrôle la "validité" géométrique du rectangle et retourne un message si la figure n'est pas un "vrai rectangle" à 4 sommets.

Je verrais ça plus tard, j'ai d'autres soucis, dont celui ci :

 

ensuite et c'est encore à prouver, mais à la suite d'une copie

la réactivité de la figure est erratique.

(les angles droits ne le sont plus)

Curieusement ça ne se produit pas systématiquement, j'essaye de trouver le pourquoi du comment.

 

Et, j'ai un autre problème, en l'état la routine utilise des réacteurs persistants, or si on ouvre un fichier contenant des "rectangles" et que le LISP n'est pas chargé ça génèrera un erreur quand on modifiera un "rectangle".

 

À suivre, donc...

 

 

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

Lien vers le commentaire
Partager sur d’autres sites

Nouvelle version,

 

Les réacteurs ne sont plus persistants, à chaque enregistrement une liste des handles des "rectangles" liés à un réacteur est conservée dans un dictionnaire.

Au chargement du LISP, des réacteurs sont reconstruits à partir de cette liste.

 

J'ai modifié la routine IsRectangle qui évalue la géométrie de la polyligne, et depuis je n'arrive plus à reproduire le dysfonctionnement avec les copies.

Merci de me dire si ce dysfonctionnement persistait.

 

J'ai un peu revu TREC pour forcer les chanfreins et raccords à 0.0 tout en laissant les option de pour le deuxième coin.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

super !!!

 

Un "vrai rectangle" ???!!

 

Mais, je n'ai pas tout compris,... :mad:

 

 

Résultat de la dernière version =>

 

Commande: trec

Spécifiez le premier coin: _.rectangle

Spécifiez le premier coin ou [Chanfrein/Elévation/Raccord/Hauteur/Largeur]:

Spécifiez un autre coin ou [Aire/Cotes/Rotation]:

Commande:

Commande: PL2REC

Sélectionnez un rectangle:

Entité non valide.

Commande:

Commande: REC2PL

Sélectionnez un rectangle:

Commande:

Commande: RECREMOVEALL

Commande:

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

TREC : tu fais un rectangle comme avec la commande native RECTANG. Ensuite si tu l'étires par une ou plusieurs poignées, il conservera une géométrie de rectangle (4 angles droits).

 

PL2REC : tu sélectionnes une polyligne rectangulaire AutoCAD "normale", pour la transformer en "vrai rectangle"

 

REC2PL : tu sélectionnes un "vrai rectangle" pour lui redonner le comportement d'une polyligne.

 

RECREMOVEALL : comme REC2PL mais pour tous les "rectangles" du dessin.

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

Lien vers le commentaire
Partager sur d’autres sites

Sur ta deuxième version,

 

Voici des message que j'ai automatiquement

 

Commande: _list 1 trouvé(s)

 

LWPOLYLINE Calque: "0"

Espace: Espace objet

Maintien = 226

Fermée

Epaisseur constante 0.0000

zone 163072.4073

périmètre 1689.6955

 

au niveau du point X=1322.9196 Y=1336.0510 Z= 0.0000

au niveau du point X= 926.6506 Y= 959.8577 Z= 0.0000

au niveau du point X=1132.1326 Y= 743.4101 Z= 0.0000

au niveau du point X=1528.4016 Y=1119.6034 Z= 0.0000

[surligneur]; erreur: Erreur Automation. Aucune description n'a été entrée.[/surligneur]

 

Commande:

Commande:

 

** ETIRER **

Spécifiez le point d'étirement ou [point de Base/Copier/annUler/Quitter]: ;

[surligneur]erreur: Erreur Automation. Aucune description n'a été entrée.[/surligneur]

 

Étrange même sur la commande LISTE !!!!

 

Bon courage avec les réacteurs, pour ma part je reste méfiant et réticent avec ceux-ci, j'hésite beaucoup à les employer (leur persistances peut engendrer bien des soucis).

Il faut donc une programmation parfaite, mais je te fais confiance pour arriver a un tel résultat ;)

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

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile)

 

Bravo pour tes réacteurs, tu es un chef.

Cependant, j'aurai deux remarques

 

La 1er est que si tu charges plusieurs fois le lisp, tu as plusieurs fois tes réacteurs. Ils s'additionnent

 

Un exemple pour les voir

(defun c:test(/ rea)
 (foreach rea (cdar (vlr-reactors :vlr-dwg-reactor))
   (princ "\nFonction trouvé sur :vlr-dwg-reactor --> ")
   (princ (car (vlr-reactions rea)))
 )
 (princ)
)

 

La seconde est plus vicieuse

Je décharge les réacteurs, fais bouger un grips (pour ne plus avoir de rectangle), relance les réacteurs, re-bouge un grips et je ne retrouve pas mon rectangle.

C'est un cas extrême histoire de te faire griller quelques méninges ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Merci à tous,

 

Bonuscad,

As tu testé dans un fichier vierge ?

 

Patrick_35,

Bien vu, j'avais pensé aux chargements multiples pour les réacteurs d'objet et j'avais oublié le dwg-reactor, c'est réparé.

 

La seconde est plus vicieuse

Je décharge les réacteurs, fais bouger un grips (pour ne plus avoir de rectangle), relance les réacteurs, re-bouge un grips et je ne retrouve pas mon rectangle.

C'est un cas extrême histoire de te faire griller quelques méninges

C'est normal qu'il ne soit plus "dynamique", ce n'est plus un rectangle.

Il faudrait enregistrer aussi les sommets des "rectangles" dans le dictionnaire, mais j'ai pensé que cela relevait de la responsabilité de l'utilisateur de charger ou non le LISP.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonuscad,

As tu testé dans un fichier vierge ?

 

Oui c'était dans un nouveau dessin sous MAP2009.

 

J'ai lancé une 1ère fois TREC et dessiné un rectangle des plus basique (par 2 points), tout c'est bien passé.

J'ai relancé une nouvelle fois, mais en passant par les options rotation et cotes, il m'a bien dessiné mon rectangle, mais là il c'est mis à délirer en me retournant ce message.

 

J'en ai dessiné d'autre, qui malgré les messages se sont mis en place.

Les réacteurs sur les grips fonctionnent aussi malgré ce message et quelque soit les rectangles sélectionnés.

 

J'ai eu ce message jusqu'à la commande QUITTER le dessin?!?

 

J'espère que ces quelques informations vont pouvoir t'aider.

 

PS: J'édite mon propos, car je crois me souvenir que j'avais fait un ESC ou un U après coup, avant de relancer TREC en inversant le mode opératoire des options: Rotation Dimension (ça a peut être son importance pour reproduire l'erreur)

 

HS: Je te félicite ici (pour ne pas polluer/troller ton post original dans le forum "emploi, monde du travail") pour ton initiative et te souhaite sincèrement plein de succès.

 

[Edité le 29/6/2009 par bonuscad]

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

Lien vers le commentaire
Partager sur d’autres sites

Avec la version 1.03, je n'ai pas réussi à reproduire l'erreur que j'avais avec la version précédente.

 

Pour info.

Cependant avec cette nouvelle version, j'ai remarqué que le "U" était mal supporté, mais n'a pas l'air à porter conséquence (enfin à voir...)

 

Commande:

TREC

Modes rectangle courants: Rotation=205.17479120

 

Spécifiez le premier coin: _.rectangle

Modes rectangle courants: Rotation=205.17479120

 

Spécifiez le premier coin ou [Chanfrein/Elévation/Raccord/Hauteur/Largeur]:

Spécifiez un autre coin ou [Aire/Cotes/Rotation]:

Commande:

Commande: u (Expression Lisp) GROUPE

[surligneur]Commande: ; erreur: Erreur Automation Objet effacé[/surligneur]

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

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

C'est beaucoup plus simple avec 2010 et les contraintes paramétriques.

 

(defun c:rect (/ pt)
 (and
   (setvar 'cmdecho 0)
   (vl-cmdf "_.rectangle" "_fillet" 0.0)
   (vl-cmdf)
   (setvar 'cmdecho 1)
   (setq pt (getpoint "\nSpécifiez le premier coin: "))
   (vl-cmdf "_.rectangle" pt)
   (while (/= 0 (getvar 'cmdactive))
     (vl-cmdf pause)
   )
   (vl-cmdf "_AutoConstrain" (entlast) "")
   (vl-cmdf "_ConstraintBar" "_hide")
 )
 (princ)
)

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

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é