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. Dans ce code txt n'est pas une variable : pas de (setq txt ...) et si après l'exécution du code tu interroges txt (!txt à la ligne dommande) tu auras nil. (foreach txt une_liste ...) récupère dans txt les valeurs de chaque élément de la liste mais à la fin de l'expression txt est "vide".
  2. (gile)

    lumiere

    Salut, si cest très sombre, il faut augmenter l'intensité, ou regarder du côté de l'attenuation : Extrait de l'aide : Pour mieux voir le halo (ou faisceau d'un source dirigée) tu peux mettre un peu de brouillard.
  3. (gile)

    ressort en 3D

    Salut, Si c'est juste un ressort, tu trouveras un LISP et le code DCL de la boite de dialogue ici.
  4. Je modifie le code ci-dessus, il est proposé à l'utilisateur d'inverser l'ordre de l'incrémentation, puis, pour les polylignes fermées, de sélectionner un chiffre pour un nouveau point de départ.
  5. Le point de départ est le point de départ de la polyligne quand elle a été créée, on pourrait le modifier, mais ça n'est pas si simple. Pour le sens de l'incrémentation, je pourrais modifier le LISP pour que l'incrémentation démarre du point le plus proche du point de sélection (si j'ai le temps) en attendant tu peux inverser l'ordre des sommets de la polyligne avec r_pline. La variable système LUPREC stocke le nombre décimales affichées pour les unités de longueur.
  6. (gile)

    Polyligne et multilignes

    Salut, Je ne suis pas sûr d'avoir compris si tu veux un double décalage de chaque polyligne ou une polyligne d'une largeur constante. Donc, voici 2 petits LISP. Le premier décale les polylignes sélectionnées de chaque côté de la moitié de la largeur spécifiée. Les polylignes sont créées sur le calque courant. (defun c:dble_dec (/ larg ss pline) (vl-load-com) (initget 3) (setq larg (/ (getdist "\nSpécifiez la largeur totale: ") 2.0)) (if (setq ss (ssget '((0 . "LWPOLYLINE")))) (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (foreach pl (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) (setq pline (car (vlax-invoke pl 'Offset larg))) (vla-put-Layer pline (getvar "CLAYER")) (setq pline (car (vlax-invoke pl 'Offset (- larg)))) (vla-put-Layer pline (getvar "CLAYER")) ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) (princ) ) Celui-ci crée une nouvelle polyligne de la largeur constante spécifiée sur le calque courant (defun c:larg_pl (/ larg ss pline) (vl-load-com) (initget 1) (setq larg (getdist "\nSpécifiez la largeur totale: ")) (if (setq ss (ssget '((0 . "LWPOLYLINE")))) (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (foreach pl (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) (setq pline (vla-Copy pl)) (vla-put-ConstantWidth pline larg) (vla-put-Layer pline (getvar "CLAYER")) ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) (princ) )
  7. Salut, Une autre manière, un peu plus concise (et peut-être moins facile à comprendre) : (defun c:pref (/ ss) (if (setq ss (ssget '((0 . "*TEXT")))) (foreach txt (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) ) (entmod (subst (cons 1 (strcat "T=" (cdr (assoc 1 txt)))) (assoc 1 txt) txt ) ) ) ) (princ) ) [Edité le 20/10/2006 par (gile)]
  8. Salut et bienvenue, Pour les cotes, dans la boite de dialogue "Modifier le style de cote" à l'onglet "Ajuster" tu coches : "Echelle des cotes selon présentation". Tu peux aussi, si tu n'es pas obligé d'avoir cotes et textes dans l'espace objet, faire tes cotations et annotations dans l'espace papier de la présentation.
  9. Sinon, tu peux essayer ça (la hauteur du texte est la hauteur de texte courante à l'échelle des cotes courante) : (defun c:incdiv (/ ent obj long dist nb n AcDoc Space ins txt txtlst) (vl-load-com) (while (not (setq ent (car (entsel "\nSélectionnez l'objet à diviser: "))) ) ) (setq obj (vlax-ename->vla-object ent)) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)) ) (prompt "\nL'objet ne peut pas être divisé.*Incorrect*") (progn (initget 7) (setq nb (getint "\nEntrez le nombre de segments: ") long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) dist (/ long nb) n 0 AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) (repeat nb (setq ins (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n)))) ) (vla-addPoint Space (vlax-3d-point ins)) (setq txt (vla-addText space (itoa n) (vlax-3d-point (polar ins (/ pi 4) (* (getvar "TEXTSIZE") (getvar "DIMSCALE") 0.2) ) ) (* (getvar "TEXTSIZE") (getvar "DIMSCALE")) ) ) (setq txtlst (cons txt txtlst)) [surligneur];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Aligne le texte sur la polyligne (vla-Rotate txt (vlax-3d-point ins) (angle '(0 0 0) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj ins) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/surligneur] ) (if (= (vla-get-closed obj) :vlax-true) (vla-put-TextString (car txtlst) "0") ) (initget "Oui Non") (if (= "Oui" (getkword "\nInverser le sens ? : ")) (foreach tx txtlst (vla-put-TextString tx (itoa (rem (- nb (atoi (vla-get-TextString tx))) nb)) ) ) ) (if (and (= (vla-get-closed obj) :vlax-true) (setq dep (car (entsel "\nSélectionnez un chiffre pour le nouveau de départ (ou ENTER): " ) ) ) (member (setq txt (vlax-ename->vla-object dep)) txtlst) ) (progn (setq dif (- nb (atoi (vla-get-TextString txt)))) (foreach tx txtlst (vla-put-TextString tx (itoa (rem (+ dif (atoi (vla-get-TextString tx))) nb)) ) ) ) ) (vla-EndUndoMark AcDoc) ) ) (princ) ) si tu préfères que le texte ne soit pas orienté le long de l'objet, supprime la partie [surligneur]surlignée[/surligneur] [Edité le 20/10/2006 par (gile)]
  10. As tu supprimé les espaces après les signes
  11. (gile)

    Polyligne et multilignes

    Salut et bienvenue, La commande DECALER (_OFFSET) ne te convient pas ?
  12. Salut, Peut-être ici ?
  13. Salut, les codes DXF 10, 11, 12 et 13 contiennent les cordonnées, dans le SCG, des sommet d'un solide 2D. Un petit LISP qui crée le contour (polyligne) d'un solide 2D. Pour tester : (SolidBoundary (car (entsel "\nSélectionnez un solide 2D: "))) ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (cond ((atom lst) lst) (T (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) ) ;;; SolidBoundary Crée une polyligne sur le contour d'un solide 2D ;;; Argument : le nom d'entité (ENAME) d'un solide 2D (defun SolidBoundary (sol / ptlst) (if (and (= (type sol) 'ENAME) (= (cdr (assoc 0 (entget sol))) "SOLID") ) (progn (setq ptlst (remove_doubles (mapcar 'cdr (vl-remove-if-not '(lambda (x) ( ) (entget sol) ) ) ) ) (if (= 4 (length ptlst)) (setq ptlst (list (car ptlst) (cadr ptlst) (cadddr ptlst) (caddr ptlst) ) ) ) (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length ptlst)) '(70 . 1) (cons 38 (caddar ptlst)) (assoc 210 (entget sol)) ) (mapcar '(lambda (x) (list 10 (car x) (cadr x))) ptlst ) ) ) ) (prompt "\nEntité non valide.") ) )
  14. (gile)

    PERSPECTIVE DISTORDUE

    Salut et bienvenue, Il est difficile de dire sans avoir vu le type de "déformation". Peut-être est-ce dû à une distance focale très courte (grand angle) de la caméra courante. Dans le "Tableau de bord" (Espace de travail : Modélisation 3D) >> "Panneau de configuration Navigation 3D" déployé >> "Distance focale". [Edité le 20/10/2006 par (gile)]
  15. J'ai oublié le 8 : permet à l'utilisateur de spécifier un point hors des limites du dessin même si la variable LIMCHECK est à 1
  16. Tu confonds avec getdist (une distance est toujours positve) Pour angtos, encore une fois fais des essais à la console VisualLISP (ou à la ligne de commande) (angtos pi) -> ? (angtos (/ pi 2)) -> ? (angtos (* pi 2)) -> ? pour plus de précision (14 décimales) dans l'unité angulaire courante : (angtos pi (getvar "AUNITS") 14) -> ? en degrés décimaux : (angtos pi 0 14) -> ? en grades : (angtos pi 2 14) -> ? [Edité le 19/10/2006 par (gile)]
  17. 1 : Empèche que l'utilisateur fasse ENTER 2 : Empèche que l'utilisateur n'entre 0 3 : Empèche que l'utilisateur n'entre une valeur négative 4 : Empèche que l'utilisateur ne spécifie un point hors des limites du dessin
  18. Juste comme ça, en vitesse : Plutôt que récupérer une chaine pour la transformer en réel, regarde du côté de getreal ou getdist Si tu veux récupérer Oui ou Non, regarde du côté de getkword (l'utilisateur pourra répondre seulement O ou N) Ainsi, ta routine ne fonctionne que si l'utilisateur travaille en radians. Pour plus de polyvalence (je pense ne pas être le seul à utiliser les degrés), je pense qu'il est préférable de faire tous les calculs et comparaisons en radians, et de ne convertir dans l'unité angulaire courante que quand c'est nécessaire : lors de l'utilisation de (command ...). La fonction angtos, qui transforme un angle en radians en une chaine dans l'unité courante (ou spécifiée) peut être utilisée puisque (command ...) accepte les arguments numéraires sous forme de chaine ou de nombre. (if ((setq rot1 (- (- (* 2.5 pi) (angle p1 p2)) (* 2 pi))) (setq rot1 (- (* 2.5 pi) (angle p1 p2))) ) ;; puis après (command "_.hatch" "ANSI31" "2" [surligneur](angtos (+ rot1 (/ pi 2)))[/surligneur] jspoly "") Pour l'utilisation de angtos tu peux (re)voir ici ou un peu plus loin là [Edité le 19/10/2006 par (gile)]
  19. C'est une bonne idée, la probabilité évoquée est considérablement diminuée ;) Pour une exécution plus rapide, et eviter le "feu d'artifice" de demi-droites, je me suis permis une traduction en VisualLISP de main_txextrude : (defun randnum (/ modulus multiplier increment random) ;;--------------------------------------------------;; ;;Source http://www.afralisp.net/Tips/code104.htm ;; ;;--------------------------------------------------;; ;;retourne un nombre pseudo-aléatoire entre 0 et 1 ;; ;;--------------------------------------------------;; (if (not randnum_seed) (setq randnum_seed (getvar "DATE")) ) (setq modulus 65536 multiplier 25173 increment 13849 randnum_seed (rem (+ (* multiplier randnum_seed) increment) modulus) random (/ randnum_seed modulus) ) ) (defun nb_intersect (e1 e2) (/ (length (vlax-invoke e1 'IntersectWith e2 acExtendNone)) 3 ) ) (defun main_txextrude (CONTLAY TXLAY / AcDoc Space sscont sstx I etcont J TROUVE etx PTINS NBPAIR NBIMPAIR nbpts eray reg) (vl-load-com) (setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) ;;sélectionner tous les contours (setq sscont (ssget "_X" (list (cons 8 CONTLAY) '(-4 . " '(-4 . " '(0 . "LWPOLYLINE") '(70 . 1) '(-4 . "AND>") '(0 . "CIRCLE") '(0 . "ELLIPSE") '(0 . "REGION") '(-4 . "OR>") ) ) ) (if sscont (progn (setq sstx (ssget "_X" (list (cons 8 TXLAY) '(0 . "TEXT")))) (setq I 0) (while ( (setq etcont (ssname sscont I)) (setq J 0) (setq TROUVE nil) (while (and (not TROUVE) ( (setq etx (ssname sstx J)) (setq PTINS (cdr (assoc 10 (entget etx)))) (setq NBPAIR 0) (setq NBIMPAIR 0) (repeat 10 ;; faire la demi-droite, angle aléatoire (setq RANDOM_ANGLE (* 2 pi (randnum))) ;; compris entre 0 et 2*pi (setq eray (vla-addRay Space (vlax-3d-point PTINS) (vlax-3d-point (polar PTINS RANDOM_ANGLE 1)) ) ) (setq nbpts (nb_intersect eray (vlax-ename->vla-object etcont))) ;; j'efface la demi_droite (vla-delete eray) (if (zerop (rem nbpts 2)) ;; nbpts est pair (setq NBPAIR (+ NBPAIR 1)) (setq NBIMPAIR (+ NBIMPAIR 1)) ) ) ;; fin repeat (setq J (+ J 1)) (if (setq TROUVE (> NBIMPAIR NBPAIR)) ;; il y a plus d'impairs que de pairs. J'ai vraiment pas de bol si ça marche pas. (progn ;; j'enlève etx du jeu de sélection sstx, puisque etx à trouvé son contour (setq sstx (ssdel etx sstx)) ;; puis j'extrude (if (= "REGION" (cdr (assoc 0 (entget etcont)))) (setq reg (vla-copy (vlax-ename->vla-object etcont))) (setq reg (car (vlax-invoke Space 'addRegion (list (vlax-ename->vla-object etcont)) ) ) ) ) (vla-addExtrudedSolid Space reg (cdr (assoc 1 (entget etx))) 0.0) (vla-delete reg) ) ) ) (setq I (+ I 1)) ) ) (alert "pas de contour") ) (vla-EndUndoMark AcDoc) ) (defun c:txextrude (/ etx TXLAY etcont CONTLAY) (setq etx (car (entsel "\nSélectionner le texte dont vous voulez récupérer le calque ..." ) ) ) (if etx (progn (setq etx (entget etx)) (if (= (cdr (assoc 0 etx)) "TEXT") (progn (setq TXLAY (cdr (assoc 8 etx))) (alert TXLAY) (setq etcont (car (entsel "\nSélectionner le contour dont vous voulez récupérer le calque ..." ) ) ) (if etcont (progn (setq etcont (entget etcont)) (setq CONTLAY (cdr (assoc 8 etcont))) (alert CONTLAY) (main_txextrude CONTLAY TXLAY) ) ) ) (alert "pas un texte") ) ) ) (princ) )
  20. tu peux aussi faire : (car (reverse lst)) et (cadr (reverse lst))
  21. Denis, Essaye un peu d'être précis dans tes questions. Ce n'est pas l'expression (setq Epais (atoi "-.20")) qui te retourne ce message d'erreur, mais sûrement ce que tu fais avec la variable Epais ensuite. (atoi "-.20") retourne 0
  22. Après des tests un peu plus poussés, le LISP Textrude semble fonctionner correctement tant que la hauteur de texte n'est pas trop petite par rapport à la taille du dessin. En poussant la variable système MaxHatch à 10000000, ça fonctionne encore quand la hauteur de texte fait 1/20000 de la hauteur de la vue en zoom étendu. Je modifie le LISP, pour forcer la valeur de MaxHatch et la restaurer à la fin (version 2.4).
  23. Ne sert effectivement absolument à rien du tout : si la valeur de Ech est : "200" (atoi Ech) transforme la chaine en entier -> 200 (arrondi (atoi Ech)) arrondi un nombre entier au nombre entier le plus proche !!! -> 200 (rtos (arrondi (atoi Ech)) 2 0) transforme en chaine un nombre réel (en fait un entier) sans afficher de décimale -> "200" (setq Ech (rtos (arrondi (atoi Ech)) 2 0)) attribue sa "nouvelle valeur" à Ech !!! Eh, Denis arrête Pink Floyd ;)
  24. Si la première expression retourne nil, c'est bien que (* (last (trans '(0 0 1) 3 2)) 1000) n'est pas exactement égal à 200. Néanmoins, la seconde expression retourne T parceque, à 0.000000001 (ou 1e-9) près, c'est bien égal à 200.
  25. Que te retourne l'expression suivante, T ou nil ? (= 200 (* (last (trans '(0 0 1) 3 2)) 1000)) Et celle-ci ? (equal 200 (* (last (trans '(0 0 1) 3 2)) 1000) 1e-9)
×
×
  • 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é