-
Compteur de contenus
12 247 -
Inscription
-
Dernière visite
-
Jours gagnés
209
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par (gile)
-
Récupération point d\'insertion d\'un texte en lisp
(gile) a répondu à un(e) sujet de pixel61 dans Routines LISP
Salut, Pourrais tu préciser ce que tu entends par "ça ne marche pas" ou ce que tu veux faire avec ta ligne (souligner, surligner ?). Le point retourné par le code est le point d'insertion d'un texte multiligne (en haut à gauche) ou le premier point d'alignement d'un texte simple (en bas à gauche), celui qui se "grippe" quand on sélectionne le texte. -
Salut, une méthode ici
-
Si j'ai bien compris la question, il s'agit bien des types de lignes chargés dans le dessin AutoCAD actif (ActiveDocument) qui sont dans la liste déroulante du gestionnaire de calque, et ce sont bien les types de lignes de la collection LineTypes. À moins que tu veuilles récupérer tous les types de ligne du fichier acadiso.lin ?
-
Salut, Je ne connais pas le VBA, mais les types de ligne du dessin courant sont contenus dans la LineTypes Collection Object de l'ActiveDocument. En VisualLISP, pour récupérer la liste des types de ligne : (vlax-for lt (vla-get-LineTypes (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq lst (cons (vla-get-Name lt) lst)) )
-
Récupération point d\'insertion d\'un texte en lisp
(gile) a répondu à un(e) sujet de pixel61 dans Routines LISP
Salut et bienvenue, Le point d'insertion d'un texte (ou mtexte) est contenu dans le code de groupe 10 de la liste de données DXF de l'entité, la liste retournée par la fonction entget. Exemple : (if (and (setq ent (car (entsel))) ; Sélection d'une entité (wcmatch (cdr (assoc 0 (entget ent))) "*TEXT") ; Type d'entité : TEXT ou MTEXT ) (setq ins_pt (cdr (assoc 10 (entget ent)))) ; Point d'insertion ) [Edité le 17/9/2006 par (gile)] -
J'ai bien compris, mais comme, d'un autre côté, tu proposes d'affiner le filtre pour n'avoir que les blocs contenant des attributs non constants ...
-
Mais des attributs imbriqués ne sont plus éditables, ils sont comme des attributs constants, ou je me trompe ?
-
Voilà, ça devrait marcher (pas testé) On peut enlever les espaces après les "" mais c'est juste une question d'esthétique aucune incidence sur le fonctionnement. (defun c:b2xd (/ app jeu n blk e ent data etiq contenu exdata entblk newent) (setq app (getstring "\nSpécifiez le nom de l'application : ")) (if (or (not app) (= app "")) (setq app "B2XD") ) (regapp app) (prompt "\nSélectionnez les blocs ou ") (if (not (setq jeu (ssget '((0 . "INSERT"))))) (setq jeu (ssget "_X" '((0 . "INSERT")))) ) (if jeu (progn (setq n 0) (while (setq blk (ssname jeu n)) (setq e (entnext blk)) (setq ent (entget e)) (setq data nil) (while (/= "SEQEND" (cdr (assoc 0 ent))) (setq etiq (cdr (assoc 2 ent))) (setq contenu (cdr (assoc 1 ent))) (setq data (cons (cons 1000 (strcat etiq " " contenu)) data)) (setq e (entnext e)) (setq ent (entget e)) ) ; while (setq data (cons (cons 1002 "}") data)) (setq data (reverse data)) (setq data (cons (cons 1002 "{") data)) (setq exdata (list (list -3 (cons app data)))) (setq entblk (entget blk)) (setq newent (append entblk exdata)) (entmod newent) (setq n (1+ n)) ) ; while ) ; progn (alert "Pas de blocs") ) ; if jeu (princ) )
-
Fenêtre \"Personnaliser Interface Utilisateur\"
(gile) a répondu à un(e) sujet de FormaBois dans AutoCAD 2006
Salut, Je pense que CUI est l'acronyme de Customize User Interface, Personnaliser Interface Utilisateur en français. C'est aussi la commande qu'on peut taper au clavier (comme IUP) pour ouvrir la dite fenêtre. Et c'est l'extension du fichier de menu qui remplace le fichier .mns des versions 2005 et antérieures. Si cette nouvelle interface est définitivement moins commode que la précédente pour créer une nouvelle commande et surtout son icône, elle a des côtés pratiques pour modifier les menus déroulants et contextuels ou pour transférer des commandes d'un fichier de menu vers un autre par simple cliquer/déposer. -
Salut, Tu sélectionne ta ligne de coupe, puis clic droit pour afficher le menu contextuel. Dans le menu sélectionner "Générer une coupe 2D/3D ..." Dans la nouvelle boite de dialogue tu choisis "Elévation/coupe 2D" ou "Coupe 3D" puis Créer.
-
Des liens dans les messages !
(gile) a répondu à un(e) sujet de phil_vsd dans CADxp, comment ça marche?
Sinon, si tu utilises Firefox, tu trouveras un applicatif bien pratique ici, il s'agit d'un menu contextuel accessible avec un clic droit qui permet d'utiliser aisément la plupart des bbcodes, y compris "URL avec un nom" quand l'adresse est dans le presse papier. -
Tout bien réfléchi, l'idée du suffixe (m²) dans le champ, si elle peut paraître élégante, ne me semble pas si bonne (j'étais un peu fatigué hier soir). Les champs ne seront plus interprétés comme des données numériques et les opérations avec ces champs dans un tableau (Excel ou AutoCAD) ne seront plus possibles. Je pense qu'il est préférable de mettre le suffixe dans un attribut constant ou un objet texte du bloc, avec justification à droite pour l'attribut et le suffixe il est possible de faire quelque chose de présentable. Pour supprimer le suffixe, remplacer : ">%).Area \\f \"%lu2%pr2%ps[, m²]%ct8[0.0001]\">%" par ">%).Area \\f \"%lu2%pr2%ct8[0.0001]\">%" Les parties %lu2 et %pr2 concernent les unités et le nombre de décimales, comme dans les variables LUNITS et LUPREC (à 2 toutes les deux dans l'exemple). Il est aussi possible d'insérer le bloc suivant l'échelle globale des cotes courante (DIMSCALE) en remplaçant : (setq ref (vla-InsertBlock Space (vlax-3d-point ins) bloc 1.0 1.0 1.0 0.0 ) ) par : (setq ref (vla-InsertBlock Space (vlax-3d-point ins) bloc (getvar "DIMSCALE") (getvar "DIMSCALE") (getvar "DIMSCALE") 0.0 ) )
-
Tu veux dire ne pas essayer de les purger ? C'est tout à fait possible, le LISP le fait pour les noms de blocs commençant par * : "*Model_Space" "*Paper_Space" "*Paper_Space0" ... et les blocs anonymes *D10 *D9 ... Cependant, cela risaue d'enlever un peu de la polyvalence à la routine en interdisant, à celui qui l'utilise de faire des blocs avec des noms commençant par _. Il suffit de remplacer : ;; p_lst : liste des blocs à purger, soit les blocs de la collection ... ;; ... moins les blocs "*Model_Space" "*Paper_Space*" et les blocs insérées (setq p_lst (vl-remove-if '(lambda (x) (or (= (substr x 1 1) "*") (member x r_lst) ) ) c_lst ) ) par : ;; p_lst : liste des blocs à purger, soit les blocs de la collection ... ;; ... moins les blocs "*Model_Space" "*Paper_Space*" et les blocs insérées (setq p_lst (vl-remove-if '(lambda (x) (or (= (substr x 1 1) "*") [surligneur](= (substr x 1 1) "_")[/surligneur] (member x r_lst) ) ) c_lst ) ) En fait juste ajouter la ligne [surligneur]surlignée[/surligneur] [Edité le 14/9/2006 par (gile)]
-
Salut, Sauvegarde un profil utilisateur, tu ne devrais avoir que les chemins de recherche à re-spécifier
-
Pourrais-tu préciser s'il te plait, je me sers d'un test semblable pour définir l'espace actif dans des routines en vlisp : (setq Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-activedocument (vlax-get-acad-object)) ) (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)) ) ) ) Y aurait-il quelque chose qui m'ait échappé ?
-
Salut, Le LISP proposé par Patrick fonctionne comme ceux proposés ici à ceci près que l'objet créé est un simple champ. J'avais choisi du créer plutôt un bloc parcequ'au delà de la possibilité d'y inclure plusieurs champs on peut en faire par la suite une extraction. Ça doit être très up to date, un autre sujet ici. [Edité le 14/9/2006 par (gile)]
-
Salut, Tu peux t'inspirer de ce LISP, qui trie bloc et xrefs et renseigne sur leur état dans le dessin courant. C'est le code de groupe DXF 1 qui te renseigne s'il s'agit d'une xref (son chemin), ce code n'existe pas pour les blocs. Tu verras au début du LISP : (if (assoc 1 bl) ;_xref (setq xref T x_lst (cons name x_lst) ) (setq xref nil) )
-
Si les champs sont des attributs de blocs, pourquoi pas une extraction dans un tableau AutoCAD ?
-
Salut Jalna, Tu trouveras ici un LISP qui devrait répondre à ta demande.
-
Pour Jalna et ceux qui veulent afficher l'aire de la polyligne dans une unité différente de l'unité choisie pour dessiner. Dans l'exemple suivant l'unité de dessin est le centimètre, l'unité pour le champ est le m². un suffixe est aussi ajouté : " m²" Le bloc doit avoir ic 2 attributs : nom de la pièce et aire. Chacun pourra adapter la routine à ces besoins en modifiant les parties [surligneur]surlignées[/surligneur]. ;;; Pline_bloc -Gilles Chanteau- 13/09/06 ;;; Insère le bloc "pline_block" après sélection d'une polyligne ;;; Attribut 1 : Nom de la pièce ;;; Attribut 2 : Aire de la polyligne (defun c:pline_block (/ AcDoc Space bloc nom ent aire long ins) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((tblsearch "BLOCK" (setq bloc "Pline_block"))) ((findfile (setq bloc "Pline_block.dwg"))) (T (setq bloc nil)) ) (if bloc (progn (while (not (setq ent (car (entsel))))) (if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (progn (setq obj (vlax-ename->vla-object ent) id (vla-get-ObjectID obj) aire (strcat "% (itoa id) ">%).Area \\f \"%lu2%pr2%ps[, [surligneur]m²[/surligneur]]%ct8[[surligneur]0.0001[/surligneur]]\">%" ) ) (initget 1) (setq nom (getstring T "\nNom de la pièce: ")) (initget 1) (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq ref (vla-InsertBlock Space (vlax-3d-point ins) bloc 1.0 1.0 1.0 0.0 ) ) (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom aire) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"Pline_block\" est introuvable.") ) (princ) ) [Edité le 13/9/2006 par (gile)]
-
C'est normal en VisualLISP les fonction ActiveX sont utilisées comme en VBA. Le problème vient du bloc "_OBLIQUE" et de la dernière modification apportée au LISP. Il est considéré comme référencé par AutoCAD et donc non purgeable, d'où pas d'erreur avec la commande purge ou (vla-purgeall). Dans le LISP pour savoir si un bloc est référencé, je fais une sélection sur tout le dessin en filtrant avec le nom de chaque bloc de la collection, si, pour un nom de bloc, le jeu de sélection est vide, le bloc est considéré comme non-référencé (ce qui me semble logique). C'est le cas pour ce bloc "_OBLIQUE", d'où le message d'erreur.
-
Salut, J'ai un peu testé, et j'ai eu un problème avec le filtre de sélection. Ça vient du code 67, je pense qu'il est préférable de tester la variable cvport avec 1 (espace papier) parce que s'il y a plusieurs fenêtres dans l'espace objet cvport peut être à 2, 3, 4, etc... J'ai donc remplacé cette partie dans le filtre de sélection par : (cons 67 (if (eq (getvar "CVPORT") 1) 1 0 ) )
-
Salut, (if (setq ent (car (entsel))) (if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") ;... ;... ) )
-
Si tu veux ajouter un (ou des) nouveau(x) alias dans le fichier AutoCAD.pgp via un LISP tu peux faire (en modifiant le chemin bien sûr) : (setq pgp (open "C:\\Documents and Settings\\Gile\\Application Data\\Autodesk\\AutoCAD 2007\\R17.0\\fra\\support\\acad.pgp" "a")) (princ "\nSP, *SPURGE" pgp) (close pgp) (setvar "RE-INIT" 16)
-
Je ne comprends pas où tu veux en venir exactement, mais essaye (c:overkill).
