Aller au contenu

VDH-Bruno

Membres
  • Compteur de contenus

    1 146
  • Inscription

  • Dernière visite

  • Jours gagnés

    20

Tout ce qui a été posté par VDH-Bruno

  1. Bonjour, Très rapidement une micro modif qui devrait supporter le clore, à tester.. (defun c:ppl (/ pl ent echo) (if (and (setq pl (car (entsel "\n Sélectionnez la polyligne à continuer : "))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (/= PLINETYPE 2) (progn (setvar "PLINETYPE" 2) (command "_.pedit" pl "" "" "") (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE") ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ) (progn (setq ent (entlast) echo (getvar "CMDECHO") ) (setvar "CMDECHO" 1) (command "_.pline" (trans (cdr (assoc 10 (reverse (entget pl)))) pl 1)) (while (/= 0 (getvar "CMDACTIVE")) (command pause)) (setvar "CMDECHO" 0) (cond ((equal ent (entlast))) ;; pline ouvert ((zerop (logand (cdr (assoc 70 (entget (entlast)))) 1)) (command "_.pedit" pl "_j" (entlast) "" "")) ;; sinon pline fermé (T (command "_.pedit" (entlast) "_open" "" ) (command "_.pedit" pl "_j" (entlast) "" "_close" "")) ) (setvar "CMDECHO" echo) ) ) (princ) ) A+
  2. Bonjour, Un confrère dans la charpente béton préfabriqué je suppose… bet interne ou externe ? Sinon pour revenir à ton problème pour Advance je ne te serai pas d’une grande aide, je n’ai jamais utilisé d’applicatif, lorsque je sévissais en bet j’ai toujours tout fait avec les commandes de base d’AutoCAD, voir même à la main lorsque j'ai débuté. Pour ce qui est du ferraillage dans ce cas il est évident que tu ne peux recouvrir tes barres en HA32 par un U de section équivalente la section de ton pied de poteaux (généralement du 50x50 ou 60x60) ne permet pas le respect des dispositions constructives. Il te faut recouvrir avec des U de section inférieur (en considérant que la section ancrée et celle de ton U) quitte à les doubler, ou à rajouter des barres ancrées complémentaire de plus petit diamètre sur les faces latérales de ton poteau dans la hauteur de ton pied de poteaux. Si c’est le type de structure que je pense le poteau est considéré encastré en pied et articulé en tête, dans ce cas le moment décroit rapidement à la sortie du fût. Comme sur Word, clic bouton droit ;) Cordialement,
  3. Bonjour, Regarde du côté de la variable CMDECHO A+
  4. Salut, Oui c’est possible (j’y avais également pensé, mais manque de temps), maintenant si tu es intéressé, je verrais en fonction de mes disponibilités, si je me dégage un peu de temps je le ferai. Et non c’est pas bizarre, c’est normale, je ne sais pas si tu causes lisp mais c’est un cas d’école avec entmod et entmake, en fait _undo/annuler, annule la dernière commande mais dans mon code (comme dans celui de Bryce) nous n’avons pas utilisé l’instruction command, donc ta commande d’annulation vas chercher l’instruction commande antérieur au lisp (dans ton cas ta ligne biaise est certainement la dernière dessiné). Si tu fais un pan ou un zoom avant de lancer le lisp c’est cette dernière commande qui sera annulé et plus ta ligne. C’est pourquoi le "lispeur" moins pressé insère souvent une marque d'annulation dans son code du type (command "_.undo" "_mark") ou son équivalent en Vlisp (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) plus propre à l’affichage, cela pas seulement pour annuler un groupe de commande mais aussi pour s’assurer que la commande annuler ne puisse remonter au-delà de la fonction lisp. En conclusion, tu as raison cette négligence n'est pas normale. A+
  5. Re, Hé donc au final juste pour savoir, ces lignes il fallait les RELIER comme l’indiquait le titre du poste, ou les REUNIR comme indiqué dans le corps de ton message. ;) A+
  6. Bonjour, Très rapidement dans le même esprit que le code de Bryce, mais en donnant un tout autre sens au mot REUNIR… (Pour aller dans le sens de Steven) (defun C:REUNIE (/ ss i dxf p10 p11 ent deplacement lst) (if (setq ss (ssget '((0 . "LINE")))) (progn (repeat (setq i (sslength ss)) (setq dxf (entget (setq ent (ssname ss (setq i (1- i))))) p10 (cdr (assoc 10 dxf)) p11 (cdr (assoc 11 dxf)) ) (if (< (car p10) (car p11)) (setq lst (cons (list p10 p11 ent) lst)) (setq lst (cons (list p11 p10 ent) lst)) ) ) ; repeat (setq lst (vl-sort lst '(lambda (x1 x2) (< (caar x1) (caar x2))))) (setq deplacement '(0.0 0.0 0.0)) (repeat (length lst) (setq dxf (entget (caddar lst)) dxf (subst (cons 10 (mapcar '- (caar lst) deplacement)) (assoc 10 dxf) dxf) dxf (subst (cons 11 (mapcar '- (cadar lst) deplacement)) (assoc 11 dxf) dxf) lst (cdr lst) deplacement (mapcar '- (caar lst) (cdr (assoc 11 (entmod dxf)))) ) ) ) ) (princ) ) Nota: Pour celui qui veut aller plus loin, je pense qu’il y des idées à piocher dans le chalenge n°8… http://cadxp.com/index.php?/topic/14961-challenge-8-ou-le-jeu-des-dominos/ A+
  7. Re, Avec la commande select il n’y a pas de soucis... Sauf que pour visualiser la sélection, il faut le faire avec l’option precedent, dans une commande AutoCAD. Et dans ce cas il est plus simple d’appeler directement la variable contenant le jeu de sélection sauvegardé à l’invite de la commande AutoCAD. A+
  8. Bonjour, Avec sssetfirst si tu cherche à "gripper" une sélection contenue dans une variable ss. _$ (setq ss (ssget)) <Selection set: 136> _$ (sssetfirst nil ss) (nil <Selection set: 136>) A+
  9. Bonjour, A ce sujet , je crois que tu n’as pas creusé suffisamment (ou saisie totalement) l’exemple que je t’avais posté pour la construction de ton filtre de sélection sur le point d’insertion d’un bloc et des arrondies dans les coordonnées. http://cadxp.com/index.php?/topic/37447-rechercher-un-bloc/page__view__findpost__p__205935 A+ (Edit: Ah, doublon avec vincentp010 désolé...)
  10. VDH-Bruno

    Trait d\'axe

    Eventuellement il y a toujours la commande _dimcenter qui s'applique aussi sur une xref et des arcs de cercles. A+
  11. Bonjour, Tout d’abord quand je parle de référence de bloc, je désigne l’entité graphique qui est insérer (_insert) dans ton dessin et quand je parle de définition de bloc, je parle du bloc tel qu’il est définie et enregistrer (_block) dans la table des bloc, à ce sujet si ce n’est déjà fait je t’invite à lire ce très bon sujet Blocs et imbrications d’un de mes auteurs préférés sur ce forum.. Maintenant ce que j’ai voulu dire dans mon post précédent, c’est qu’une fois le bloc etiquette inséré et renseigné dans ton dessin, tu édite l’attribut FE dans valeur: Tu fais insérer un champ puis tu choisie Objet et clique ta référence de bloc dans ses propriétés tu choisie TN et dans expression de champ tu devrais voir inscrit quelque chose du type : %<\AcObjProp Object(%<\_ObjId 2115027656>%).TextString>% Que tu copie (Ctrl+C) colle dans un fichier texte (cette expression barbare fait référence à la valeur contenue dans ton attribut TN) Puis tu recommence la même opération en choisissant cette fois la propriété P de la référence de bloc pour obtenir une autre expression du type : %<\AcObjProp Object(%<\_ObjId 2115027664>%).TextString>% Maintenant dans Noms de champs tu choisie Formule et dans la zone formule tu copie ta première expression moins ta deuxième, tu cliques sur le bouton Evaluer, tu verra apparaitre une expression de champs du type : %<\AcExpr (%<\_FldPtr 2115297776>% - %<\_FldPtr 2115297840>%) \f "%lu2%pr2">% Il ne te reste plus qu’à spécifié le Formats: , la Précision: et de cliquer sur Ok Nota: Travaillant sous une version antérieur à la tienne, il se peut que quelques dénominations ont changer d’appellation, mais cela ne devrait pas te bloquer. Cordialement
  12. Re, Dans ce cas, il faut écrire ta formule dans la référence de bloc plutôt que dans sa définition, puis recopier cette référence qui se mettra à jour en fonction des valeurs d’attributs P & TN. A+ V1-TEST etiquette.zip
  13. Bonsoir, Oui bien sur, inspire toi de ma réponse dans ce post, http://cadxp.com/index.php?/topic/37582-bloc-avec-champ-de-position/page__view__findpost__p__206932, si après tu as toujours un soucis poste ton bloc avec les attributs que tu souhaite additionner. Personnellement je me sers de cette méthode pour calculer la hauteur de mes poteaux,et les compter en extrayant ces données dans des tableaux de nomenclature, poteaux dans lesquels sont renseignés le niveaux inférieure et le niveaux supérieur en vue en plan dans des attributs. A+
  14. Bonjour, C’était un peu fait exprès, pour que cela soit réutilisable pour le plus grand nombre. Oui bien sur. Il est plus facile d’expliquer une ligne de code ou une portion que tout un programme, j’ai laissé quelques commentaires dans le code, en l’exécutant ligne par ligne et en analysant les valeurs en retour tu devrais avoir un bon aperçu de son fonctionnement. Pour personnaliser le programme tu t’apercevra que toutes la première partie du code ainsi que les routines associés STR2LST ListBox de (gile) ne sert qu’à la gérer les entrées utilisateurs. Donc si tu veux coder en dure, il faut supprimer ceci : ;; liste les noms des définition d'attribut de la table des blocs (vlax-for b (vla-get-Blocks doc) (if (and (= (vla-get-IsLayout B) :vlax-false) (= (vla-get-IsXref B) :vlax-false) (not (wcmatch (vla-get-Name B) "*|*")) ) (vlax-for o b (and (= (vla-get-ObjectName o) "AcDbAttributeDefinition") (not (member (setq tagAtt (vla-get-TagString o)) lstTagAtt)) (setq lstTagAtt (cons tagAtt lstTagAtt)) ) ) ) ) ;; Affiche la liste dans une zone de liste pour un choix multiples (setq lstTagAtt (listbox "Etiquettes des définitions d'attributs " "Sélectionnez les étiquettes à filtrer..." (mapcar 'cons (setq lstTagAtt (vl-sort lstTagAtt '<)) lstTagAtt) 2 ) ) ;; Valeurs à associer aux étiquettes correspondantes (defun inputval (l) (if l (cons (cons (car l) (getstring (strcat "Valeur à rechercher pour l'étiquette " (car l) ": ") ) ) (inputval (cdr l)) ) ) ) Puis tu peux remplacer l’expression suivante : ((setq lstTagAtt (inputval lstTagAtt)) Par tes valeurs en dure sous forme d’une liste de paire pointé du type (("ETIQUETTE1" . "VALEUR1") ("ETIQUETTE2" . "VALEUR2") ...). Dans ton cas cela devrait être dans les variable global précédemment définie avec des valeurs de type chaînes. (setq lstTagAtt (list (cons "COMMUNE" commune) (cons "NUMGEOREF" numg))) Puis si tu ne veux pas non plus avoir le choix de la sélection remplace également ceci : ;; Définition de la zone de sélection (princ "\nSélectionnez les blocs ou <tout>: ") (or (ssget (list '(0 . "INSERT") '(66 . 1))) (ssget "_X" (list '(0 . "INSERT") '(66 . 1))) ) Ne garde que cela: (ssget "_X" (list '(0 . "INSERT") '(66 . 1))) Enfin en sécurisant un peu et en simplifiant les instructions devenus inutiles, le code pourrait donné à peu près cela : (defun c:ssasptt9 (/ lstTagAtt doc ss1 ss2 inclu-p) (vl-load-com) (or commune (setq commune "")); au cas ou elle n'est pas définie (or numg (setq numg "")); au cas ou elle n'est pas définie (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) ss2 (ssadd) lstTagAtt (list (cons "COMMUNE" commune) (cons "NUMGEOREF" numg))) ;; Définition de la zone de sélection (ssget "_X" (list '(0 . "INSERT") '(66 . 1))) ;; Prédicat d'inclusion d'une liste l1 dans une autre liste l2 (defun inclu-p (l1 l2) (cond ((null l1) t) ((member (car l1) l2) (inclu-p (cdr l1) l2)) (t nil) ) ) ;; Filtrage de la sélection (vlax-for b (setq ss1 (vla-get-ActiveSelectionSet doc)) ;; vérifie que les critères de filtres liste (Tag .Val) sont compris dans le bloc (if (inclu-p lstTagAtt ;; Liste les couples (Tag .Val) de la référence de bloc (mapcar '(lambda (x) (cons (vla-get-TagString x) (vla-get-TextString x))) (vlax-invoke b 'GetAttributes) ) ) (ssadd (vlax-vla-object->ename B) ss2) ) ) (vla-delete ss1) (sssetfirst nil ss2) (princ) ) Pour tester avant de lancer la commande ssasptt9, tu peux paramétrer tes variables comme ceci: (setq commune (getstring "Valeur à rechercher pour l'étiquette COMMUNE: ") numg (getstring "Valeur à rechercher pour l'étiquette NUMGEOREF: ") ) Cordialement,
  15. Bonsoir, Un code écrit à la volée (donc pas vraiment testé), le code si dessous permet de sélectionner les blocs, en fonction d’une ou plusieurs étiquettes d’attributs à sélectionner dans une liste de zone déroulante et en fonction de valeurs spécifiques (attention à la casse) pour les attributs spécifiés. ;; VDH-Bruno le: 28/05/2013 ;; ====================================================================== ;; Sélection des références de bloc en fonction des étiquettes d'attribut ;; et de leurs valeurs spécifiques. (defun c:ssEtVal (/ lstTagAtt tagAtt doc ss1 ss2 inclu-p inputval) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) ss2 (ssadd) ) ;; liste les noms des définition d'attribut de la table des blocs (vlax-for b (vla-get-Blocks doc) (if (and (= (vla-get-IsLayout B) :vlax-false) (= (vla-get-IsXref B) :vlax-false) (not (wcmatch (vla-get-Name B) "*|*")) ) (vlax-for o b (and (= (vla-get-ObjectName o) "AcDbAttributeDefinition") (not (member (setq tagAtt (vla-get-TagString o)) lstTagAtt)) (setq lstTagAtt (cons tagAtt lstTagAtt)) ) ) ) ) ;; Affiche la liste dans une zone de liste pour un choix multiples (setq lstTagAtt (listbox "Etiquettes des définitions d'attributs " "Sélectionnez les étiquettes à filtrer..." (mapcar 'cons (setq lstTagAtt (vl-sort lstTagAtt '<)) lstTagAtt) 2 ) ) ;; Valeurs à associer aux étiquettes correspondantes (defun inputval (l) (if l (cons (cons (car l) (getstring (strcat "Valeur à rechercher pour l'étiquette " (car l) ": ") ) ) (inputval (cdr l)) ) ) ) (cond ((setq lstTagAtt (inputval lstTagAtt)) ;; Définition de la zone de sélection (princ "\nSélectionnez les blocs ou <tout>: ") (or (ssget (list '(0 . "INSERT") '(66 . 1))) (ssget "_X" (list '(0 . "INSERT") '(66 . 1))) ) ;; Prédicat d'inclusion d'une liste l1 dans une autre liste l2 (defun inclu-p (l1 l2) (cond ((null l1) t) ((member (car l1) l2) (inclu-p (cdr l1) l2)) (t nil) ) ) ;; Filtrage de la sélection (vlax-for b (setq ss1 (vla-get-ActiveSelectionSet doc)) ;; vérifie que les critères de filtres liste (Tag .Val) sont compris dans le bloc (if (inclu-p lstTagAtt ;; Liste les couples (Tag .Val) de la référence de bloc (mapcar '(lambda (x) (cons (vla-get-TagString x) (vla-get-TextString x))) (vlax-invoke b 'GetAttributes) ) ) (ssadd (vlax-vla-object->ename B) ss2) ) ) (vla-delete ss1) (sssetfirst nil ss2) ) ) (princ) ) Les routines associés à charger avant la fonction principale ;;============================================================================;; ;; STR2LST ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1) (defun ListBox (title msg keylab flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list (mapcar 'cdr keylab)) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))) (setq choice (reverse choice))) (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab))))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) A+
  16. Bonjour salvanorigatore, Normalement, il n’y a rien à remplacer, j’ai juste ajouté des boîtes de dialogues au codes (via les routines de (gile)) qui t’avais été précédemment proposé, pour que tu n’aies justement plus qu’à cliquer tes données.. Charge tous les codes de mon post précédemment, puis tape CHANGE_ALL_INSERT_LAYER sur ta ligne de commande AutoCAD et là tout devrait normalement bien se passer, dans le cas contraire fait-le moi savoir, voir si je peux faire autre chose.. A+
  17. Bonjour, La fonction ssat dans Les LISP de (gile) sur la page suivante http://cadxp.com/index.php?/topic/14427-les-lisp-de-gile/ ne conviendrait –elle pas ? A+
  18. Merci de ton retour –Olivier-, à suivre effectivement.. Personnellement je suis sur AutoCAD 2007 sous seven 32 bit sans virtualisation (donc c’est pas ce qu’il y a de plus top comme type d’installe.. ) Ho, non !!! Ce n’est pas le genre de la maison, je propose après chacun prend/donne ce qu’il veut et comme il peut, c’est l’idée que je me fais du partage et de l’entre-aide… :) A+
  19. Re, Oui, tu as raison, cela ne vient pas de là, c’est plus simplement dû à une incompatibilité entre le mode transparent et l’usage de la fonction command dans les expressions lisp. D’ailleurs je m’étais déjà fait cette réflexion ici http://cadxp.com/index.php?/topic/35882-modifier-temporairement-l%e2%80%99affichage-des-lignes-discontinues-en-continues/page__view__findpost__p__195287 Pour s’en convaincre on peut s’appuyer sur la commande zoom, commande qui ne devrait pas porter à discussion quelque soit la version d’AutoCAD : Lancement de la commande ‘zoom en transparence à la ligne de commande Ok pas de problème, on a bien les chevrons du mode transparent d’activé dans les invite de commande Lancement de la commande ‘zoom en transparence depuis une expression lisp Erreur, le mode transparent ne s’active pas.. et c’est idem depuis une fonction lisp définit avec c :xxx. Et ta formulation suivante : (setvar "cmdecho" 1) (if (zerop (getvar "cmdactive")) (sssetfirst nil (ssget (if (> (car p1) (car p2)) "_C" "_W") p1 p2)) (command (if (> (car p1) (car p2)) "_Crossing" "_Window") p1 p2) ) (prin1) Est visuellement plus jolie au retour d’invite sur la ligne de commande AutoCAD, je conseillerai donc à Olivier de penser à un mixe des 2. ;) A+ Bruno
  20. Re, Oups, désolé une petite erreur de copié collé dans la fonction principal, que je viens de corriger dans le message précédent, pensez à la recharger..
  21. Bonjour salvanorigatore, A la lecture du post, ce que j’en ai retenu. Voici une version un peu plus « clef en main », des versions lisp qui t’ont été présenté.. Si j’ai un peu plus de temps (c’est pas gagné en ce moment) et si cela t’intéresse toujours, j’essaierai de répondre à tes questions sur l’emploie du lambda (qui est une fonction lisp anonyme qui se définie et s’appelle/exécute à l’endroit de sa définition). Le code (taper CHANGE_ALL_INSERT_LAYER sur la ligne de commande) : ;;;================= Fonction principale ==============================================;; ;;; Change toutes les références du bloc dans le calque spécifié. (defun c:change_all_insert_layer (/ nom_du_bloc nom_du_calque_ou_transferer_ton_bloc jeu_de_selection dxf_ent n) (and (setq nom_du_bloc (getblock "Référence de bloc à modifier")) (setq nom_du_calque_ou_transferer_ton_bloc (getlayer "Calque de destination")) (setq jeu_de_selection (ssget "_X" (list '(0 . "INSERT") (cons 2 nom_du_bloc)))) (repeat (setq n (sslength jeu_de_selection)) (setq dxf_ent (entget (ssname jeu_de_selection (setq n (1- n))))) (entmod (subst (cons 8 nom_du_calque_ou_transferer_ton_bloc) (assoc 8 dxf_ent) dxf_ent)) ) ) (princ) ) Les routines lisps associés (à charger avant la fonction principal): ;;============================================================================;; ;;; Getblock (gile) 03/11/07 ;;; Retourne le nom du bloc entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou depuis la boite ;;; de dialogue standard d'AutoCAD ;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc") (defun getblock (titre / bloc n lst tmp file what_next dcl_id nom) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst) ) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getblock:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un bloc\"") ) ";initial_focus=\"bl\";:boxed_column{ :row{:text{label=\"Sélectionner\";alignment=left;} :button{label=\">>\";key=\"sel\";alignment=right;fixed_width=true;}} spacer; :column{:button{label=\"Parcourir...\";key=\"wbl\";alignment=right;fixed_width=true;}} :column{:text{label=\"Nom :\";alignment=left;}} :edit_box{key=\"tp\";edit_width=25;} :popup_list{key=\"bl\";edit_width=25;}spacer;} spacer; ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getblock" dcl_id)) (exit) ) (start_list "bl") (mapcar 'add_list lst) (end_list) (if (setq n (vl-position (strcase (getvar "INSNAME")) (mapcar 'strcase lst) ) ) (setq nom (nth n lst)) (setq nom (car lst) n 0 ) ) (set_tile "bl" (itoa n)) (action_tile "sel" "(done_dialog 5)") (action_tile "bl" "(setq nom (nth (atoi $value) lst))") (action_tile "wbl" "(done_dialog 3)") (action_tile "tp" "(setq nom $value) (done_dialog 4)") (action_tile "accept" "(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)" ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0)) (setq what_next 1) (setq what_next 2) ) ) ((= what_next 4) (cond ((not (read nom)) (setq what_next 2) ) ((tblsearch "BLOCK" nom) (setq what_next 1) ) ((findfile (setq nom (strcat nom ".dwg"))) (setq what_next 1) ) (T (alert (strcat "Le fichier \"" nom "\" est introuvable.")) (setq nom nil what_next 2 ) ) ) ) ((= what_next 5) (if (and (setq ent (car (entsel))) (= "INSERT" (cdr (assoc 0 (entget ent)))) ) (setq nom (cdr (assoc 2 (entget ent))) what_next 1 ) (setq what_next 2) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) ;;============================================================================;; ;;; GetLayer (gile) 03/11/07 ;;; Retourne le nom du calque entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou en sélectionnant ;;; un objet à l'écran. ;;; Argument : le titre (string) ou nil (défaut : "Choisir un calque") (defun getlayer (titre / lay lst tmp file what_next dcl_id nom) (while (setq lay (tblnext "LAYER" (not lay))) (setq lst (cons (cdr (assoc 2 lay)) lst)) ) (setq lst (acad_strlsort lst) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getlayer:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un calque\"") ) ";initial_focus=\"tp\"; :boxed_column{:row{ :column{:text{label=\"Sélectionner un objet\";alignment=left;}} :column{:button{label=\">>\";key=\"obj\";alignment=right;fixed_width=true;} spacer;}} :edit_box{key=\"tp\";edit_width=25;allow_accept=true;} :popup_list{key=\"lay\";edit_width=25;} spacer;}ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getlayer" dcl_id)) (exit) ) (start_list "lay") (mapcar 'add_list lst) (end_list) (or nom (setq nom (vlax-ldata-get "getLayer" "n")) (setq nom (vlax-ldata-put "getLayer" "n" "0")) ) (if (member nom lst) (set_tile "lay" (itoa (- (length lst) (length (member nom lst)))) ) (set_tile "lay" "0") ) (set_tile "tp" nom) (action_tile "obj" "(done_dialog 3)") (action_tile "tp" "(setq nom $value)") (action_tile "lay" (strcat "(if (or (= $reason 1) (= $reason 4))" "(progn" "(setq nom (nth (atoi $value) lst))" "(set_tile \"tp\" (nth (atoi $value) lst))" "(mode_tile \"tp\" 2)))" ) ) (action_tile "accept" (strcat "(if (tblsearch \"LAYER\" nom)" "(progn (done_dialog 1)" "(vlax-ldata-put \"getLayer\" \"n\" nom))" "(progn" "(alert (strcat \"Le calque \" nom \" est introuvable.\"))" "(setq nom nil) (set_tile \"tp\" (vlax-ldata-get \"getLayer\" \"n\"))" "(mode_tile \"tp\" 2)))" ) ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (car (entsel))) (setq nom (cdr (assoc 8 (entget nom)))) (setq nom nil) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) Salutations Bruno
  22. Bonjour BonusCAD, Cela vient certainement du fait que la command "'_.-view" avec l’option "_restore" exécute une régénération de l’affichage ce qui exclut une utilisation en mode transparent. C’est un souci de même nature que j’avais rencontré ici http://cadxp.com/index.php?/topic/35882-modifier-temporairement-l%E2%80%99affichage-des-lignes-discontinues-en-continues/ avec la commande "'_.ltscale" bien que les conséquences étaient différente car il me lançait un Régénération en file d'attente. Empêchant la mise à jour de l’affichage par transparence. Pour avoir la commande en transparence, il possible d’adapter facilement ton code en substituant l’usage de la commande _.-view, via les variables viewctr, viewsize et la méthode vla-ZoomCenter. Le code : ;; Enregistre une sélection pendant en zoom effectue une sélection pendant ;; zoom. Avant ou pendant une commande AutoCAD. (defun c:selzoom (/ p1 p2 viewctr viewsize jsel) (vl-load-com) (setq viewctr (trans (getvar 'VIEWCTR) 1 0) viewsize (getvar 'VIEWSIZE) ) (initget 9) (setq p1 (getpoint "\n1er point?: ")) (initget 41) (setq p2 (getcorner p1 "\n2ème point?: ")) (vla-ZoomCenter (vlax-get-acad-object) (vlax-3d-point viewctr) viewsize) (setq jsel (ssget (if (> (car p1) (car p2)) "_C" "_W" ) p1 p2 ) ) (cond ((zerop (getvar "cmdactive")) (sssetfirst nil jsel) (princ)) (jsel) (T (princ)) ) ) A tester, A+ Bruno
  23. Re, Comme c’est une demande récurrente, ci-joint le fichier dwg avec cette fois la formule écrite dans la définition du bloc, et non plus dans sa référence (ce qui est préférable) ainsi qu’un document word avec les captures d’écran de mes manipulations (Désolé c’est sous AutoCAD 2007, j’ai pas de version plus récente…). Voilà pour tout ceux qui ont encore des difficultés avec les champs dynamique et les formules dans les définitions de blocs. A+ Bruno CROIXY.zip
  24. Bonjour, Quelque chose comme cela.. Dessin1.zip
  25. Effectivement bravo, j'avais pas vu avec prés d'1 minute derrière, j'étais vraiment bon dernier :D :D :D
×
×
  • 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é