pascal19 Posté(e) le 31 octobre 2008 Posté(e) le 31 octobre 2008 J'ai fait un bouton pour inserer un bloc dynamique: ^C^C-inserer;0-lf-reseaux-cfa-droit2;\;1;; dans tout mes blocs dynamiques du type "0-lf-reseaux-cfa... " j'ai un parametre de consultationque j'ai appelé cfa-largeur, or quand j'insère un bloc cfa, c'est sur un autre bloc cfa. est-il possible de faire correspondre le parametre cfa-largeur du bloc à inserer avec celui du bloc sur lequel je l'insère ? Faut-il passer par du LISP ou VLISP ? Suis-je clair?
Patrick_35 Posté(e) le 31 octobre 2008 Posté(e) le 31 octobre 2008 Bonjour A lire @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
pascal19 Posté(e) le 31 octobre 2008 Auteur Posté(e) le 31 octobre 2008 heum...le la refait... Bonjour J'ai fait un bouton pour inserer un bloc dynamique: ^C^C-inserer;0-lf-reseaux-cfa-droit2;\;1;; dans tout mes blocs dynamiques du type "0-lf-reseaux-cfa... " j'ai un parametre de consultationque j'ai appelé cfa-largeur, or quand j'insère un bloc cfa, c'est sur un autre bloc cfa. est-il possible de faire correspondre le parametre cfa-largeur du bloc à inserer avec celui du bloc sur lequel je l'insère ? Faut-il passer par du LISP ou VLISP ? Suis-je clair dans mon énoncé car j'ai moi même du mal à le comprendre? D'avance merci
Patrick_35 Posté(e) le 31 octobre 2008 Posté(e) le 31 octobre 2008 Re bonjour Heu, non, ton énoncé n'est pas facile à comprendre.Avec un exemple peut-être. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
x_all Posté(e) le 31 octobre 2008 Posté(e) le 31 octobre 2008 fichtre... je suis infecté !! quelques trucs sur autocad
pascal19 Posté(e) le 31 octobre 2008 Auteur Posté(e) le 31 octobre 2008 http:// http://images.imagehotel.net/sjjbwjh95l.jpg Voila j'ai la partie droite d'un chemin de câble, sa largeur est un parametre dynamique (parametre de consultation que j'ai appelécfa-largeur)Je viens inserer un coude, celui ci s'aligne grace à un parametre d'alignement,mais j'aimerai aussi que sa l'argeur s'ajuste à celle de la partie droite, sachant que ce coude est aussi un bloc dynamiquedont la largeur est un paramètre identique à celui de la parti droite(parametre de consultation que j'ai appelé cfa-largeur) en esperant avoir été plus clair...
lesourd2 Posté(e) le 31 octobre 2008 Posté(e) le 31 octobre 2008 Salut C'est quoi ce lien "pourri" A lire http://images.imagehotel.net/melqlnyae0.jpg
pascal19 Posté(e) le 1 novembre 2008 Auteur Posté(e) le 1 novembre 2008 déja, j'avais pas dit bonjour en outre "suis-je clair ?" est ambigue dans sa forme, en effet un superieuremploie cette formule à un subordonné pour s'assurer que les consignes ont bien été comprises.Evidemment, je n'ai pas employé cette formule dans ce sens, je voulais juste ne pas être trop long tout en voulant m'assurer que mon énoncé était compréhensible. Par conséquent, toutes mes excuses à tous ceux que j'ai pu froissé (principalementpatrick_35) je ne pensais pas être mal polis a+
Patrick_35 Posté(e) le 3 novembre 2008 Posté(e) le 3 novembre 2008 Bonjour lesourd2pascal19 a très bien compris le sens de ma remarque (et je ne suis pas froissé pour autant, car il m'arrive aussi de temps en temps d'attraper un de ces virus. C'est juste que cela devient malheureusement une généralité et il faut parfois faire un rappel à l'ordre)De plus, le lien est à prendre au second degré et la réponse de x_all (qui m'a bien fait rire) va dans ce sens. pascal19Je pense qu'il va falloir faire un lisp pour répondre à ton besoin.Je peux te faire quelque chose, mais pour cela, tu pourrais m'envoyer tes blocs ?Ou alors, le faire toi-même. Il faut juste définir une variable de largeur que pourront ensuite exploiter tes autres blocs via une routine d'insertion. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
pascal19 Posté(e) le 3 novembre 2008 Auteur Posté(e) le 3 novembre 2008 Voila c'est envoyer!attention je viens de me rappeler, les bons blocs sont dans module-cfa.dwg(je ne les ai pas redéfini la dernière fois que je les ai modifié) a+
Patrick_35 Posté(e) le 4 novembre 2008 Posté(e) le 4 novembre 2008 Salut Voici un premier jet, mais il me convient à moitié car il y a une chose qui m'échappe.Je me suis débrouillé pour que cela fonctionne correctement (defun reacteur_ajouter_cdc(rea data / ent pro) (and (setq ent (vlax-ename->vla-object (cadr data))) (eq (vla-get-objectname ent) "AcDbBlockReference") (eq (vla-get-isdynamicblock ent) :vlax-true) (member (strcase (vla-get-effectivename ent) T) '( "0-lf-reseaux-cfa-casse" "0-lf-reseaux-cfa-coude" "0-lf-reseaux-cfa-droit1" "0-lf-reseaux-cfa-droit2" "0-lf-reseaux-cfa-reduc" "0-lf-reseaux-cfa-te-croix" ) ) Patrick_Taille_Cdc (foreach pro (vlax-invoke ent 'getdynamicblockproperties) (if (eq (vla-get-propertyname pro) "Consultation") (if (member (itoa Patrick_Taille_Cdc) (vlax-get pro 'allowedvalues)) (setq liste_object_reacteur_cdc (cons pro liste_object_reacteur_cdc)) ; (vla-put-value pro (itoa Patrick_Taille_Cdc)) (princ "\nLa taille du Chemin de câbles ne correspond pas aux paramètres de Consultation.") ) ) ) ) (princ) ) (defun debut_command_cdc(rea cde / pro) (setq liste_object_reacteur_cdc nil) ) (defun arret_command_cdc(rea cde) (and liste_object_reacteur_cdc (foreach pro liste_object_reacteur_cdc (vla-put-value pro (itoa Patrick_Taille_Cdc)) ) ) (setq liste_object_reacteur_cdc nil) (princ) ) (defun c:cdc(/) (initget 3) (and (setq Patrick_Taille_Cdc (getint "\nIndiquez la taille du chemin de câbles : ")) (not Patrick_Ajouter_Cdc) (setq Patrick_Ajouter_Cdc (vlr-acdb-reactor nil (list (cons :vlr-objectappended (function reacteur_ajouter_cdc))))) (vlr-editor-reactor nil (list (cons :vlr-commandWillStart (function debut_command_cdc)) (cons :vlr-commandcancelled (function arret_command_cdc)) (cons :vlr-commandfailed (function arret_command_cdc)) (cons :vlr-commandEnded (function arret_command_cdc)) ) ) ) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
pascal19 Posté(e) le 4 novembre 2008 Auteur Posté(e) le 4 novembre 2008 Super... merci d'avoir pensé à moi et de bien vouloir m'aider. A priori ça marche bien... mais il me faut in peu de temps pour étudier ce que tu as fait (c'est un peu compliqué pour moi qui n'y connais absoluement rien en VLISP) A propos de ce qui t'échappe, puis-je quelque chose pour toi? A bientot PS j'ai remplacé (if (eq (vla-get-propertyname pro) "Consultation") par (if (eq (vla-get-propertyname pro) "cfa-largeur") pour que ça fonctionne dans mon fichier module-cfa.dwg (dans lequel j'ai renomé "consultation"en "cfa-largeur" pour l'ensemble des blocs)
Patrick_35 Posté(e) le 5 novembre 2008 Posté(e) le 5 novembre 2008 BonjourA propos de ce qui t'échappe, puis-je quelque chose pour toi?Si tu veux, c'est dans la gestion des réacteurs.Quand tu ajoutes un objet, tu ne peux le modifier directement et j'ai donc rusé avec d'autres réacteurs.Si tu trouves mieux, je suis preneur :)........... Pas la peine, car j'ai contouné le problème et optimisé le lisp sans utiliser une liste comme auparavant ;) (defun reacteur_ajouter_cdc(rea data / ent pro) (and (setq ent (vlax-ename->vla-object (cadr data))) (eq (vla-get-objectname ent) "AcDbBlockReference") (eq (vla-get-isdynamicblock ent) :vlax-true) (member (strcase (vla-get-effectivename ent) T) '( "0-lf-reseaux-cfa-casse" "0-lf-reseaux-cfa-coude" "0-lf-reseaux-cfa-droit1" "0-lf-reseaux-cfa-droit2" "0-lf-reseaux-cfa-reduc" "0-lf-reseaux-cfa-te-croix" ) ) Patrick_Taille_Cdc (foreach pro (vlax-invoke ent 'getdynamicblockproperties) (if (eq (vla-get-propertyname pro) "Consultation") (if (member (itoa Patrick_Taille_Cdc) (vlax-get pro 'allowedvalues)) (progn (and liste_object_reacteur_cdc (vla-put-value liste_object_reacteur_cdc (itoa Patrick_Taille_Cdc)) ) (setq liste_object_reacteur_cdc nil) (or (eq (vla-get-value pro) (itoa Patrick_Taille_Cdc)) (setq liste_object_reacteur_cdc pro) ) ) (princ "\nLa taille du Chemin de câbles ne correspond pas aux paramètres de Consultation.") ) ) ) ) (princ) ) (defun arret_command_cdc(rea cde) (and liste_object_reacteur_cdc (vla-put-value liste_object_reacteur_cdc (itoa Patrick_Taille_Cdc)) ) (setq liste_object_reacteur_cdc nil) (princ) ) (defun c:cdc(/) (initget 3) (and (setq Patrick_Taille_Cdc (getint "\nIndiquez la taille du chemin de câbles : ")) (not Patrick_Ajouter_Cdc) (setq Patrick_Ajouter_Cdc (vlr-acdb-reactor nil (list (cons :vlr-objectappended (function reacteur_ajouter_cdc))))) (vlr-editor-reactor nil (list (cons :vlr-commandcancelled (function arret_command_cdc)) (cons :vlr-commandfailed (function arret_command_cdc)) (cons :vlr-commandEnded (function arret_command_cdc)) ) ) ) (princ) ) J'ai conservé le paramètre Consultation que tu peux remplacer comme tu l'as déjà fait. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
pascal19 Posté(e) le 6 novembre 2008 Auteur Posté(e) le 6 novembre 2008 Salut Pour patrick35 Si tu trouves mieux, je suis preneur non je crois pas! en fait j'essaie de comprendre mais mon niveau, c'est plutôtbidouille en LISP et zéro en VLISP, c'est donc un peu dur...(concretement je ne sais même pas ce qu’est un réacteur !) D'après ce que j'ai testé :je lance CDCje donne une largeurles blocs que j’insère ensuite prennent le diamètre donné précédemment. Personnellement j’avais imaginé :Je lance le programmeJe donne un point d’insertion pour mon bloc : (setq point-base (getpoint))Je récupère l’entité se trouvant là où se trouve mon bloc : (setq entité-bloc (ssget point-base))Si entité-bloc existe, je récupère « consultation » (mais là je sais pas faire)Si entité-bloc=nil alors je donne une largeurEnsuite le bloc s’insère avec la bonne largeur (je ne sais toujours pas faire) Penses-tu que c’est possible ? Pour tous les autres : Je peux vous envoyer mes blocs si vous êtes intéressés pour participer à ce post… A+
Patrick_35 Posté(e) le 6 novembre 2008 Posté(e) le 6 novembre 2008 Re Oui, c'est possible, mais cela revient au même que le lisp qui a été fait. La seule différence, c'est de donner en premier la largeur :casstet: De plus, si tu copies un ensemble de cdc, ils se mettront tous à la bonne taille. (concretement je ne sais même pas ce qu’est un réacteur !)Un réacteur permet d'incruster un lisp dans une commande d'autocad.Pour ton besoin, j'interviens lors de l'ajout d'un objet dans le dessin (commande insérer, copier, réseau, etc...)Je regarde si l'objet ajouté est un bloc, s'il est dynamique, s'il fait parti de la liste des blocs, si la taille indiquée faite partie de la liste Consultation, si la taille ne correspond pas et alors je lui force sa valeur. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant