-
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)
-
Comme le dit Jalna, si tu utilises Pline_Block, il faut faire un second tableau pour le totaux. J'ai ajouté un nouveau message au "mode d'emploi". Sinon, tu peux mettre directement des champs dans un tableau. Dans ce cas, les différents formats sont acceptés par les champs "Formule" (suffixes, facteurs de conversion etc...) http://img376.imageshack.us/img376/5875/tablo2pr6.png
-
Pour pouvoir faire des opérations dans un tableau AutocAD (ou Excel), les attributs "champs" ne doivent pas contenir de préfixe ni de suffixe. On peut ajouter suffixes et préfixes dans la définition du bloc Pline_Block sous forme de textes ou d'attributs fixes. Comme les modifications apportées au tableau d'extraction (fait avec EXTATTBE) seront perdues en cas de mise à jour des champs, il est préférable de faire un autre tableau (d'une seule rangée) dans lequel des champs "Formule" afficheront les résultats des totaux. http://img156.imageshack.us/img156/3919/tablogd9.png
-
Salut, Il faut d'abord sélectionner un objet (tous n'ont pas les mêmes propriétés) http://img295.imageshack.us/img295/4637/champ1sr7.png
-
Salut, Je ne pense pas qu'il s'agisse, à proprement parler, d'un "bug". Chez moi, ça fonctionne très bien : http://img230.imageshack.us/img230/6618/tollpalettesny7.png As-tu essayé une réparation ?
-
Je parlais d'une recherche dans les forums de CADxp : tu trouveras un sujet ici, un autre là, ou encore ici. Il n'y est pas dit qu'autoCAD ne supporte pas les doubles coeurs ou multitaches, mais qu'il ne les exploite pas, excepté pour les rendus et l'impression en tache de fond.
-
Je sais pas si j'ai bien compris la question première, mais je préfère proposer un truc de mon cru que modifier le LISP d'un autre. En espérant que ça répond à la demande, il s'agit d'un repère rapide dont le texte est la coordonnée Y de la pointe de la flèche. La "cote altimétrique" sera conforme au style de cote courant. (defun c:cotalt (/ pt qlst tlst) (entmake '((0 . "POINT") (10 0 0 0))) (setq pt (entlast)) (command "_.qleader" pause pause pause "" " " "") (setq qlst (entget (entnext pt)) tlst (entget (entlast)) ) (entmod (subst (cons 1 (rtos (caddr (assoc 10 qlst)) 2 (getvar "DIMDEC"))) (assoc 1 tlst) tlst ) ) (entdel pt) (princ) )
-
Salut, Jusqu'à 2007, toujours pas ... Fais une recherche avec core, coeur, duo ...
-
Ou encore, un petit LISP : (defun c:chp_aire (/ AcDoc Space obj ins) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (if (and (setq obj (car (entsel))) (member (cdr (assoc 0 (entget obj))) '("ARC" "CIRCLE" "ELLIPSE" "LWPOLYLINE" "REGION" "SPLINE") ) (setq ins (getpoint "\nSpécifiez le point d'insertion: ")) ) (vla-addMtext Space (vlax-3d-point ins) 0.0 (strcat "% (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))) ">%).Area \\f \"%lu2%pr2%ps[,m²]%ct8[1e-006]\">%" ) ) ) (princ) ) Pour le format des champs dynamiques, le plus simple est de créer un champ et de le formater selon ses désir puis de copier la syntaxe en bas de la boite de dialogue (Expression de champ). http://img67.imageshack.us/img67/5931/champll2.png Exemple pour une aire : %%).Area \\f \"%lu2%pr2%ps[aire = ,m²]%ct8[1e-006]\">% L'expression est séparée "en deux parties" par l'ID de l'objet sélectionné, elle le sera aussi dans le LISP par l'expression (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))). Il suffit donc de mettre entre guillemets chaque partie après avoir rajouté un "anti-slash" (\) devant chaque anti-slash et guillemet : "% (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))) ">%).Area [surligneur]\[/surligneur]\f [surligneur]\[/surligneur]"%lu2%pr2%ps[aire = ,m²]%ct8[1e-006][surligneur]\[/surligneur]">%" Le format du champ est contenu dans la "deuxième partie" : %lu2 : type d'unité (comme la variable système LUNITS) %pr2 : nombre de décimales (comme la variable système LUPREC) %ps[aire = ,m²] : préfixe (aire = ), sufixe (m²) %ct8[1e-006] : facteur de conversion (ici mm² en m²)
-
Oui, c'est possible :
-
Salut, ai_draworder est une commande définie en LISP dans : C:\Program Files\AutoCAD 2007\Support\acad2007doc.lsp Regarde si ce fichier existe bien, sinon la voici : ;;; Copyright (C) 1994 - 2006 by Autodesk, Inc. ;;; ;;; ;;; Enable Draworder to be called from a menu ;;; Checks for Pickfirst selected objects ;;; (defun ai_draworder (option / ss ) (setq m:err *error* *error* *merr*) (ai_sysvar '("cmdecho" . 0)) (if (setq ss (ssget "_I")) (command "_.draworder" option) (if (setq ss (ssget)) (command "_.draworder" ss "" option) ) ) (ai_sysvar NIL) (setq *error* m:err m:err nil) (princ) )
-
Salut Esbe, Regarde ce sujet.
-
Une version qui utilise les couleurs vraies (TrueColor) pour AutoCAD 2004 et postérieures. ;;; Versions 2004 et postérieures (defun GileActivePvp (Rea Lst / vp red green) (if (and (zerop (getvar "TILEMODE")) (= "CVPORT" (car Lst)) ) (progn (if *ActivePvpObject* (vla-put-TrueColor *ActivePvpObject* *PvpInitColor*) ) (setq vp (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (if (= (vla-get-Clipped vp) :vlax-true) (setq *ActivePvpObject* (vlax-ename->vla-object (cdr (assoc 340 (entget (vlax-vla-object->ename vp))) ) ) ) (setq *ActivePvpObject* vp) ) (setq *PvpInitColor* (vla-get-TrueColor *ActivePvpObject*)) (if ( (progn (setq release (substr (getvar "acadver") 1 2)) (foreach col '(red green) (set col (vla-getInterfaceObject (vlax-get-acad-object) (strcat "AutoCAD.AcCmColor." (substr (getvar "acadver") 1 2)) ) ) ) (vla-put-ColorIndex red acRed) (vla-put-ColorIndex green acGreen) (if (= :vlax-true (vla-get-DisplayLocked vp)) (vla-put-TrueColor *ActivePvpObject* red) (vla-put-TrueColor *ActivePvpObject* green) ) (vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport ) ) (progn (vla-put-TrueColor *ActivePvpObject* *PvpInitColor*) (setq *ActivePvpObject* nil) ) ) ) ) ) (defun c:avp_on () (vl-load-com) (if (not GileActivePvpReactor) (setq GileActivePvpReactor (vlr-Sysvar-reactor nil '((:vlr-sysVarChanged . GileActivePvp)) ) ) ) (princ "\nColoration de la fenêtre active : activée") (princ) ) (defun c:avp_off () (if GileActivePvpReactor (progn (if ( (vla-put-MSpace (vla-get-ActiveDocument (vlax-get-acad-object)) :vlax-false ) ) (vlr-remove GileActivePvpReactor) (setq GileActivePvpReactor nil) ) ) (princ "\nColoration de la fenêtre active : désactivée") (princ) ) [Edité le 6/12/2006 par (gile)]
-
Tranformer ligne2d / a des points 3d
(gile) a répondu à un(e) sujet de lovecraft dans Débuter en LISP
Salut, Je ne suis pas sûr d'avoir bien compris, mais tu peux essayer ce LISP. Il faut le lancer dans le SCG, en vue de dessus, zoom étendu, pour que les points correspondent avec l'extrémités des lignes. Taper TEST pour lancer la commande, on peut faire U pour annuler si ça ne convient pas. (defun c:test (/ ssline elst pt10 pt11 ss10 ss11) (vl-load-com) (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (command "_.undo" "_begin") (if (setq ssline (ssget "_A" '((0 . "LINE")))) (foreach line (mapcar 'cadr (ssnamex ssline)) (setq elst (entget line) pt10 (cdr (assoc 10 elst)) pt11 (cdr (assoc 11 elst)) ) (if (and (setq ss10 (ssget pt10 '((0 . "POINT")))) (setq ss11 (ssget pt11 '((0 . "POINT")))) ) (progn (setq elst (subst (assoc 10 (entget (ssname ss10 0))) (assoc 10 elst) elst ) elst (subst (cons 11 (cdr (assoc 10 (entget (ssname ss11 0))))) (assoc 11 elst) elst ) ) (entmod elst) (entupd line) ) ) ) ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (princ) ) -
C'est pour les fenêtres polygonales ou les fenêtres faites à partir d'objets, je récupère le polyligne ou l'objet ayant servi à faire la fenêtre, c'est lui que je colore. Bon, je vais me coucher, demain je dois me lever à l'aube ...
-
Je modifie ma routine en m'inspirant de la tienne (couleur d'origine différente de DUCALQUE) et de tes recommendations sur l'addition des réacteurs. À ce sujet, il me semble qu'on peut faire plus simple, je verrais ça plus tard.
-
J'ai un peu cherché, mais en dehors de read, je ne vois pas...
-
Une version un peu différente, avec un réacteur sur la variable système CVPORT. Les fenêtres de l'espace papier ne se colorent que quand on les active (en rouge si vérrouillée, en vert si déverrouillée). Taper avp_on pour activer le réacteur, avp_off pour le désactiver. Edit : correction d'un bug "visuel" ; quand on passait d'une fenêtre à une autre le contour ne s'affichait plus entrait fort. C'est réparé. Version pour AutoCAD 2002 et antérieures, pour les versions 2004 et plus voir plus bas. (defun GileActivePvp (Rea Lst / vp) (if (and (zerop (getvar "TILEMODE")) (= "CVPORT" (car Lst)) ) (progn (if *ActivePvpObject* (vla-put-Color *ActivePvpObject* *PvpInitColor*) ) (setq vp (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (if (= (vla-get-Clipped vp) :vlax-true) (setq *ActivePvpObject* (vlax-ename->vla-object (cdr (assoc 340 (entget (vlax-vla-object->ename vp))) ) ) ) (setq *ActivePvpObject* vp) ) (setq *PvpInitColor* (vla-get-Color *ActivePvpObject*)) (if ( (progn (if (= :vlax-true (vla-get-DisplayLocked vp)) (vla-put-color *ActivePvpObject* 1) (vla-put-color *ActivePvpObject* 3) ) (vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport ) ) (progn (vla-put-Color *ActivePvpObject* *PvpInitColor*) (setq *ActivePvpObject* nil) ) ) ) ) ) (defun c:avp_on () (vl-load-com) (if (not GileActivePvpReactor) (setq GileActivePvpReactor (vlr-Sysvar-reactor nil '((:vlr-sysVarChanged . GileActivePvp)) ) ) ) (princ "\nColoration de la fenêtre active : activée") (princ) ) (defun c:avp_off () (if GileActivePvpReactor (progn (if ( (vla-put-MSpace (vla-get-ActiveDocument (vlax-get-acad-object)) :vlax-false ) ) (vlr-remove GileActivePvpReactor) (setq GileActivePvpReactor nil) ) ) (princ "\nColoration de la fenêtre active : désactivée") (princ) ) [Edité le 4/12/2006 par (gile)][Edité le 4/12/2006 par (gile)][Edité le 5/12/2006 par (gile)] [Edité le 6/12/2006 par (gile)]
-
Salut, (setq str "(toto . Tête)\n(titi . grosminet)\n(coco . chanel)" ferm 0 ) (while (and (setq ouvr (vl-string-position (ascii "(") str ferm)) (setq ferm (vl-string-position (ascii ")") str ouvr)) ) (setq lst (cons (read (substr str (1+ ouvr) (- ferm ouvr -1))) lst)) ) (reverse lst)
-
Voilà une nouvelle version, - les fenêtres ne sont plus placées sur un calque spécifique - les fenêtres non verrouillées sont en orange (pour mettre tout le monde d'accord), les verrouillées en DUCALQUE. - le réacteur agit désormais sur les commandes FENETRES, -FENETRES, FDELIM et FMULT Reste que si le (dé)verrouillage se fait par la fenêtre des propriétés, il n'est pas pris en compte, je vais regarder du côté de vlr-object-reactor. Nouvelle version (18/12/06) Cette version utilise les couleurs de l'index (ACI), pour les versions AutoCAD 2004 et ultérieures, j'ai mis ici une version en couleurs vraies (True Color) (defun UpdVpColorList (obj) (if (member (assoc (vla-get-Handle obj) *GileVpColorList*) *GileVpColorList* ) (if (and (/= (vla-get-Color obj) 20) (not (eq (cdr (assoc (vla-get-Handle obj) *GileVpColorList*)) (vla-get-Color obj) ) ) ) (setq *GileVpColorList* (subst (cons (vla-get-Handle obj) (vla-get-Color obj) ) (assoc (vla-get-Handle obj) *GileVpColorList* ) *GileVpColorList* ) ) ) (setq *GileVpColorList* (cons (cons (vla-get-Handle obj) (vla-get-Color obj) ) *GileVpColorList* ) ) ) ) (defun UpdVpColor (obj / vp col) (cond ((= "VIEWPORT" (cdr (assoc 0 (entget obj)))) (setq vp (vlax-ename->vla-object obj)) ) ((= "VIEWPORT" (cdr (assoc 0 (entget (cdr (assoc 330 (entget obj)))))) ) (setq vp (vlax-ename->vla-object (cdr (assoc 330 (entget obj))) ) ) ) (T (setq vp nil)) ) (if vp (progn (setq obj (vlax-ename->vla-object obj)) (UpdVpColorList obj) (if (= (vla-get-DisplayLocked vp) :vlax-true) (vla-put-Color obj (cdr (assoc (vla-get-Handle obj) *GileVpColorList*)) ) (vla-put-Color obj 20) ) ) ) ) (defun GileVpColor (Rea Cde) (if (and (zerop (getvar "TILEMODE")) (member (car Cde) '("MVIEW" "VPCLIP" "VPORTS" "-VPORTS")) ) (vlax-for obj (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq obj (vlax-vla-object->ename obj)) (UpdVpColor obj) ) ) ) (defun c:vpc_On (/ ss) (vl-load-com) (if (setq ss (ssget "_X" '((410 . "~Model")))) (foreach obj (mapcar 'cadr (ssnamex ss)) (UpdVpColor obj) ) ) (if (not *GileVpColorReactor*) (setq *GileVpColorReactor* (vlr-command-reactor nil '((:vlr-commandEnded . GileVpColor)) ) ) ) (princ "\nColoration des fenêtres activée.") (princ) ) (defun c:vpc_Off (/ ss) (if *GileVpColorReactor* (vlr-remove *GileVpColorReactor*) ) (if (and *GileVpColorList* (setq ss (ssget "_X" '((410 . "~Model")))) ) (foreach obj (mapcar 'cadr (ssnamex ss)) (if (or (= "VIEWPORT" (cdr (assoc 0 (entget obj)))) (= "VIEWPORT" (cdr (assoc 0 (entget (cdr (assoc 330 (entget obj)))))) ) ) (progn (setq obj (vlax-ename->vla-object obj)) (vla-put-TrueColor obj (cdr (assoc (vla-get-Handle obj) *GileVpColorList*)) ) ) ) ) ) (setq *GileVpColorList* nil *GileVpColorReactor* nil ) (princ "\nColoration des fenêtres désactivée.") (princ) ) [Edité le 18/12/2006 par (gile)][Edité le 18/12/2006 par (gile)] [Edité le 19/12/2006 par (gile)]
-
Salut, Excuse moi, je n'avais pas vu passer ton message (apply 'mapcar (cons 'list '((X1 Y1 Z1) (X2 Y2 Z2) (X3 Y3 Z3)))) retourne ((X1 X2 X3) (Y1 Y2 Y3) (Z1 Z2 Z3)) C'est la routine trp attribuée à Doug Wilson Elle est utilisée, par exemple, juste au dessus dans les routines RCS2WCS et WCS2RCS pour transposer les matrices retournées par nentsel ou nentselp. ;; transpose une matrice Doug Wilson (defun trp (m) (apply 'mapcar (cons 'list m)) ) [Edité le 4/12/2006 par (gile)]
-
Je modifie le LISP, au lancement de VPC_ON, s'il déjà existe des fenêtres de présentation, elles sont placées sur le calque "Fenêtres présentations" et mises en couleur selon qu'elles sont verrouillées (rouge) ou déverrouillées (vert). Il en va de même pour les fenêtres créées ensuite, et les modifications de verrouillages. VPC_OFF remet toutes le fenêtres en couleur DUCALQUE.
-
En fait, j'ai mal expliqué comment ça fonctionne. Il ne s'agit pas de (dé)verrouiller des fenêtres, une fois le réacteur activé (et je pensais à une activation à l'ouverture du dessin) chaque fenêtre de l'espace papier créée est placée sur le calque "Fenêtre présentation" et s'affiche en rouge, quand on (dé)verrouille une ou plusieurs fenêtres elle changent de couleur.
-
J'ai aussi hésité, au début, j'avais mis les couleurs comme Bred le suggère, puis je me suis dis : "La vue verrouillée, c'est le feu vert pour le zoom en espace objet." Il suffit d'intervertir (vla-put-color obj 3) et (vla-put-color obj 1).
-
C'est Bonuscad qui m'en a donné l'idée ici. C'est Patrick_35 qui m'a motivé et largement inspiré. C'est mon premier LISP avec réacteur. Il s'agit d'un LISP qui place toutes les fenêtres de présentation sur un calque non tracé (Fenêtres présentation). Les fenêtres dont la vue n'est pas verrouillée sont rouges, celles qui sont verrouillées vertes. Pour activer le réacteur, taper VPC_ON, pour le désactiver, VPC_OFF (defun GileVpColor (Rea Cde / vp) (if (and (zerop (getvar "TILEMODE")) (= (car Cde) "-VPORTS") ) (vlax-for obj (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (cond ((= (vla-get-ObjectName obj) "AcDbViewport") (setq vp obj) ) ((= "VIEWPORT" (cdr (assoc 0 (entget (cdr (assoc 330 (entget (vlax-vla-object->ename obj)))) ) ) ) ) (setq vp (vlax-ename->vla-object (cdr (assoc 330 (entget (vlax-vla-object->ename obj)))) ) ) ) (T (setq vp nil)) ) (if vp (progn (vla-put-Layer obj "Fenêtres Présentation") (if (= (vla-get-DisplayLocked vp) :vlax-true) (vla-put-color obj 1) (vla-put-color obj 3) ) ) ) ) ) ) (defun c:vpc_On (/ acDoc lay) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) lay (vl-catch-all-apply 'vla-item (list (vla-get-Layers AcDoc) "Fenêtres Présentation") ) ) (if (vl-catch-all-error-p lay) (setq lay (vla-add (vla-get-Layers AcDoc) "Fenêtres Présentation")) ) (vla-put-Plottable lay :vlax-false) (if (setq ss (ssget "_X" '((410 . "~Model")))) (foreach obj (mapcar 'cadr (ssnamex ss)) (cond ((= "VIEWPORT" (cdr (assoc 0 (entget obj)))) (setq vp (vlax-ename->vla-object obj)) ) ((= "VIEWPORT" (cdr (assoc 0 (entget (cdr (assoc 330 (entget obj))))))) (setq vp (vlax-ename->vla-object (cdr (assoc 330 (entget obj))) ) ) ) (T (setq vp nil)) ) (if vp (progn (setq obj (vlax-ename->vla-object obj)) (vla-put-Layer obj "Fenêtres Présentation") (if (= (vla-get-DisplayLocked vp) :vlax-true) (vla-put-color obj 1) (vla-put-color obj 3) ) ) ) ) ) (if (not GileColorVpReactor) (setq GileColorVpReactor (vlr-command-reactor nil '((:vlr-commandEnded . GileVpColor)) ) ) ) (princ "\nColoration des fenêtres activée.") (princ) ) (defun c:vpc_Off () (if GileColorVpReactor (progn (vlr-remove GileColorVpReactor) (setq GileColorVpReactor nil) ) ) (if (setq ss (ssget "_X" '((410 . "~Model")))) (foreach obj (mapcar 'cadr (ssnamex ss)) (if (or (= "VIEWPORT" (cdr (assoc 0 (entget obj)))) (= "VIEWPORT" (cdr (assoc 0 (entget (cdr (assoc 330 (entget obj))))))) ) (progn (setq obj (vlax-ename->vla-object obj)) (vla-put-color obj 256) ) ) ) ) (princ "\nColoration des fenêtres désactivée.") (princ) ) [Edité le 3/12/2006 par (gile)]
-
Salut, Pour chaque message, il y a une entête : Si tu fais clic droit sur le 1 tu peux copier l'addresse du lien qui est celui de la réponse en question.
