Aller au contenu

CADZEB

Membres
  • Compteur de contenus

    16
  • Inscription

  • Dernière visite

Tout ce qui a été posté par CADZEB

  1. Bonjour, regarde du côté de chez Gile . Le but étant de mettre un cadre autour d'un texte sélectionné, ce qui à l'air de correspondre plus ou moins à ce que tu cherches à faire. Amicalement Vincent
  2. CADZEB

    AcDb reactor

    oui, est dès que j'aurai récupéré un mot de passe, je réapparaitrai comme tel Merci pour les tuyaux, je vais étudier cela de près ! Amicalement Vincent
  3. CADZEB

    AcDb reactor

    Bonjour, suite à la demande de quelqu'un qui souhaite que ses hachures soient toujours sur le même calque, sans tenir compte du calque courant, j'ai bien entendu pensé aux réacteurs. La première idée est de passer par 2 réacteurs de commande. Le premier réacteur qui s'enclenche au début de la commande hachure, qui met de côté la valeur du calque courant et qui change cette valeur en ce qui m'intéresse. Le second réacteur s'enclenche à la fin de la commande hachure pour remettre la valeur du calque courant. ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-command-reactor "Debut Hachure" '((:vlr-commandWillStart . StartHatch))) (vlr-command-reactor "Fin Hachure" '((:vlr-commandEnded . EndHatch))) (defun StartHatch (calling-reactor commandInfo / thecommand e) (setq thecommand (nth 0 commandInfo)) (if (or (= thecommand "BHATCH") (= thecommand "-BHATCH")) (progn (setq OldCLAYER (getvar "CLAYER")) (if (setq e (tblobjname "layer" "FV_hachures")) (progn (setq e (vlax-ename->vla-object e)) (vla-put-Freeze e :vlax-false) (vla-put-LayerOn e :vlax-true) (setvar "CLAYER" "FV_hachures") ) ) ) ) ) (defun EndHatch (calling-reactor commandInfo / thecommand) (setq thecommand (nth 0 commandInfo)) (if (or (= thecommand "BHATCH") (= thecommand "-BHATCH")) (if OldCLAYER (setvar "CLAYER" OldCLAYER) ) ) ) Ok, c'est de la grosse artillerie pour pas grand chose, mais c'est aussi pour mieux comprendre les réacteurs. La deuxième idée me paraissait plus séduisante. Elle consiste à repérer la création d'une nouvelle hachure et changer son calque en ce qui m'intéresse. Là, il me semblait intéressant d'utiliser un acdb-reactor ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-acdb-reactor "calque hachure" '((:vlr-objectAppended . AppendHatch))) (defun AppendHatch (calling-reactor AcDbInfo / e) (setq e (vlax-ename->vla-object (nth 1 AcDbInfo))) (if (= (vla-get-ObjectName e) "AcDbHatch") (if (setq lay (tblobjname "layer" "FV_hachures")) (progn (setq lay (vlax-ename->vla-object lay)) (vla-put-Freeze lay :vlax-false) (vla-put-LayerOn lay :vlax-true) (vla-put-Layer e "FV_hachures") ) ) ) ) Mais l'entité e récupérée par le biais de la fonction callback n'est pas modifiable parce que ouverte en lecture uniquement. Donc, la fonction vla-put-layer renvoie une erreur. Amicalement Vincent
  4. CADZEB

    Reprise de bétonnage

    Par contre, je viens de m'apercevoir d'un oubli. Puisque je redessine la polyligne à chaque fois qu'elle est modifiée, il faut que je la remette sur le même caque que la polyligne d'origine. Sinon, elle se met sur le calque courant à chaque modification, ce qui n'est pas top. Amicalement Vincent
  5. dans le if, le jeu de sélection s'appelle ccb1, puis plus loin dans (command ...) il s'appelle ccbassin. Forcément ça marche pas bien. Ensuite, la variable BASSIN "tombe du ciel" : elle n'est initialisée nulle part. Regarde ce que te renvoie entsel (il faudrait aussi prévoir un \n en début de texte pour que le message aille à la ligne) (setq e (entsel "\nChoix d'un élément du calque BASSIN")) renvoie ( (91.1812 306.832 -1.43493e-042)) donc dans la variable e; il y a une liste dont le premier élément est le nom de l'entité sélectionnée et le second élément les coordonnées du point cliqué. Ce qui nous intéresse, c'est le premier élément de la liste, qu'on obtient avec la fonction car. (setq e (car (entsel "\nChoix d'un élément du calque BASSIN"))) renvoie Maintenant, dans e, il y a l'adresse de l'entité. Pour voir ce qu'elle a dans le ventre, il faut aller regarder ce qu'il y a à cette adresse avec la fonction entget (setq a (entget e)) renvoie ((-1 . ) (0 . "LINE") (330 . ) (5 . "6E7") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "BT-CULEE_CP") (100 . "AcDbLine") (10 55.8153 0.10873 -6.46235e-027) (11 47.2494 1.46543 -6.46235e-027) (210 0.0 0.0 1.0)) qui nous renvoie une liste qui contient plein d'informations intéressantes sous la forme d'une liste, où chaque sous-liste commence par une clé, qu'on appelle le code dxf (voir dans l'aide sous ce sujet). La clé 8 correspond au calque : c'est celle là qui nous intéresse et on peut rechercher l'entrée correspondant à cette clé avec assoc. (assoc 8 a) renvoie (8 . "BT-CULEE_CP") On y est presque, puisqu'on vient d'obtenir une paire pointée dont le 2ème élément est le nom du calque. Il suffit de pêcher ce 2ème élément dans la liste et le mettre dans une variable, par exemple BASSIN. (setq BASSIN (cdr (assoc 8 a))) met "BT-CULEE_CP" dans la variable BASSIN Ce n'est que maintenant que tu peux lancer la ligne (command "_chprop" etc...) (defun c:ccbassin () (princ "\n Choix des objets qui doivent changer de calque...\n") (setq ccb1 (ssget)) (if ccb1 (progn (setq e (car (entsel "\nChoix d'un élément du calque BASSIN"))) (setq a (entget e)) (setq BASSIN (cdr (assoc 8 a))) (command "_chprop" ccb1 "" "_layer" BASSIN "") ) ) (princ) ) Il faudrait encore vérifier, comme le fait Bonuscad, si entsel s'est bien exécuté, d'où le (while (null...)) qui fait recommencer entsel tant qu'on n'a pas cliqué sur une entité. De plus, il utilise la 2ème méthode que je décrivais plus haut. Elle est moins simple, mais plus rapide. Bon courage. Amicalement Vincent PS : Il n'y a pas de question con. Les réponses peuvent l'être, mais jamais les questions. [Edité le 5/2/2010 par CADZEB]
  6. CADZEB

    Reprise de bétonnage

    Bonjour, peut-être est-ce un problème de souris qui, de temps en temps, t'envoie le curseur à perpet ? Parce que ce n'est pas, a priori, au niveau du lisp que ça bug : je suis incapable d'intervenir dans le fonctionnement de la fonction getdist. Idem pour la commande étirer. Je ne vois pas. Si quelqu'un à une idée ? Amicalement Vincent
  7. Bonjour, il y a 3 manières de faire : Pour commencer, la plus simple avec command (command "_chprop" ccbassin "" "_layer" NOMCALQUE "") Une autre façon est d'utiliser les codes dxf de chaque objet du jeu de sélection (utilisation d'une boucle while et des fonctions assoc, subst, cons entget et entmod) Une autre façon est d'utiliser Vlisp. Comme avant, il faut faire une boucle while et changer le calque de chaque objet du jeu de sélection en utilisant vla-put-layer Alors, fait comme tout le monde, commence par le plus simple. Amicalement Vincent
  8. CADZEB

    Reprise de bétonnage

    Bonjour, là c'est clairement la fonction getdist qui a des sautes d'humeur. C'est au moment de la saisie de la distance que le curseur part à perpet et non lors de l'exécution de la fonction RBMOD. Dans mon esprit, compte tenu de ta première description du problème, je pensais que c'était le dessin de la reprise de bétonnage qui partait à l'infini. Comme je n'utilise pas le mode de saisie dyn et que je rentre la distance en tapant une valeur au clavier, je n'étais pas prêt de retrouver ce comportement J'ai essayé et je me suis mis en mode saisie dyn et je rentre la distance par 2 points. J'ai répété cette action une bonne vingtaine de fois et je n'ai pas eu de problème. Je suis en version 2010, peut-être que cela a une importance ? Par ailleurs, as-tu essayé le réacteur, en étirant la polyligne soit par une poignée, soit par la commande étirer ? Amicalement Vincent
  9. CADZEB

    Reprise de bétonnage

    Je suis perplexe, comme le lisp n'utilise aucune (command ...), mais des vla-add qui ne sont pas "sensibles" aux accrochages aux objets. Je n'arrive pas à reproduire le fonctionnement que tu décris Amicalement Vincent
  10. oui, ça j'avais compris. A la réception de mon code de confirmation, je suis retourné au même endroit et je l'ai saisi dans la case prévue à cet effet. Et là, le message "mot de passe envoyé" s'affiche, mais je ne reçois jamais rien. Donc, j'ai créé un nouveau mot de passe mais je n'ai jamais reçu le mail correspondant. C'est là que la bas blesse, à moins que je me trompe complètement. Alors, soit je commets une erreur quelque part, soit il y a un bug dans l'envoi du mot de passe. Merci de bien vouloir vérifier et pour votre aide Amicalement Vincent
  11. Bonjour, Je me suis permis d'adapter le lisp de Zebulon_ concernant des reprises de bétonnage qu'on trouve ici. Je suis sûr qu'il ne m'en voudra pas. C'est pour la bonne cause. Il y a toujours la fonction c:RB pour dessiner la reprise de bétonnage (j'ai rajouté un marqueur xdata pour reconnaitre cette polyligne parmi les autres). Il y a en plus une fonction c:RBMOD pour modifier la densité des zigzags et pour finir, il y a un réacteur pour modifier la reprise de bétonnage quand on étire la polyligne. Pour la gestion des xdatas, j'utilise la bibliothèque crée et mise à disposition par Didier DUHEM (load "libdata") (vl-load-com) (defun create_xdata_rb (E / EXDATA) (setq EXDATA (x_putrel "dis" RB_DIST EXDATA "RBCADSYS")) (x_write EXDATA E "RBCADSYS") ) (defun cs:LwPolyline (LISTPT LARGEUR LAY / ACDOC SPACE TABLEAU MyLwPolyline) (setq LISTPT (mapcar '(lambda (x) (list (car x) (cadr x))) LISTPT)) ;; enlever les z pour la lwpolyline (setq ACDOC (vla-get-activedocument (vlax-get-acad-object))) (setq SPACE (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace ACDOC) (vla-get-ModelSpace ACDOC) ) ) ;; "transformer" les points en atomes avec append (setq LISTPT (apply 'append LISTPT)) ;; créer le tableau (setq TABLEAU (vlax-make-safearray vlax-vbDouble (cons 0 (- (length LISTPT) 1)) ) ) ;; remplir le tableau (vlax-safearray-fill TABLEAU LISTPT) ;; créer la polyline (setq MyLwPolyline (vla-addLightWeightPolyline SPACE TABLEAU)) ;; lui coller une épaisseur (vla-put-ConstantWidth MyLwPolyline LARGEUR) ;; mettre dans un calque (vla-put-layer MyLwPolyline LAY) MyLwPolyline ) (defun cs:startundomark () (vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object))) ) (defun cs:endundomark () (vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object))) ) (defun dessine_rb (PT1 PT2 RB_DIST LAY / ANG L H N RAB I LISTPT P2 P3 P4 RBPOL) (setq ANG (angle PT1 PT2)) (setq L (distance PT1 PT2)) (setq H (/ RB_DIST 2)) (setq N (fix (/ (* 2 (+ L RB_DIST)) (* 3 RB_DIST)))) (setq RAB (- (/ L 2) (* (/ RB_DIST 4) (- (* 3 N) 5)))) (setq I 1) (setq LISTPT (list PT1)) (repeat (- N 1) (if (= I 1) (setq P2 (polar PT1 ANG RAB)) (setq P2 (polar PT1 ANG RB_DIST)) ) (setq LISTPT (cons P2 LISTPT)) (setq P3 (polar P2 (+ ANG (atan 2)) (sqrt (/ (* 5 H H) 16)))) (setq LISTPT (cons P3 LISTPT)) (setq P4 (polar P3 (- ANG (atan 2)) (sqrt (/ (* 5 H H) 4)))) (setq LISTPT (cons P4 LISTPT)) (setq PT1 (polar P4 (+ ANG (atan 2)) (sqrt (/ (* 5 H H) 16)))) (setq LISTPT (cons PT1 LISTPT)) (setq I (+ I 1)) ) (setq LISTPT (cons PT2 LISTPT)) (setq LISTPT (reverse LISTPT)) (cs:LwPolyline LISTPT 0 LAY) (create_xdata_rb (entlast)) ) (defun C:RB (/ PT1 PT2) (cs:startundomark) (if (not RB_DIST) (cond ((= (getvar "INSUNITS") 4) (setq RB_DIST 50.0)) ;; mm ((= (getvar "INSUNITS") 5) (setq RB_DIST 5.0)) ;; cm ((= (getvar "INSUNITS") 14) (setq RB_DIST 0.5)) ;; dm ((= (getvar "INSUNITS") 6) (setq RB_DIST 0.05)) ;; m (T (setq RB_DIST 0.05)) ) ) (setq PT1 nil) (prompt (strcat "\nEspace entre les symboles de reprise : " (rtos RB_DIST 2 3))) (while (/= (type PT1) 'LIST) (initget 1 "Espace") (setq PT1 (getpoint "\nPremier point ou [Espace] : ")) (cond ((= PT1 "Espace") (setq RB_DIST (getdist "\nEspace entre les symboles de reprise : ")) ) ) ) (setq PT2 (getpoint PT1 "\nDeuxième point : ")) (dessine_rb (trans PT1 1 0) (trans PT2 1 0) RB_DIST (getvar "CLAYER")) (cs:endundomark) (princ) ) (defun C:RBMOD (/ ss RB_DIST I e eobj) (cs:startundomark) (prompt "\nSaisir les reprises de bétonnage à modifier :") (setq ss (ssget '((-3 ("RBCADSYS"))))) (if ss (progn (setq RB_DIST (getdist "\nEspace entre les symboles de reprise : ")) (setq I 0) (repeat (sslength ss) (setq e (ssname ss I)) (setq eobj (vlax-ename->vla-object e)) (dessine_rb (vlax-curve-getStartPoint eobj) (vlax-curve-getEndPoint eobj) RB_DIST (vla-get-layer eobj) ) (vla-delete eobj) (setq I (+ I 1)) ) ) ) (cs:endundomark) (princ) ) (vlr-command-reactor "modifie RB" '((:vlr-commandEnded . EndStretchRB))) (defun EndStretchRB (calling-reactor endcommandInfo / thecommandend ss ename eobj I RB_DIST) (setq thecommandend (nth 0 endcommandInfo)) (if (or (= thecommandend "STRETCH") (= thecommandend "GRIP_STRETCH")) (progn (if (not (setq SS (cadr (ssgetfirst)))) (setq ss (ssget "_P")) ) (setq I 0) (if ss (repeat (sslength ss) (setq ename (ssname ss I)) (if (setq RB_DIST (x_trouvinfo "dis" ENAME "RBCADSYS")) ;; quand j'ai créé la rb je lui ai mis un marqueur xdata pour la reconnaitre (progn (setq eobj (vlax-ename->vla-object ename)) (dessine_rb (vlax-curve-getStartPoint eobj) (vlax-curve-getEndPoint eobj) RB_DIST (vla-get-layer eobj) ) (vla-delete eobj) ) ) (setq I (+ I 1)) ) ) ) ) ) Amicalement Vincent [Edité le 5/2/2010 par CADZEB]
  12. J'ai viré le cookie cadxp dans firefox (outils/options/vie privée) Il y a du progrès, je ne me connecte plus avec l'ancien utilisateur et mot de passe. Comme je ne me souviens plus de l'ancien mot de passe, je suis allé le demander mais je ne reçois qu'un code de confirmation et jamais le mot de passe. Par ailleurs, lorsqu'on reçoit un message du webmaster lors d'un nouveau message sous un sujet qu'on a coché, le lien qui figure dans le mail est toujours http://www.CADxp.com/modules.php...... C'est pour ça que l'ancien cookie fonctionne encore puisque je suis dirigé vers www.cadxp.com et dès que je change de page, je passe sur cadxp.cadmag.info et le cookie ne marche plus, d'où la déconnexion. Voilà, il suffira que je trouve un webmaster charitable qui me fasse parvenir le mot de passe qui va bien. Amicalement Zebulon_
  13. Mon problème est que la connexion ne fonctionne que pour une page. Donc, elle fonctionne, mais dès que j'accède à une autre page, je suis déconnecté et considéré comme "Invité". Sans doute un problème de cookie, mais je ne saurais pas y remédier. Et je vois que je ne suis pas le seul, si j'en crois le message dans les "infos rapides" de sbosarl qui semble avoir les mêmes soucis Amicalement Zebulon_
  14. CADZEB

    reacteur changement calque

    J'ai essayé avec les réacteurs AcDb ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-acdb-reactor nil '((:vlr-objectModified . ObjChangeProp))) (defun ObjChangeProp (calling-reactor ModObjLst / lst) (setq lst '(("HA6" 0.007) ("HA8" 0.010) ("HA10" 0.012) ("HA12" 0.014) ("HA14" 0.016) ("HA16" 0.019) ("HA20" 0.024) ("HA25" 0.030) ("HA32" 0.038) ("HA40" 0.048) ) ) (setq eobj (vlax-ename->vla-object (cadr ModObjLst))) (if (= (vla-get-objectname eobj) "AcDbPolyline") (progn (setq LAY (strcase (vla-get-layer eobj))) (if (member LAY (mapcar 'car lst)) (vla-put-ConstantWidth eobj (cadr (assoc LAY lst))) ) ) ) ) Pas de chance. On n'a pas le droit de faire le vla-put sur eobj :casstet: Dommage Amicalement Zebulon_
  15. Bonjour, la fonction Callback fait un regen, même si on ne change pas la valeur de LTSCALE. Je m'explique : si on passe du Model à une présentation (ou inversement) le regen s'impose, mais si on passe d'une présentation à une autre le regen semble inutile. Si c'est inutile et que ça prend du temps, autant éviter de faire ce regen. Je propose de modifier la fonction callback de cette manière (defun ltscaleCallback (rea lst / oldLTSCALE) (setq oldLTSCALE (getvar "LTSCALE")) (setvar 'ltscale (if (= (car lst) "Model") (vlax-ldata-get "Z_LTSCALE" "ltscalem") (vlax-ldata-get "Z_LTSCALE" "ltscalep") ) ) (if (/= oldLTSCALE (getvar "LTSCALE")) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acAllViewports) ) ) ou quelque chose du même style. Amicalement Zebulon_
  16. Bonjour, j'ai un problème de connexion depuis ce matin. J'arrive à me connecter, mais dès que je change de page, je me retrouve comme "invité". Pas moyen de répondre ou de lire des réponses. J'ai créé un nouvel utilisateur et en me connectant via ce nouvel utilisateur, cela marche. Mais, j'aimerais récupérer mon ancien Pseudo Comment faire ? Merci Amicalement Zebulon_
×
×
  • 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é