Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. (gile)

    Pb de dongle

    N'ayant jamais utilisé de versions d'AutoCAD antérieure à 2002, je n'ai jamais eu à utiliser de dongle, c'est pouquoi j'ai naïvement suggéré l'utilisation d'un adaptateur, au temps pour moi.
  2. (gile)

    Pb de dongle

    Salut et bienvenue, À part un adaptateur USB/Parallèle, je ne vois pas.
  3. J'ai complété le LISP, il fonctionne désormais aussi bien avec les polylignes 2D et 3D, les arcs, les largeurs de ligne, le point de départ des polylignes fermées, ainsi que toutes les autres propriétés sont conservés. J'ai réparé un dysfonctionnement avec la courbure et la largeur du dernier segment des lwpolylignes.
  4. (gile)

    Distances cumulées

    La routine de Tramber respecte scrupuleusement tes données : elle te donneras la distance du début de la polyligne au point spécifié. Si tu veux la distance de la fin de la poly au point sélectionné, il faudra inverser les sommets. Ou, plus simple, sélectionner 2 sommets pour avoir la distance entre les deux : (defun c:di2pt (/ obj) (setq obj (vlax-ename->vla-object (car (entsel "\nSélectionnez la polyligne: ")) ) ) (princ (vl-princ-to-string (abs (- (vlax-curve-getDistAtPoint obj (vlax-curve-getClosestPointTo obj (getpoint "\n Premier point: ") ) ) (vlax-curve-getDistAtPoint obj (vlax-curve-getClosestPointTo obj (getpoint "\n Second point: ") ) ) ) ) ) ) (princ) ) [Edité le 13/7/2006 par (gile)]
  5. Attention SEQEND ! pas SEQUEND ! D'ailleurs je me demande pourquoi j'ai mis ce test sur SEQEND (copier/coller sans réfléchir !) il est ici parfaitement inutile. :casstet: Il suffit d'écrire (while Ent_ss_Bloc ...) [Edité le 13/7/2006 par (gile)]
  6. Un petit LISP qui liste tous les blocs et xrefs du dessin courant et, pour chacun, indique s'il est : - non référencé - déchargé (xref) ou vide (bloc) - introuvable (xref) ;;; BLOCS Retourne dans la fenêtre de texte un état de tous les blocs et xrefs du dessin courant ;;; Ignore les blocs anonymes et les blocs imbriqués dans les xrefs. (defun c:blocs (/ bl xref name x_lst b_str x_str) (setq x_str "" b_str "" bl (tblnext "block" T) ) (while bl (setq name (cdr (assoc 2 bl))) (if (assoc 1 bl) ;_xref (setq xref T x_lst (cons name x_lst) ) (setq xref nil) ) (if (and (not (and (vl-string-position (ascii "|") name) ;_ bloc imbriqué dans une xref (member (substr name 1 (vl-string-position (ascii "|") name)) x_lst ) ) ) (not (= (substr name 1 1) "*")) ;_ bloc anonyme ) (progn (if xref (setq x_str (strcat x_str "\n- " name)) (setq b_str (strcat b_str "\n- " name)) ) (if (not (ssget "_X" (list '(0 . "INSERT") (assoc 2 bl) ) ) ) (if xref (setq x_str (strcat x_str " Non référencé ")) (setq b_str (strcat b_str " Non référencé ")) ) ) (if (= (cdr (assoc 0 (entget (cdr (assoc -2 bl))))) "ENDBLK") (if xref (setq x_str (strcat x_str " Déchargé ")) (setq b_str (strcat b_str " Vide ")) ) ) (if (and xref (not (findfile (cdr (assoc 1 bl)))) ) (setq x_str (strcat x_str " Introuvable ")) ) ) ) (setq bl (tblnext "block")) ) (if (/= b_str "") (princ (strcat "\n\n\tBlocs : \n" b_str)) ) (if (/= x_str "") (princ (strcat "\n\n\tRéférences externes : \n" x_str)) ) (textscr) (princ) ) [Edité le 13/7/2006 par (gile)]
  7. Voilà ce que pourrait donner ton code pour récupérer les blocs imbriqués de tous niveaux et retourner le résultat dans la boite de message : (defun c:Bloc_Explorer (/ sel list_Bloc_Imb Ent_SS_Bloc List_Final Nb n) (while (not (setq sel (ssget "_:S" '((0 . "INSERT")))) ) ) ;;*****************************************************;; ;; boucle pour récupérer toutes les imbrications de blocs (setq list_Bloc_Imb (list (cdr (assoc 2 (entget (ssname sel 0))))) n_lst 0 ) (while (setq Nom_Bloc (nth n_lst list_Bloc_Imb)) (setq Ent_bloc (tblsearch "BLOCK" Nom_Bloc) Ent_SS_Bloc (cdr (assoc -2 Ent_bloc)) ) (while (and Ent_ss_Bloc (/= (cdr (assoc 0 (entget Ent_ss_Bloc))) "SEQEND") ) (if (= (cdr (assoc 0 (entget Ent_ss_Bloc))) "INSERT") (setq list_Bloc_Imb (append list_Bloc_Imb (list (cdr (assoc 2 (entget Ent_ss_Bloc)))) ) ) ) (setq Ent_SS_Bloc (entnext Ent_SS_Bloc)) ) (setq n_lst (1+ n_lst)) ) ;;*****************************************************;; (setq List_Final (list (car list_Bloc_Imb)) list_Bloc_Imb (vl-remove (car list_Bloc_Imb) list_Bloc_Imb) ) (While (not (null list_Bloc_Imb)) (setq Nb 0) (foreach n list_Bloc_Imb (if (apply 'eq (list n (car list_Bloc_Imb))) (setq Nb (+ 1 Nb)) ) ) (setq List_Final (append List_Final (list (strcat (rtos Nb) " x " (car list_Bloc_Imb) "\n" ) ) ) ) (setq list_Bloc_Imb (vl-remove (car list_Bloc_Imb) list_Bloc_Imb)) ) ;; Alert ;;*****************************************************;; (alert (strcat "\n---------------------------------------\n Blocs imbriqués dans " (car List_Final) " : \n" (apply 'strcat (mapcar '(lambda (x) (strcat "\n" x)) (cdr List_Final)) ) ) ) ;;*****************************************************;; (prin1) )
  8. Salut, Je te repasse un lien que m'avait donné Tramber : un LISP nommé NESTED sur cette page. De mon côté, pour récupérer tous les blocs imbriqués, j'ai fait une boucle sur une liste blocs qui, pour chaque bloc de la liste, cherchait dans les composant du bloc s'il y en avait un (ou des) autre(s), et si c'est la cas, ajoute le nom du bloc à la fin de la liste où il est traité à son tour. Pour (alert ...) tu peux faire : (alert (strcat "\n---------------------------------------\n Blocs imbriqués dans " (car List_Final) " : \n" (apply 'strcat (mapcar '(lambda (x) (strcat "\n" x)) (cdr List_Final)) ) ) )
  9. Salut et bienvenue, Je ne pense pas que les différents comportements viennent de la vue (ortho ou iso) mais plutôt de la valeur du zoom. En fait le problème vient desaccrochage aux objets permanents (variable OSMODE). Par principe toute routine LISP qui utilise command pour créer des objets graphiques devrait contenir la désactivation des accrochages aux objets. La méthode la plus courament utilisée consiste en récupérer la valeur initiale de OSMODE en début de routine, mettre OSMODE à 0, faire tous les command et enfin restaurer sa valeur initiale à osmode. (defun cucube (cp0 cp7 / os) (setq os (getvar "OSMODE")) (setvar "OSMODE" 0) (setq cp1 (list (car cp0) (cadr cp7) (caddr cp0))) (setq cp2 (list (car cp7) (cadr cp0) (caddr cp0))) (setq cp3 (list (car cp7) (cadr cp7) (caddr cp0))) (setq cp4 (list (car cp0) (cadr cp0) (caddr cp7))) (setq cp5 (list (car cp0) (cadr cp7) (caddr cp7))) (setq cp6 (list (car cp7) (cadr cp0) (caddr cp7))) (command "_line" cp0 cp1 "") (command "_line" cp1 cp3 "") (command "_line" cp3 cp2 "") (command "_line" cp2 cp0 "") (command "_line" cp0 cp4 "") (command "_line" cp1 cp5 "") (command "_line" cp2 cp6 "") (command "_line" cp3 cp7 "") (command "_line" cp4 cp5 "") (command "_line" cp5 cp7 "") (command "_line" cp7 cp6 "") (command "_line" cp6 cp4 "") (setvar "OSMODE" os) )
  10. (gile)

    Evaluation

    Salut, J'avais trouvé ça sur le net : Une évaluation AutoCAD et une évaluation AutoLISP, elle sont pas terribles (à mon avis) et quelque soit ton résultat, ils te proposent une formation, bien sûr ! Sinon, je me souviens que Christian (Rebcao) en avait proposée une, ici même, bien mieux foutue, que dans sa grande générosité il corrigeait lui même (je ne la retrouve plus).
  11. Salut, Par exemple pour faire un cercle au milieu d'un rectangle avec REPEROBJ, à la demande "Spécifier le centre du cercle ...", on place le curseur sur l'accrochage aux objets (milieu) d'un côté, puis d'un autre, les deux lignes de repère permettent de spécifier le centre du cercle à leur intersection. REPEROBJ fonctionne avec les accrobj permanents et les lignes de repère dépendent de l'angle d'incrémentation paramétré dans le repérage polaire. http://img86.imageshack.us/img86/4125/reperobj9lk.png
  12. Salut, Pour récupérer des blocs contenus dans la collection d'un autre dessin, tu peux les faire glisser dans le dessin courant depuis le DesignCenter (CTRL+2).
  13. Et c'est un euphémisme, mais ma routine conserve les arcs et les largeurs (codes 40 41 42), ceci doit expliquer cela. ;) J'ai scindé le LISP (tout en haut) en deux routines : - reverse_pline : une routine qui peut être appelée depuis un LISP et dont l'argument doit être le nom d'entité (ename) d'une lwpolyligne. - r_pline : une commande qui demande à l'utilisateur de sélectionner une polyligne et lance reverse_pline si l'entité est valide.
  14. (gile)

    mesurer une polyligne

    J'ai peut-être été un peu vite. Si la polyligne est fermée, il faut effectivement inverser l'ordre des sommets. Un petit LISP ici.
  15. Une petite routine qui inverse les sommets d'une polyligne. Toutes les proptiétés sont conservées (arcs, largeurs, couleur, calque, type de ligne ...) NOUVELLE VERSION Accepte les polylignes 2D, 3D ou optimisées (lwpolyline) ;;; R_PLINE -Gilles Chanteau- ;;; Inverse l'ordre de sommets d'une polyligne (2D, 3D ou optimisée) ;;; Toutes les propriétés de la polyligne sont conservées (arcs, largeurs ...) ;; Inverse l'ordre de sommets d'une lwpolyligne, d'une polyligne 2D ou 3D (defun reverse_pline (ent / e_lst vtx v_lst p_lst l_vtx) (setq e_lst (entget ent)) (cond ((= (cdr (assoc 0 e_lst)) "POLYLINE") (setq vtx (entnext ent)) (while (= (cdr (assoc 0 (entget vtx))) "VERTEX") (setq v_lst (cons (entget vtx) v_lst) vtx (entnext vtx) ) ) ) ((= (cdr (assoc 0 e_lst)) "LWPOLYLINE") (setq p_lst (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42)) ) e_lst ) e_lst (vl-remove-if '(lambda (x) (member x p_lst) ) e_lst ) ) (while p_lst (setq v_lst (cons (list (car p_lst) (cadr p_lst) (caddr p_lst) (cadddr p_lst)) v_lst ) p_lst (member (assoc 10 (cdr p_lst)) (cdr p_lst)) ) ) ) ) (setq l_vtx (last v_lst) l_vtx (subst (cons 40 (cdr (assoc 41 (car v_lst)))) (assoc 40 l_vtx) l_vtx ) l_vtx (subst (cons 41 (cdr (assoc 40 (car v_lst)))) (assoc 41 l_vtx) l_vtx ) l_vtx (subst (cons 42 (- (cdr (assoc 42 (car v_lst))))) (assoc 42 l_vtx) l_vtx ) ) (setq v_lst (mapcar '(lambda (x y) (setq x (subst (cons 40 (cdr (assoc 41 y))) (assoc 40 x) x) x (subst (cons 41 (cdr (assoc 40 y))) (assoc 41 x) x) x (subst (cons 42 (- (cdr (assoc 42 y)))) (assoc 42 x) x) ) ) v_lst (cdr v_lst) ) ) (if (= (logand 1 (cdr (assoc 70 e_lst))) 1) (setq v_lst (append (list l_vtx) v_lst)) (setq v_lst (append v_lst (list l_vtx))) ) (cond ((= (cdr (assoc 0 e_lst)) "POLYLINE") (mapcar 'entmake (append (list e_lst) v_lst (list (entget vtx))) ) (entdel ent) ) ((= (cdr (assoc 0 e_lst)) "LWPOLYLINE") (setq e_lst (append e_lst (apply 'append v_lst))) (entmod e_lst) ) ) ) ;;; R_PLINE Fonction d'appel (defun c:r_pline (/ ent) (while (not (setq ent (car (entsel))))) (if (or (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (and (= (cdr (assoc 0 (entget ent))) "POLYLINE") (zerop (logand 240 (cdr (assoc 70 (entget ent))))) ) ) (reverse_pline ent) (prompt "\nEntité non valide") ) (princ) ) [Edité le 12/7/2006 par (gile)] [Edité le 16/7/2006 par (gile)]
  16. (gile)

    Bug très étrange

    Une petite précision, Item Method retourne une erreur si le bloc n'est pas présent dans la collection. Je ne sais pas si des fonction équivalentes existent en VBA, mais en vlisp on peut passer par un (if (vl-catch-all-error-p (vl-catch-all-apply ...)) ...) : (vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (getpoint "\nInsertion: ")) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)) ) "Logo" ) ) ) "F:\\D.A.O\\Blocs\\Logo.dwg" "Logo" ) 1 1 1 0 )
  17. Salut, avec un peu de programmation on arrivait à quelque chose d'approchant, voir ici. Mais là j'avoue ne pas bien avoir compris comment tu avais procédé (extrusion ou balayage ou lissage ?). En tout cas, c'est réussi, bravo. [Edité le 12/7/2006 par (gile)]
  18. (gile)

    Bug très étrange

    Salut, Je ne connais pas le VBA mais j'ai essayé un code similaire en vlisp sur AutoCAD 2007 : (vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (getpoint "\nInsertion: ")) "F:\\D.A.O\\Blocs\\Logo.dwg" 1 1 1 0 ) pas de problème, le bloc s'insère à chaque fois. Mais ça m'a donné un idée, tester si le bloc est déjà dans la collection du dessin, et si oui essayer de l'insérer depuis la collection en spécifiant uniquement son nom. Je ne sais pas comment on l'écrirait en VBA, mais en vlisp ça serait quelque chose comme çà : (setq pt (getpoint "\nInsertion: ")) (vla-insertblock (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (getpoint "\nInsertion: ")) [surligneur](if (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) "Logo") "Logo" "F:\\D.A.O\\Blocs\\Logo.dwg" )[/surligneur] 1 1 1 0 ) En relisant plus attentivement, je m'aperçois que mon idée ne fait que préciser ce qui est suggéré plus haut. [Edité le 11/7/2006 par (gile)]
  19. (gile)

    XYZ

    Salut, Peut-être ici ?
  20. Salut, Tu peux décomposer la région, et si tu veux une poly 3D, la faire avec le LISP join3dpoly.
  21. Salut, Tu trouveras des renseignements concernant l'utilisation de CADxp et notament des bbcodes dans Menu principal >> Les ressources >> CADxp, le site. Si tu n'as pas de pages perso, tu peux utiliser les services de xs.to ou de ImageShack. Il est préférable de ne pas poster des images de plus de 600 pixels de large. Tu peux redimensionner tes images avec la balise (bbcode) : (img=600x400). Je te conseille de faire des essais dans le Forum test qui est fait pour ça.
  22. (gile)

    mesurer une polyligne

    Salut, Il suffit, au moment du "Choix de l'objet à mesurer: " de cliquer sur la polyligne du côté de l'autre extrémité.
  23. (gile)

    Traiter une selection

    Salut, Tu peux voir aussi ce sujet
  24. Salut, Puisque c'est le filtre ssget qui beugue, il suffit de contourner le problème en ne filtrant pas les entités sur la présence du groupe 102 et en testant cette présence dans la boucle : ((lambda (/ f_m Couleur Index) (while (null (setq f_m (ssget '((0 . "VIEWPORT,*POLYLINE,SPLINE,ELLIPSE,CIRCLE,REGION")) ) ) ) ) (setq Couleur 1) (if f_m (repeat (setq Index (sslength f_m)) (setq ent (ssname f_m (setq Index (1- Index)))) (if (or (= (cdr (assoc 0 (entget ent))) "VIEWPORT") (= (cdr (assoc 102 (entget ent))) "{ACAD_REACTORS") ) (vla-put-color (vlax-ename->vla-object ent) Couleur ) ) ) ) (princ) ) )
  25. (gile)

    BALLON

    Salut, Tu peux déjà voir ce sujet.
×
×
  • 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é