Aller au contenu

Une idée simple


fanion

Messages recommandés

Bonjour à vous tous

Je soutiens Bred dans l'utilisation des réacteurs, c'est un très bon exercice et par ce biais, on est certain du résultat quel que soit l'utilisateur.

Juste une remarque. Il serait plus intéressant d'utiliser vlr-acdb-reactor avec vlr-objectappended qu'un vlr-command-reactor ou un vlr-editor-reactor

Cela réduit logiquement de temps de traitement car le réacteur ne réagit pas avec un déplacer, copier, etc... En fin de compte tout ce qui ne créé pas d'objets.

De plus, un vlr-acdb-reactor devrait fonctionner logiquement aussi avec des lisps.

Ce qui fait en fin de compte que malgré les différentes astuces que l'on peut employer pour être certain d'être sur le bon calque, je pense que la solution du réacteur est la plus appropriée même s'il c'est la moins évidente à mettre en oeuvre.

 

@+

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

  • Réponses 50
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

En lisant tout ces post, il m'ait venu une idée, mais je ne l'ai pas testé.

 

Quelle est-elle?

 

Utiliser la variable "CMDNAMES" dans un lisp chargé au démarrage, et avec un réacteur.

 

L'idée serait que lorsque celle-ci change, avec le réacteur, le calque change.

 

Je penses que ceci serait possible, mais personnellement je ne maitrise pas assez les réacteur pour concevoir cela.

 

L'avantage serait que cela serait valable par exemple pour: des cotations, du texte, des hachures, des entités de construction tel que Xline ou Ray etc...

 

J'ai l'idée mais pas le code ! :casstet: et je me suis peut être fourvoyé, cela n'est peut être pas possible.

 

 

[Edité le 17/4/2007 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

Je soutiens Bred dans l'utilisation des réacteurs, c'est un très bon exercice et par ce biais, on est certain du résultat quel que soit l'utilisateur.

Et bien , si tu veux savoir, je suis tout à fait daccord avec toi !!!! :P

merci ! merci! merci !!! :D

 

Concernant tes modifications, Patrick, il faut que je m'y plonge vraiment plus en profondeur ...

 

Bonuscad : j'ai un doute sur ta proposition : Mon code avec réacteur fait ce que tu sous-entend ...

(ici pour les cotes et le texte)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut Bonus

Ton idée est réalisable avec le réacteur vlr-sysvar-reactor et :vlr-sysVarChanged

, mais c'est dès le changement de n'importe quelle variable que le réacteur réagit.

Reste à voir si cela est pertinent :P

 

@+

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

c'est plus rapide par les menus je trouve

Pas sur du tout (chacun ses hab.)

 

et comme dit mon patron, le temps c'est du pognon.

 

Achete lui ca

 

http://img249.imageshack.us/img249/3133/billetpapierih8.jpg

 

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

mais c'est dès le changement de n'importe quelle variable que le réacteur réagit

 

Je veux bien te croire cher Patrick_35, tu as plus d'expérience que moi en cette matière. :)

 

Moi la procédure que j'imaginais sommairement est plutôt celle-ci:

 

Vu que la variable CMDNAMES change dès lors que la commande est lancé, je pense qu'il est trop tard pour changer le calque. Même si on change le calque, je penses que la commande se fera toujours dans le calque précédent.

 

Il vaudrait peut être mieux changer la dernière entité créer des lors que CMDACTIVE est à zéro et la placé dans le calque correspondant suivant la valeur de CMDNAMES pendant l'exécution.

 

C'est possible Grand Chef? :P

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

Pour ma part en LTsyen j’attribue une couleur spécifique au calque cote que je n’utilise que pour cela et à la couleur de la ligne de cote je mets DUCALQUE ainsi si la ligne de cote n’est pas de la couleur attendue je sais que je ne suis pas dans le bon calque… et inversement si je tire un trait dans ce calque je sais également que je ne suis pas dans le bon calque

Lien vers le commentaire
Partager sur d’autres sites

comme dit mon patron, le temps c'est du pognon.

 

Sûr, quand tu gagnes du temps, c'est lui qui gagne du pogon !

 

Tout ce qui sert à effectuer une tache plus rapidement génère plus souvent une augmentation des cadences (en instaurant une nouvelle norme) qu'une augmentation de salaire.

 

J'espère que les automatisations de taches qu'on peut trouver ici profitent directement à ceux qui les utilisent, si ce n'est pour gagner une augmentation, au moins pour prendre du temps pour la pause café, pour surfer su CADxp ou apprendre le LISP...

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

Lien vers le commentaire
Partager sur d’autres sites

Il vaudrait peut être mieux changer la dernière entité créer des lors que CMDACTIVE est à zéro et la placé dans le calque correspondant suivant la valeur de CMDNAMES pendant l'exécution.

 

C'est le principe que je fait pour les cotes continues :

 ((and (equal (car Cde) "DIMCONTINUE")(equal (GET-var "Bred-CoteAuto") 1))
(progn
(setq dernier_obj (entnext dernier_obj))
(while dernier_obj
(entmod (subst (cons 8 "Cotation")(assoc 8 (entget dernier_obj)) (entget dernier_obj)))
(setq dernier_obj (entnext dernier_obj)))))

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

comme dit mon patron, le temps c'est du pognon.

Sûr, quand tu gagnes du temps, c'est lui qui gagne du pogon !

 

Cruel dilemme en effet. Moi je m'en accommode, parce que mon patron c'est moi. Donc s'il gagne plein de pognon, ça m'arrange plutôt

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Les petits gars, une meilleure solution en script !

 

^C^C_dimlinear \\\chprop d ca cotation;;

 

Salut Tramber,

Ton script peut fonctionner pour les cotes continus ?

(c'était un point délicat pour mon code...)

ça me dégouterrais bien de ne pas y avoir pensé ...

 

Avec ça chez moi ça marche

 

*^C^C_dimcontinue;\; chprop;d;;ca;cotation;;

 

Un grand merci à Rebaco pour "le tuyau" de l'"*" qui permet de faire boucler une macro

 

Salutations à tous.

Lien vers le commentaire
Partager sur d’autres sites

C'est possible Grand Chef?

Hug, mais tu as plus simple avec vlr-command-reactor ou vlr-editor-reactor puis vlr-commandWillStart qui te permet d'intervenir au début d'une commande, donc de choisir ton calque

 

@+

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

  • 1 mois après...

Hello,

 

Je relance ce poste car, je ne commprend pas tout.

 

Voila le lisp que zebulon_ a ecrit, me semble etre ce que je recherche, je travail de la même facon que lui.

 

Mais je n'arrive pas a le faire fonctionner.

 

Mes question sont les suivantes?

 

Dois-je charger uniquement le fichier lisp. ou bien aussi le DCL si oui y faut faire comment?

 

Dans la partie lisp, j'ai l'impression qu'il y a plusieurs fichier imbriquer l'un dans l'autre ( séparer pas des long trait. Faut t'il charger ce séparement, ou bien copier l'antier et le charger en une fois.

 

si jamais je nage la tête sous l'eau avec un gros boulet au pied avec ces lisp...

 

Merci a vous de m'aider

 

Bonne journée

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

il faut faire 2 fichiers : un qui s'appelle cct.lsp dans lequel tu mets toutes les fonctions lisp. Un autre qui s'appelle cct.dcl dans lequel tu mets la partie description de la boite de dialogue.

 

Ces 2 fichiers, tu les copies dans un répertoire référencé avec :

Outils/Option/Chemin de recherche de fichier de support

 

Le mieux, c'est de se créer un répertoire C:\mes documents\mes lisps (par exemple), que tu références comme ci-dessus et tu mets les 2 fichiers dans ce répertoire.

 

Après il suffit de taper

(load "cct")

pour charger le lisp et c'est le lisp qui s'occupe de charger le fichier dcl. Pour autant qu'il le trouve. D'où l'importance de mettre ces fichiers dans un répertoire référencé dans les Chemins de recherche de fichiers de support.

 

Puis taper

cct

pour lancer le lisp

 

Amicalement

Zebulon_

(qui ne sait pas nager, encore moins avec un gros boulet au pied...)

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Cool ca marche a merveille,

 

J'ai 2-3 petites question pour que je puisse modifier certaine chose:

 

J'aurai voulu garder le nom de mes calques aimsi que mes styles (COTES-02 pour le calques et COTE-02 pour le style. a quel endroit dans le code dois-je modifier ca?

 

De plus y a t'il moyen qu'après la cotation il reprenne le calque d'avant?

 

Merci beaucoup...

 

Grace a ce code je vais faire des heureux...

Lien vers le commentaire
Partager sur d’autres sites

;;; créer un calque
(defun calque (NewLayer ColLayer TlLayer)
 (if (not (tblsearch "LTYPE" TlLayer))
   (command "_LINETYPE" "_L" TlLayer "acadiso" "")
 )
 (if (not (tblsearch "LAYER" NewLayer))
     (command "_layer" "_M" NewLayer "_CO" ColLayer "" "_LT" TlLayer "" "")
     (command "_LAYER" "_T" NewLayer "_ON" NewLayer "_S" NewLayer "")
 )
)

;------------------------------------------------------------------------------

(defun place_cote (TYP_COT)
 (cond
   ((= TYP_COT "lin")
     (princ (strcat "\nCotation linéaire au 1:" (substr TYP_ECH 5)))
     (command "_dimlinear")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "ali")
     (princ (strcat "\nCotation alignée au 1:" (substr TYP_ECH 5)))
     (command "_dimaligned")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "con")
     (princ (strcat "\nCotation continue au 1:" (substr TYP_ECH 5)))
     (command "_dimcontinue")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "lig")
     (princ (strcat "\nCotation ligne de base au 1:" (substr TYP_ECH 5)))
     (command "_dimbaseline")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "ord")
     (princ (strcat "\nCotation ordonnée au 1:" (substr TYP_ECH 5)))
     (command "_dimordinate")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "ray")
     (princ (strcat "\nCotation rayon au 1:" (substr TYP_ECH 5)))
     (command "_dimradius")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "ang")
     (princ (strcat "\nCotation angulaire au 1:" (substr TYP_ECH 5)))
     (command "_dimangular")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "dia")
     (princ (strcat "\nCotation diamètre au 1:" (substr TYP_ECH 5)))
     (command "_dimdiameter")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
   ((= TYP_COT "rep")
     (princ (strcat "\nCotation repère au 1:" (substr TYP_ECH 5)))
     (command "_leader")
     (while (not (zerop (getvar "cmdactive")))
       (command pause)
     )
   )
 )
)
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
(defun init_cct (/ prefix cfgname cfg)
 (if (not TYP_COT) 
   (setq TYP_COT "lin")
 )
 (if (not TYP_ECH)
   (setq TYP_ECH "cot-50")
 )
)
;------------------------------------------------------------------------------


;------------------------------------------------------------------------------
(defun do_accept_cct ()
 (setq TYP_COT (get_tile "typ_cot"))
 (setq TYP_ECH (get_tile "typ_ech"))
 (done_dialog 1)
)
;------------------------------------------------------------------------------



;------------------------------------------------------------------------------
(defun do_cct_dimstyle (ECH)
 (cond
   ((= ECH "cot-1") "COTE-01")
   ((= ECH "cot-2") "COTE-02")
   ((= ECH "cot-5") "COTE-05")
   ((= ECH "cot-10") "COTE-10")
   ((= ECH "cot-20") "COTE-20")
   ((= ECH "cot-25") "COTE-25")
   ((= ECH "cot-50") "COTE-50")
   ((= ECH "cot-75") "COTE-75")
   ((= ECH "cot-100") "COTE-100")
   ((= ECH "cot-200") "COTE-200")
   ((= ECH "cot-250") "COTE-250")
   ((= ECH "cot-500") "COTE-500")
 )  
)
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
(defun do_cct_layer (ECH)
 (cond
   ((= ECH "cot-1") "COTES-01")
   ((= ECH "cot-2") "COTES-02")
   ((= ECH "cot-5") "COTES-05")
   ((= ECH "cot-10") "COTES-10")
   ((= ECH "cot-20") "COTES-20")
   ((= ECH "cot-25") "COTES-25")
   ((= ECH "cot-50") "COTES-50")
   ((= ECH "cot-75") "COTES-75")
   ((= ECH "cot-100") "COTES-100")
   ((= ECH "cot-200") "COTES-200")
   ((= ECH "cot-250") "COTES-250")
   ((= ECH "cot-500") "COTES-500")
 )  
)
;------------------------------------------------------------------------------



;------------------------------------------------------------------------------
; programme principal
;------------------------------------------------------------------------------
(defun c:CCT (/ OLD_CMD WHAT_NEXT DCL_ID old_CLAY)
 (if (= (getvar "cmdactive") 1)
   (command "_exit")
 )
;;  (setvar "DIMASSOC" 1)              ; cotation non associative
;;  (setvar "DIMASSOC" 2)              ; cotation associative
 (init_cct)
 (setq dcl_id (load_dialog "cct.dcl"))
 (if (not (new_dialog "Cct" dcl_id)) (exit))
 (set_tile "typ_cot" TYP_COT)
 (set_tile "typ_ech" TYP_ECH)

 (action_tile "accept" "(do_accept_cct)")
 (action_tile "cancel" "(done_dialog 0)")

 (setq what_next (start_dialog))
 (unload_dialog dcl_id)
 (if (= what_next 1)   ;OK
   (progn
     (setq old_CLAY (getvar "CLAYER"))
     (setq OLD_CMD (getvar "cmdecho"))
     (setvar "cmdecho" 1)
     (setq CCT_DIMSTYLE (do_cct_dimstyle TYP_ECH))
     (if (not (tblsearch "DIMSTYLE" CCT_DIMSTYLE))
       (alert (strcat "Le style de cote " CCT_DIMSTYLE " n'existe pas"))
       (progn
         (calque (do_cct_layer TYP_ECH) "7" "CONTINUOUS")  ;; la couleur 7 pour le calque
         (command "_dimstyle" "_r" CCT_DIMSTYLE) ;; restaurer le style de cote
         (place_cote TYP_COT)
       )
     )     
     (setvar "cmdecho" OLD_CMD)
     (setvar "clayer" old_CLAY)
   )
 )
 (princ)
)

 

le lisp modifié. Le dcl reste inchangé.

Pour le nom des styles de cote tu regardes dans la fonction do_cct_dimstyle, si jamais tu veux changer.

Et pour le nom des calques, c'est la fonction do_cct_layer.

 

Merci beaucoup...

 

Grace a ce code je vais faire des heureux...

 

Tu inviteras chaque heureux à faire un petit geste

 

Amicalement

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

Heu je pense que tu as du faire une tit erreur a quelque part. car ton nouveau code ne fonctionne pas, mais rien de grave, j'ai trouvé comment mettre mon style de cotes dans ton DCL.

 

Par contre, je n'arrive pas a faire revenir l'ancien calque? a tu un moyen.

 

Merci beaucoup.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Heu je pense que tu as du faire une tit erreur a quelque part.

 

je ne pense pas... ça ne marche plus parce que tu as changé le dcl. Il y a des clés dans le dcl que le lisp utilise. Si tu as changé les ligne "key", ça va foirer forcément. Remet le comme il était et ça marchera. Enfin je pense.

Et ça fait revenir l'ancien calque aussi.

 

Amicalement

Zebulon_

 

 

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Vachement cool

 

Oui tu as raison, je m'incline...

 

J'ai voulu installer ce super lisp sur deux qutre PC de la boite et l'un d'eux est en LT... il me sort une erreur:

 

Cotation linéaire au 1:-01

; error : bad argument type ; expected at [sETVAR]

Commande:

 

A tu une idée ou bien ton lisp ne marche pas pour LT?

 

Merci de ta reponse...

 

 

Lien vers le commentaire
Partager sur d’autres sites

A tu une idée ou bien ton lisp ne marche pas pour LT?

aucun lisp ne marche avec LT

 

Vachement pas cool...

 

Amicalement

Zebulon_

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

Oui je suis d'accord avec toi, mais on a quelque applicatif propre a la construction métailque qui exige des lisp , et pour ce faire on a installer LTextender, qui fais fonctionner les lisp.

 

C'est pour ca que ca m'etonnais...

 

Je vais essayer de grailler encore un peu...

 

Merci beaucoup

Lien vers le commentaire
Partager sur d’autres sites

et pour ce faire on a installé LTextender

 

Je me demandais aussi comment tu faisais pour avoir un message d'erreur avec une LT. Je ne connais pas bien LT et encore moins LTExtender.

A priori, suivant le message d'erreur, c'est la syntaxe de (setvar ...) qui lui cause des soucis. Tu peux essayer de mettre un ; avant les lignes où il y a un (setvar...) pour que le lisp ne tienne pas compte de ces lignes. Histoire de tester...

 

Amicalement

Zebulon_

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é