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)

    decalage de texte de cote

    Salut Fraid, Je me suis permis de modifier le code de Bonuscad. Le déplacement des textes cotes s'y faisait par rapport à la perpendiculaire de l'angle de rotation du texte : (+ (vla-get-TextRotation obj_vla) (/ pi 2)) Je propose un déplacement défini par 2 points, du premier vers le deuxième, in dépendant de la rotation du texte : ((lambda (/ js d n ent obj_vla pos_ac p1 p2 dep new_pos) (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (setq js (ssget (list (cons 0 "DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1 ) ) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB") ) ) ) ) ) (cond (js (vl-load-com) (initget 1) (setq p1 (getpoint "\nSpécifiez le déplacement des cotes, premier point: " ) ) (initget 1) (setq p2 (getpoint p1 "\nDeuxième point: ")) (setq dep (mapcar '- p2 p1)) (setq n -1) (repeat (sslength js) (setq ent (ssname js (setq n (1+ n))) obj_vla (vlax-ename->vla-object ent) ) (setq pos_ac (vlax-get obj_vla 'TextPosition) new_pos (mapcar '+ pos_ac dep) ) (vlax-put obj_vla 'TextPosition new_pos) (vla-put-TextMovement obj_vla 0) ) ) ) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (prin1) ) ) Edit : avec les cotes continues les lignes de cotes ne suivaient pas le texte, j'ajoute une ligne aucode ci-dessus : (vla-put-TextMovement obj_vla 0) ainsi que'un groupe d'annulation. [Edité le 10/8/2006 par (gile)]
  2. Et aussi en Angleterre et dans toutes les anciennes colonies de l'empire britanique (le Commonwealth, en gros)
  3. (gile)

    Coté la longueur d\'un arc

    Salut Bonus, Ton code ne marche pas chez moi, le point retourné par (setq pt_m (trans (getpoint) 3 2)) ne se retrouve pas sur l'arc dans l'EO de la fenêtre, et j'ai donc aussi le message : "; erreur: type d'argument incorrect: lselsetp nil" La solution pour les versions "antiques" est peut être de faire : (command "_.mspace") (command "_.-view" "_save" "temporaire") (while (not (setq arc (car (entsel))))) (command "_.-view" "_restore" "temporaire") (command "_.-view" "_delete" "temporaire") (command "_.pspace") et de traiter directement les données de l'arc pour calculer sa longueur. Mais, j'ai une question de petit nouveau, était-il possible de faire une cotation dans l'espace papier avec ces antiques versions ?
  4. Salut, Je n'ai jamais réussi à récupérer ni à mdifier les infos de la boite des "Propriétés mécaniques", donc voici un petit LISP qui retourne la masse du solide sélectionné en fonction de sa densité et des unités du dessin. Je n'ai mis que mètre, centimètre et millimètre comme unités et kg pour la masse, mais tout ça est facilement modifiable. (defun c:masse (/ obj) (vl-load-com) (initget 7) (setq dens (getreal "\nSpécifiez la densité du matériau: ")) (initget 1 "MEtre Centimètre MIllimètre") (setq unit (getkword "\Spécifiez l'unité du dessin [MEtre/Centimètre/MIllimètre]: " ) ) (while (not (and (setq obj (car (entsel "\nSélectionnez un solide: "))) (= (vla-get-ObjectName (setq obj (vlax-ename->vla-object obj))) "AcDb3dSolid" ) ) ) ) (setq pds (* (vla-get-Volume obj) dens (cond ((= unit "MEtre") 1e3) ((= unit "Centimètre") 1e-3) ((= unit "MIllimètre") 1e-6) ) ) ) (alert (strcat "Poids du solide : " (rtos pds) " kg")) (princ) ) [Edité le 9/8/2006 par (gile)]
  5. (gile)

    Coté la longueur d\'un arc

    Je crains que tu n'aies eu la malchance de copier une mauvaise version. Durant le changements faits pour essayer d'améliorer la routine j'ai laissé passer une erreur, les deux versions actuellement affichées fonctionnent chez moi.
  6. (gile)

    Coté la longueur d\'un arc

    Re, Une version commentée, sans utilisation de fonctions vla- ... ;;; DIM_ARC Cote une longueur d'arc dans l'espace objet ou papier (defun c:dim_arc (/ echo cot e_lst rad cord vp fact arc) (setq echo (getvar "CMDECHO")) (setvar "CMDECHO" 0) (prompt "\nSélectionnez un arc ou un segment d'arc de polyligne: " ) (command "_dimangular" pause pause) ;_ création d'une cote angulaire (setq cot (entlast) e_lst (entget cot) rad (distance (cdr (assoc 13 e_lst)) (cdr (assoc 15 e_lst))) ;_ rayon de la cote cord (distance (cdr (assoc 13 e_lst)) (cdr (assoc 14 e_lst))) ;_ corde de la cote ) (if (= (getvar "CVPORT") 1) ;_ si espace papier (setq vp (cdr (assoc 331 (entget (cdr (assoc 330 e_lst))))) ;_ fenêtre fact (/ (cdr (assoc 45 (entget vp))) ;_ facteur d'échelle de la fenêtre (cdr (assoc 41 (entget vp))) ) ) (setq fact 1) ) (setq arc (* rad (cdr (assoc 42 e_lst)) fact) ;_ calcul de la longueur d'arc e_lst (subst (cons 1 (rtos arc 2 (getvar "DIMDEC"))) ;_ remplace l'angle par la longueur (assoc 1 e_lst) e_lst ) ) (entmod e_lst) ;_ modification des données (entupd cot) (setvar "CMDECHO" echo) (princ) ) [Edité le 10/8/2006 par (gile)]
  7. (gile)

    decalage de texte de cote

    Salut vla-Bonuscad, Depuis que j'ai découvert les (vlax-get ... ) (vlax-put ...) et (vlax-invoke ...) je m'embète beaucoup moins à transformer les variants en listes et vice-versa, voir ici.
  8. (gile)

    decalage de texte de cote

    Salut, Pour récupérer les propriétés d'un objet en vlisp, c'est souvent plus évident qu'avec les listes retournées par entget. Il faut d'abord transformer le nom d'entité acquis avec (car (entsel), (entlast) ou (ssname (ssget) n) en vla-object : (setq obj (vlax-ename->vla-object ent)) En faisant un (vlax-dump-object obj) tu pourras voir toutes les propriétés accessible pour l'objet. tu peux récupérer ces propriétes aves un (vla-get-property obj) ou les modifier avec un (vla-put-property obj [arg ...]) Si tu fais (vlax-dump-object obj T) tu auras aussi toutes les "méthodes" applicables à l'objet avec un (vla-method [arg...])
  9. (gile)

    decalage de texte de cote

    Si j'ai bien compris, pourquoi ne pas passer par la fenêtre des Propriétés, Position du texte X ou Position du texte Y.
  10. Salut, Si je suis complètement d'accord en ce qui concerne la trace de l'objet et le déplacement en mode poignées, le fait de pouvoir faire une boite hors axes XY me semble plutôt un plus, certes dérangeant nos habitudes comme toute nouveauté (et là, j'ai l'avantage d'en avoir moins que les dinosaures). On peut toujours, pour rester orthogonal, réactiver ortho (F8) ou utiliser le repérage polaire.
  11. (gile)

    Lisps de Patrick_35

    Merci beaucoup, Y'a du boulot pour éplucher tout ça :exclam:
  12. (gile)

    Coté la longueur d\'un arc

    Salut, comme je disais plus haut, c'est "brut de décoffrage". Les invites et options sont celles de la commande _dimangular : Il s'agit d'un artifice, cette commande n'est utilisée par le LISP que pour récupérer des données sur l'arc (même depuis l'espace papier) et représenter la cote. La longueur de l'arc et ensuite calculée et forcée à la place de la valeur de l'angle. NOTA : La cote n'est plus associative, les lignes cotes suivront le modif apportées à l'arc, mais le texte de cote (forcé) ne changera pas. Je modifie le LISP, avec une invite semblable à celle de la cotation des longueurs d'arcs des versions 2006/2007
  13. (gile)

    Coté la longueur d\'un arc

    Voilà un premier jet, c'est un peu brut de décoffrage mais ça semble fonctionner. ;;; DIM_ARC Cote une longueur d'arc dans l'espace objet ou papier (defun c:dim_arc (/ echo cot e_lst rad cord fen ech arc) (vl-load-com) (setq echo (getvar "CMDECHO")) (setvar "CMDECHO" 0) (prompt "\nSélectionnez un arc ou un segment d'arc de polyligne: ") (command "_dimangular" pause pause) (setq cot (entlast) e_lst (entget cot) rad (distance (cdr (assoc 13 e_lst)) (cdr (assoc 15 e_lst))) cord (distance (cdr (assoc 13 e_lst)) (cdr (assoc 14 e_lst))) ) (if (= (getvar "CVPORT") 1) (setq fen (cdr (assoc 331 (entget (cdr (assoc 330 e_lst))))) ech (vla-get-CustomScale (vlax-ename->vla-object fen)) ) (setq ech 1) ) (setq arc (/ (* rad (cdr (assoc 42 e_lst))) ech) e_lst (subst (cons 1 (rtos arc 2 (getvar "DIMDEC"))) (assoc 1 e_lst) e_lst ) ) (entmod e_lst) (entupd cot) (setvar "CMDECHO" echo) (princ) ) [Edité le 8/8/2006 par (gile)][Edité le 9/8/2006 par (gile)] [Edité le 10/8/2006 par (gile)]
  14. (gile)

    Coté la longueur d\'un arc

    Salut, La barre est assez haut ! Depuis l'espace papier les cotations associatives accèdent aux entités de l'espace objet (avec des réacteurs, je suppose). L'idée serait de faire un cote angulaire sur l'arc et à partir des données de cette cote (liste dxf) calculer la longueur de l'arc. Pour ce faire, il faut arriver à récupérer soit l'échelle de la fenêtre, soit les données de l'arc auquel la cote est associée. Le reste ne serait qu'un peu de trigo.
  15. Je m'en été fait un, voir ici.
  16. Salut, Pour choisir un répertoire : (setq fichier (open (getfiled "Créer un fichier" "" "txt" 1) "w")) pour mettre "Mon texte" dans le fichier : (princ "Montexte" fichier) puis fermer le fichier : (close fichier)
  17. Salut, Si le LISP est correctement chargé, tu tapes liste_de_calque à la ligne de commande et tu lis : Commande: liste_de_calque _mtext Style de texte courant: "Standard". Hauteur de texte: 2.5 Spécifiez le premier coin: tu spécifies le premier coin et le reste se fait tout seul : Spécifiez le coin opposé ou [Hauteur/Justifier/Espacement lignes/Rotation/Style/Largeur]: _w Spécifiez la largeur: 0 TextMult: 0 3D_Murs 3D_Plafonds 3D_Planchers ASHADE Calque1 cartouche cotation objet cotation papier Defpoints Escalier Escalier caché Fenêtres fenêtres présentation Hachures Plan Portes traits de construction
  18. Certes, Tramber. Mais le problème n'est pas tant de récupérer la liste des calques que d'en faire un mtext avec un saut de ligne après chaque calque (et les versions antérieures à 2004 ne reconnaissent pas "\n") Voir les sarcasmes du décapode réponse 8. [Edité le 8/8/2006 par (gile)]
  19. Holà décapode, et comme ça, ça marche sur une antique version ? (defun c:liste_de_calque (/ txt clq) (setq clq (tblnext "LAYER" T)) (while clq (setq txt (cons (cdr (assoc 2 clq)) txt) clq (tblnext "LAYER") ) ) (setq txt (acad_strlsort txt)) (command "_mtext" pause "_w" 0) (mapcar 'command txt) (command "") (princ) ) Je veux mon 20/20, moi ;)
  20. Beeshop, regarde ici, par exemple pour charger un LISP.
  21. Et en remplaçant "\n" par (chr 10) ?
  22. Salut, Une demande claire a plus chance d'apporter une réponse claire : (defun c:liste_de_calque (/ txt clq) (setq clq (tblnext "LAYER" T)) (while clq (setq txt (cons (cdr (assoc 2 clq)) txt) clq (tblnext "LAYER") ) ) (setq txt (apply 'strcat (mapcar '(lambda (x) (strcat x "\n")) (acad_strlsort txt)) ) ) (command "_mtext" pause "_w" 0 txt "") (princ) ) Trié dans l'ordre alphabétique [Edité le 8/8/2006 par (gile)]
  23. (gile)

    Bloc dynamique

    Salut, - tu crées ton bloc, - tu l'ouvres dans l'éditeur, - tu ajoutes les propriétés dynamique, - avec la commande wbloc tu enregistres ton bloc (source -> Bloc).
  24. (gile)

    Bloc dynamique

    (ssget "x" (list (cons 0 "INSERT") (cons 2 "Mon_Bloc_Dynamique"))) ne sélectionne que les blocs qui n'ont pas un nom de bloc anonyme. D'après mes test, (vla-get-Name (vlax-ename->vla-object (car (entsel)))) ou (cdr (assoc 2 (entget (car (entsel))))) retournent le nom "courant" du bloc ("Mon_Bloc_Dynamique") si le bloc a été seulement inséré et un nom de bloc anonyme ("*U12") dès que les propriétés dynamiques du bloc ont été modifiées et chaque occurence du même bloc a un nom différent. :casstet: Je pense que plutôt qu'un filtre dans le ssget il vaut mieux faire un test sur le EffectiveName de tous les blocs du jeu de sélection (EffectiveName retourne toujours le nom "courant") [Edité le 7/8/2006 par (gile)]
  25. Je parle du nom que tu récupères avec l'input-box, et de tester si ce nom n'est pas déjà utilisé par un autre bloc du dessin, je fais : (while (not (and (setq new (getstring "\nSpécifiez le nouveau nom : ")) (not (tblsearch "BLOCK" new)) (/= new "") ) )
×
×
  • 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é