Aller au contenu

Bred

Membres
  • Compteur de contenus

    2 764
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Bred

  1. OK, je comprends. En fait, COVADIS aurait dû te proposer dans la liste de ton "assistant" une "copie" du dernier point avant le premier.... (en laissant le dernier point où il est), afin d'extrapoler le premier point entre le dernier et le second....
  2. Bred

    Coord. points

    Merci (gile), ça à l'air d'être ça ! :D - je teste en profondeur !
  3. Bred

    Coord. points

    Salut, J'essaye de créer une routine permettant de simplifier le calcul de coordonnée par rapport à un point et une direction (pas forcément parrallèlle au SCG).... et je n'y arrive abolument pas !!! Exemple : Je connais 2 points (rouges), je sais calculer les coordonnées d'un point (vert) entre ces 2 points en donnant une distance à partir d'un des points (routine ici.) A partir de ce dernier point, je voudrais trouver les coordonnées des 4 angles du rectangles (celui-ci étant perpendiculaire à l'axe formé par les 2 points...et je connais si besoin les coordonnées des 4 points si ceux-ci était basés par rapport à l'origine, et parrallèle au SCG - ex: (0 0.1 0) (0 0.1 0.4) (0 -0.2 0.4) (0 -0.2 0)) http://images.imagehotel.net/4e17157545.jpg ... merci d'avance pour vos idées et propositions !
  4. Bred

    Quelques routines utiles

    Salut (gile), je me suis fait une petite routine retournant les coordonnées d'un point par rapport à une distance, entre 2 points données : un "polar", mais en 3D. Je me suis servis comme base de ton "mid_pt", et je te la livre à la critique (et test) ici : (defun polar3D (p1 p2 Lg) (mapcar '(lambda (x1 x2) (+ (/ (* Lg (- x2 x1)) (distance p1 p2)) x1)) p1 p2) )
  5. Bred

    aligner text ou blocs sur ligne

    Salut, un premier jet "Brouillon" pour les texte sur une ligne (j'approndirais quand je pourrais) ;;; MID_PT Retourne le milieu de deux points (gile) (defun mid_pt (p1 p2) (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2)) p1 p2) ) (defun c:txt-ligne (/ ANGL-L L PT-MIL TX) (setq l nil tx nil) (princ "\n Choisir Ligne :") (while (not l) (setq l (ssget "_:S:E" '((0 . "LINE"))))) (setq l (entget (ssname l 0))) (setq angl-l (angle (cdr (assoc 10 l)) (cdr (assoc 11 l)))) (setq pt-mil (mid_pt (cdr (assoc 10 l)) (cdr (assoc 11 l)))) (princ "\n Choisir Texte à aligner :") (while (not tx) (setq tx (ssget "_:S:E" '((0 . "MTEXT"))))) (setq tx (entget (ssname tx 0))) (setq tx (entmod (subst (cons 71 8) (assoc 71 tx) tx)) tx (entmod (subst (cons 50 angl-l) (assoc 50 tx) tx))) (entmod (subst (cons 10 pt-mil) (assoc 10 tx) tx)) (princ) ) ------------------------- ah, Kallain m'a doublé.... [Edité le 8/3/2007 par Bred]
  6. en rajoutant les messages de nombre de bloc traités (si il y en a) Mais je ne traite pas les attributs, comme Ludwig. (defun c:expbs (/ N NB X) (while (setq n (ssget "_X" '((0 . "INSERT")))) (setq x 0 nb 0) (repeat (sslength n) (vla-explode (vlax-ename->vla-object (ssname n x))) (vla-delete (vlax-ename->vla-object (ssname n x))) (setq nb (+ (sslength n) nb)) (setq x (+ x 1))) ) (if nb (princ (strcat "\n" (rtos nb) "bloc(s) explosé(s) dans le plan")) (princ "\n pas de blocs dans le plan")) (princ) )
  7. Salut, le problème à déjà été non résolus ici ! :mad:
  8. Test si bloc (et en vl) : (defun c:expb ( / x n) (if (setq n (ssget "_X" '((0 . "INSERT")))) (progn (setq x 0) (repeat (sslength n) (vla-explode (vlax-ename->vla-object (ssname n x))) (vla-delete (vlax-ename->vla-object (ssname n x))) (setq x (+ x 1))) ) (princ "\n Pas de bloc dans le dessin.") ) (princ) ) pour le 1, c'est faisable, je te le fait dès que j'ai le temps.
  9. Le code ci-dessus explosais TOUS les blocs identique au premier sélectionné. pour exploser tous les blocs : (defun c:expTb ( / x n) (setq x 0) (repeat (sslength (setq n (ssget "_X" '((0 . "INSERT"))))) (command "_explode" (ssname n x)) (setq x (+ x 1)) ) (princ) )
  10. Salut, je ne sais pas si tu peux utiliser "selection rapide" dans un script bouton : cela ouvre forcément une fenêtre. Cela est réalisble en lisp par contre (si ça t'interresse) (defun c:expb ( / b x n) (while (not b) (setq b (ssget "_:S:E" '((0 . "INSERT")))) ) (setq x 0) (repeat (sslength (setq n (ssget "_X" (list (assoc 2 (entget (ssname b 0))))))) (command "_explode" (ssname n x)) (setq x (+ x 1)) ) (princ) ) [Edité le 7/3/2007 par Bred]
  11. Salut, Oubli le contrôle des unités : dans Autocad, en espace objet, tu dessines en Unité. Si tu veux faire un trait d'un mètre, tu peux faire un trait de 1 (m), ou de 100 (cm), etc.... (personnellement, 1mètre = 1 unité) A toi de rester cohérent pout tout le reste du plan. Après, pour ce qui est de la cotation par exemple, en espace objet tu modifies le style de cote pour qu'elle s'affiche comme tu le désires, dans l'untité voulus... [Edité le 7/3/2007 par Bred]
  12. Bred

    effacer des objets par script !

    Salut, Pas testé, mais je pense que c'est un problème de zoom : si les objets ne sont pas affiché à l'écran, ça ne fonctionne pas : rajoute un "_zoom;_all" dans ton script
  13. Ben.... je ne comprends pas.... vous ne travaillez pas avec ce genre d'Ecran ??? ;) Demandez à votre patron !... Personnellement il me l'a promis, mais il me dit qu'il a un problème de camion pour me le livrer !... (comment ça, "naïf" ?)
  14. Re, Il y a quelque chose qui m'échappe là, je dois me tromper, car pour moi, une "LWPOLYLIGNE" ne peut avoir qu'une seule altitude (Z) pour tout ces sommets, et c'est ce que traite le lisp de (gile). Par contre, une "POLYLIGNE" (dites "3D") peut avoir des sommets de valeurs Z différent, mais le premier point peut se déplacer sur les Z comme on le désire.... ...non ? :casstet:
  15. Bred

    Layer dans les blocs

    Salut, tu peux utiliser le lisp de (gile) edit_bloc ici !
  16. Donc c'est bien exactement ce que tu expliquais.... Mais pourrais-tu m'expliquer quel en est l'utilité ? merci
  17. Salut, Tu cherches à faire quoi, exactement ? pour info, tu peux extraire tous les sommets d'une lwpolyligne avec ça : (setq ent (entget (car (entsel "\n choisir lwpolyligne :")))) (foreach n ent (if (equal (car n) 10) (setq lst (append lst (list (cdr n)))))) (la liste des coordonnées se trouvant dans lst) ... si tu cherches à modifier les coordonnées du premier point, tu peux faire un (setq nvlle-coord '(0 0)) (entmod (subst (cons 10 nvlle-coord) (assoc 10 ent) ent)) par contre, ... je ne comprends pas.... [Edité le 1/3/2007 par Bred]
  18. C'est noté, merci (gile). (defun c:bt2 (/ BLK LST N NBT P SS) (setq ss (ssget) p (getpoint)) (setq NBT (strcat "BLOC - " (itoa (fix (* (getvar "TDUSRTIMER") 10000000))))) (repeat (setq n (sslength ss)) (setq lst (cons (vlax-ename->vla-object (ssname ss (setq n (1- n)))) lst))) (setq blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point p) NBT)) (foreach n lst (vla-transformby n (UCS2WCSMatrix))) (vlax-Invoke (vla-get-activedocument (vlax-get-acad-object)) 'CopyObjects lst blk) (foreach n lst (vla-delete n)) (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (trans p 1 0)) NBT 1 1 1 (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T)))) (princ) ) [Edité le 28/2/2007 par Bred]
  19. Спасибо! (merci !... c'est ça ?.... - http://translate.google.com)
  20. Salut, merci (gile), cela à l'air de fonctionner, en y incluant la transformation de point d'insert et de la rotation dans vla-insertblock. (defun c:bt () (setq ss (ssget) p (getpoint)) (setq NBT (strcat "BLOC - " (itoa (fix (* (getvar "TDUSRTIMER") 10000000)))) lst (mapcar (function vlax-ename->vla-object) (vl-remove-if (function listp) (mapcar (function cadr) (ssnamex ss)))) blk (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point p) NBT) barr (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray '9 (cons 0 (1- (length lst)))) lst))) (foreach n lst (vla-transformby n (UCS2WCSMatrix))) (vla-copyobjects (vla-get-activedocument (vlax-get-acad-object)) barr blk) (foreach n lst (vla-delete n)) (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (trans p 1 0)) NBT 1 1 1 (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T)))) ) avec ;; Doug C. Broad, Jr. ;; can be used with vla-transformby to ;; UCS2WCSMatrix transform objects from the UCS to the WCS (defun UCS2WCSMatrix () (vlax-tmatrix (append (mapcar '(lambda (vector origin) (append (trans vector 1 0 T) (list origin))) (list '(1 0 0) '(0 1 0) '(0 0 1)) (trans '(0 0 0) 0 1))(list '(0 0 0 1)))) ) (et encore un grand merci à ElpanovEvgeniy !) ------------------------------------------------------ petit détail : j'ai un " # < VLA-OBJECT IAcadBlockReference2 xxxxxxxx > " qui s'affiche sur la ligne de commande.... il y a un moyen de l'éviter ? [Edité le 28/2/2007 par Bred]
  21. :casstet: Je cherche et je ne trouve pas.... personne pour m'aider ?
  22. Salut, je ne sais pas si je ne réponds pas à côté, mais les XDATA peuvent servir par exemple à lier des objets entre eux, ou en rentrer des renseignements dans des objets, indépendement des attributs.
  23. Salut et bienvenue ! layiso est un lisp des express tool que tu trouveras dans C:\Program Files\AutoCAD xxxx\Express, donc soit tu le modifies, soit tu le copies est tu te créés une fonction "clone" sous un autre nom en renseignant SS en argument. copie ci-dessous : (Defun C:LAYISO (/ SS CNT LAY LAYLST VAL VPMODE) ;;;local function to find an unused layer state name for saving (acet-error-init (list (list "cmdecho" 0 "expert" 0 ) T ;flag. True means use undo for error clean up. );list );acet-error-init (acet-autoload '("lman.lsp" "(bns_sl name)")) ;;changed to support LAYUNISO (if (and (= 1 (acet-LayVpMode-Get)) (= 0 (getvar "tilemode")) ; if in a paper space (/= 1 (getvar "cvport")) ; viewport ) (setq VPMODE T) ; set flag for viewport behavior ) (if (not (setq [surligneur][b]SS[/b][/surligneur] (ssget "_i"))) (progn (prompt "\nSelect object(s) on the layer(s) to be isolated: ") (setq SS (ssget)) ) ) (if SS (progn (setq CNT 0) (while (and ss (> (sslength ss) 0) (setq LAY (ssname SS CNT)) );and (setq LAY (cdr (assoc 8 (entget LAY)))) (if (not (member LAY LAYLST)) (setq LAYLST (cons LAY LAYLST)) ) (setq CNT (1+ CNT)) ) (cond (VPMODE (bns_sl "ACET-lAYISO") ;setq Save the current layer state (setq acet:LSTVPORT (list (xstrcase (getvar "ctab")) (acet-currentviewport-ename))) ;setq save the layout and the viewport (command "_.vplayer" "_freeze" "*" "_Current") (foreach VAL LAYLST (command "_Thaw" VAL "_Current")) (command "") (if (= (length LAYLST) 1) (prompt (acet-str-format "\nLayer %1 has been isolated in this viewport." (car LAYLST))) (prompt (acet-str-format "\n%1 layers have been isolated in this viewport." (itoa (length LAYLST)))) ) ) (T (bns_sl "acet-layiso") ;setq Save the current layer state (setq acet:LSTVPORT (list (xstrcase (getvar "ctab")) (acet-currentviewport-ename))) ;setq save the layout and the viewport ;(setq acet:LSTVPORT (list "MODEL")) ;setq new GLOBAL for LAYUNISO (if (member (getvar "CLAYER") LAYLST) (setq LAY (getvar "CLAYER")) (setvar "CLAYER" (setq LAY (last LAYLST))) ) (command "_.-LAYER" "_OFF" "*" "_Y") (foreach VAL LAYLST (command "_ON" VAL)) (command "") (if (= (length LAYLST) 1) (prompt (acet-str-format "\nLayer %1 has been isolated." (car LAYLST))) (prompt (acet-str-format "\n%1 layers have been isolated. Layer %2 is current." (itoa (length LAYLST)) LAY) ) ) ) ) ) ) (acet-error-restore) (princ) ) [Edité le 26/2/2007 par Bred]
  24. Après test, Il y a une erreur d'orientation avec un SCU non parrallèle au SCG. D'après ce message, (gile) m'avait proposé cette méthode qui fonctionne.... (vla-insertblock (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object)) ) [b](vlax-3d-point (trans '(0 0 0) 1 0))[/b] "NomB" 1 1 1 [b](angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))[/b] ) ) mais pas de ce cas là !!! :casstet: ---------------------------------------------------------------- j'édite En fait je viens de me rendre compte que (et c'est logique), le souci ne viens pas de l'insertion "final" du bloc, mais de sa construction dans (vla-copyobjects (vla-get-activedocument (vlax-get-acad-object)) barr blk) ... il faudrait donc faire faire une rotation aux éléments constituant le bloc de la valeur de la rotation du SCU... j'ai tester à l'instinct (sans aucune reflexion approfondis j'avoue ) un (foreach n lst (vla-rotate n (vlax-3d-point (trans p 1 0))(angle '(0 0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T))))) avant la construction du bloc, mais ça ne fonctionne (bien sûr) pas.... merci de votre aide ! [Edité le 25/2/2007 par Bred]
  25. ah ben oui... je comprends maintenant pourquoi je n'y arrivait pas..... : il faut être intelligent !!! :P merci ElpanovEvgeniy !!! ;) (je rajoute juste un (foreach n lst (vla-delete n)) pur effacer la sélection.
×
×
  • 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é