Aller au contenu

Patrick_35

Membres
  • Compteur de contenus

    6 374
  • Inscription

  • Dernière visite

  • Jours gagnés

    30

Tout ce qui a été posté par Patrick_35

  1. Et par rapport à ADOLisp, tu as des choses en plus ? @+
  2. En version full, tu as StripMtext Pour forcer une valeur, tu peux par exemple changer le style de texte dans l'éditeur du Mtext. @+
  3. Comme je te l'ai indiqué précédemment ou on ne se comprend pas. @gile Merci pour le lien, mais l'as tu testé ? @+
  4. Salut Cela veut dire qu'il y a des valeurs de forcé dans le Mtext. Il existe des choses pour les versions pleines, mais comme tu es sur LT, pas de miracle @+
  5. Salut Tu as plusieurs manières de gérer une base de données. Soit par dessin, alors autant utiliser les fonctions natives vlax-ldata... Soit pour un ensemble de dessins. Tout dépend du nombre de données nécessaires. Par les regitres, si ce n'est pas trop important. Par un/des fichier(s) texte. Par un fichier Excel avec des outils comme Api_Xls Par une base de données avec ADOLisp @+
  6. Patrick_35

    Tracer un trait

    Salut (command "_.line" p1 p2 "") @+
  7. Sans problème. Tu fais sur ta ligne de commande (getfiled "Veuillez sélectionner un fichier STB" (vla-get-printerstylesheetpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) "stb" 16) Et par exemple, tu colles le résultat de cette manière (vla-put-stylesheet (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))) "D:\\Users\\nom_local\\AppData\\Roaming\\Autodesk\\AutoCAD xxxx\\Rxx.0\\fra\\Plotters\\Plot Styles\\Test.stb") @+
  8. Salut Essaye avec ceci voir si j'ai bien compris Ne fonctionne que sur la présentation courante (objet ou papier) (and (setq fic (getfiled "Veuillez sélectionner un fichier STB" (vla-get-printerstylesheetpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) "stb" 16)) (vla-put-stylesheet (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))) fic) ) @+
  9. Patrick_35

    C'est calme

    L'horreur :o Je devrais troquer ma moto contre une motoneige. Ca manque de chrome et de franges :(rires forts): @+
  10. Patrick_35

    Bitmap pour DCL

    Bonjour Et un lisp qui permet de convertir les images bmp au format 24 bits dans une liste compatible avec ceux de Lee Mac (defun bmp(/ act col fic lst nb pal pos str readbinary hexdec inv) ; Lecture d'un fichier binaire ; Merci à highflyingbird ; Trouvé sur TheSwamp.org ; http://www.theswamp.org/index.php?topic=36656.msg417089#msg417089 ; Modifié par Patrick_35 pour positionner le début de la lecture et la longueur à lire ; ReadBinary (fichier position longueur) (defun readbinary (fichier position longueur / str wsObj) (setq wsObj (vlax-create-object "ScriptControl")) (or position (setq position 0) ) (if (or (not longueur) (zerop longueur)) (setq longueur (- (vl-file-size fichier) position)) ) (vlax-put wsObj "language" "VBS") (setq str (strcat "Function ReadBinary(fichier) Const adTypeBinary = 1 Dim stream, xmldom, node Set xmldom = CreateObject(\"Microsoft.XMLDOM\") Set node = xmldom.CreateElement(\"binary\") node.DataType = \"bin.hex\" Set stream = CreateObject(\"ADODB.Stream\") stream.Type = adTypeBinary stream.Open stream.LoadFromFile fichier stream.Position = " (itoa position) " node.NodeTypedValue = stream.Read(" (itoa longueur) ") stream.Close Set stream = Nothing ReadBinary = node.Text Set node = Nothing Set xmldom = Nothing End Function" ) ) (vlax-invoke wsObj 'ExecuteStatement str) (setq str (vlax-invoke wsObj 'run "ReadBinary" fichier)) (vlax-release-object wsObj) str ) (defun hexdec (nb / r i s) (if (= (type nb) 'INT) (setq nb (itoa nb)) ) (setq r 0 i 0) (while (and (= (type nb) 'STR) (< i (strlen nb))) (setq i (1+ i) s (strcase (substr nb i 1 )) r (+ (lsh r 4) (- (ascii s) (if (<= s "9") 48 55 ) ) ) ) ) ) (defun inv(str / nb txt) (setq nb 1 txt "") (while (< nb (strlen str)) (setq txt (strcat (substr str nb 2) txt) nb (+ nb 2) ) ) txt ) (and (setq fic (getfiled "Veuillez sélectionner un fichier BMP" "" "bmp" 16)) (progn (setq col (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar 'ACADVER) 1 2))) pos (hexdec (inv (readbinary fic 10 4))) bit (hexdec (inv (readbinary fic 28 4))) str (readbinary fic pos nil) nb 1 ) (cond ((eq bit 24) (while (< nb (strlen str)) (vla-setrgb col (hexdec (substr str (+ nb 4) 2)) (hexdec (substr str (+ nb 2) 2)) (hexdec (substr str nb 2)) ) (setq act (vla-get-colorindex col) nb (+ nb 6) ) (if (eq act 7) (setq lst (cons -15 lst)) (setq lst (cons act lst)) ) ) ) (T (princ "\nLe lisp ne fonctionne qu'avec des images 24 bits\n") ) ) (vlax-release-object col) ) ) lst ) Exemple (setq Ma_variable (bmp)) ps : si j'ai un peu de temps, je regarderai pour des images 256, 16 couleurs et monochrome @+
  11. Salut Commande Xref --> Choix du/des xref(s) + clic droit --> Chemin d'accès --> Convertir en chemin d'accès relatif @+
  12. Rome ne s'est pas fait en un jour ;) et Cadxp est là pour t'aider. Si tu dois annuler ta copie d'attribut pour un raison ou une autre, un undo suffit. Si le marqueur undo n'est pas indiqué dans le Lisp, c'est alors la dernière commande qui est annulé, pas que le changement des attributs. Fais un test avec le Lisp qui contient les undomark et un sans et tu vas vite comprendre la nécessité ;) Le princ, c'est pour que rien n'apparaisse à la fin de l'éxecution du Lisp sur la ligne de commande. C'est comme indiqué; un silence. @+
  13. Voilà qui devrait répondre à ton besoin J'ai ajouté des commentaires pour faciliter la compréhension du lisp. Si j'ai été un peu trop succinct, n'hésite pas. (defun c:catt(/ att bl doc ent lst sel) (vl-load-com) ; Définir le document actif ainsi que les étiquettes à prendre en compte (setq doc (vla-get-activedocument (vlax-get-acad-object)) lst '("X" "Y" "Z-TN" "Z-PROF" "MARQUE" "NUMSERIE" "INCERTXY" "INCERTZ" "DATERELEVE") ) ; Début du marqueur Undo (idem à _undo _group) (vla-startundomark doc) ; Choix du bloc avec verif si attributs, etc... (and (setq ent (entsel "\nSélectionnez le bloc d'origine : ")) (setq ent (vlax-ename->vla-object (car ent))) (eq (vla-get-objectname ent) "AcDbBlockReference") (eq (vla-get-hasattributes ent) :vlax-true) (princ "\nSélectionnez les blocs destinataires") (ssget (list (cons 0 "insert") (cons 66 1))) (progn ; Création d'une liste contenant l'étiquette avec son texte ; Par exemple '(("X" . "100") ("Y" . "190") ("MARQUE" . "Patrick_35 ;-)")) ; La boucle vl-remove-if-not supprime toutes les étiquettes qui ne nous intéressent pas (n'appartenant donc pas à la liste lst) ; La boucle mapcar constitue la liste avec le nom de l'étiquette et sa valeur (setq att (mapcar '(lambda(x) (cons (strcase (vla-get-tagstring x)) (vla-get-textstring x) ) ) (vl-remove-if-not '(lambda(x) (member (strcase (vla-get-tagstring x)) lst) ) (vlax-invoke ent 'getattributes) ) ) ) ; Boucle pour parcourir la sélection des blocs (vlax-for bl (setq sel (vla-get-activeselectionset doc)) ; Boucle pour parcourir les attributs du bloc (foreach ent (vlax-invoke bl 'getattributes) ; Il ne reste plus qu'à vérifier que l'étiquette trouvé correspond avec une étiquette du bloc de base ; Si oui, on écrit donc la valeur dans l'attribut (and (setq ele (assoc (strcase (vla-get-tagstring ent)) att)) (vla-put-textstring ent (cdr ele)) ) ) ) ; Effacer le jeu de sélection de la mémoire (vla-delete sel) ) ) ; Fin du marqueur Undo (idem à _undo _end) (vla-endundomark doc) ; Silence (princ) ) @+
  14. Salut Un lisp vite fait A toi de bien faire attention que le nom des étiquettes correspondent bien entre différents blocs. (defun c:catt(/ att bl doc ent sel) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (setq ent (entsel "\nSélectionnez le bloc d'origine : ")) (setq ent (vlax-ename->vla-object (car ent))) (eq (vla-get-objectname ent) "AcDbBlockReference") (eq (vla-get-hasattributes ent) :vlax-true) (princ "\nSélectionnez les blocs destinataires") (ssget (list (cons 0 "insert") (cons 66 1))) (progn (setq att (mapcar '(lambda(x)(cons (strcase (vla-get-tagstring x))(vla-get-textstring x)))(vlax-invoke ent 'getattributes))) (vlax-for bl (setq sel (vla-get-activeselectionset doc)) (foreach ent (vlax-invoke bl 'getattributes) (and (setq ele (assoc (strcase (vla-get-tagstring ent)) att)) (vla-put-textstring ent (cdr ele)) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) @+
  15. Salut Si tu veux retrouver les options en international, voici une astuce. Tu lances la commande en français (-vue). Tu choisis ton option (P pour paramètres) puis ESC. Tu relances la commande et avec la flèche haut du clavier, tu vois sEttins apparaitre, c'est l'option en anglais auquel il faut ajouter un Underscore. On continue pour le calque en choisissant L (pour calque) puis ESC. Un coup de flèche haut et l'option anglaise apparait Layer auquel il faut aussi ajouter un Underscore. @+
  16. Salut Tu peux regarder l'objet "ADODB.Stream" qui permet de faire des lectures/écritures directe, aussi bien binaire que texte, mais c'est assez ardu Un exemple pour lire une partie ou tout un fichier binaire. ; Lecture d'un fichier binaire ; Merci à highflyingbird ; Trouvé sur TheSwamp.org ; http://www.theswamp.org/index.php?topic=36656.msg417089#msg417089 ; Modifié par Patrick_35 pour positionner le début de la lecture et la longueur à lire ; ReadBinary (fichier position longueur) ; Exemple : (readbinary "c:/toto.bmp" 10 23) pour une lecture partiel ; Exemple : (readbinary "c:/toto.bmp" 10 nil) pour une lecture partiel à partir de et jusqu'a la fin du fichier ; Exemple : (readbinary "c:/toto.bmp" nil nil) pour lire tout le fichier ; Résultat : Une chaine de texte en hexa (ex : "4DE50800FF") (defun readbinary (fichier position longueur / str wsObj) (setq wsObj (vlax-create-object "ScriptControl")) (or position (setq position 0) ) (if (or (not longueur) (zerop longueur)) (setq longueur (- (vl-file-size fichier) position)) ) (vlax-put wsObj "language" "VBS") (setq str (strcat "Function ReadBinary(fichier) Const adTypeBinary = 1 Dim stream, xmldom, node Set xmldom = CreateObject(\"Microsoft.XMLDOM\") Set node = xmldom.CreateElement(\"binary\") node.DataType = \"bin.hex\" Set stream = CreateObject(\"ADODB.Stream\") stream.Type = adTypeBinary stream.Open stream.LoadFromFile fichier stream.Position = " (itoa position) " node.NodeTypedValue = stream.Read(" (itoa longueur) ") stream.Close Set stream = Nothing ReadBinary = node.Text Set node = Nothing Set xmldom = Nothing End Function" ) ) (vlax-invoke wsObj 'ExecuteStatement str) (setq str (vlax-invoke wsObj 'run "ReadBinary" fichier)) (vlax-release-object wsObj) str ) Mais le plus simple est la méthode de Bonus @+
  17. Salut Et dans les Spécial sélection des lisps de (gile) ? @+
  18. Salut Et avec GEF ? @+
  19. Patrick_35

    Bitmap pour DCL

    Ah ok Voici les exemples déposés sur le site Theswamp http://www.theswamp.org/lilly_pond/leemac/32x32test.png http://www.theswamp.org/lilly_pond/leemac/48x48test.png http://www.theswamp.org/lilly_pond/leemac/textedit.png http://www.theswamp.org/lilly_pond/leemac/arrows.png http://www.theswamp.org/lilly_pond/leemac/textwrap.png http://www.theswamp.org/lilly_pond/leemac/yesno.png Ainsi que le lisp et ses exemples ps : L'auteur est Lee Mac @+
  20. Bonjour Je viens de tomber sur ce sujet et là chapeau, des images dans du DCL. Je dis Monsieur LeeMac :D Ps : Si ce sujet intéresse et se développe, cela pourrait faire l'objet d'un forum pour ceux qui veulent déposer des images. @+
  21. Pour qu'il fonctionne qu'avec des entiers (defun c:maxat(/ doc ent lst sel) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (setq lst (cons (atoi (vla-get-textstring (car (vlax-invoke ent 'getattributes)))) lst)) ) (vla-delete sel) (alert (strcat "La valeur max est : " (itoa (apply 'max lst)))) ) ) (vla-endundomark doc) (princ) ) Pour le lisp d'olivier, tu remplaces (setq numgeoref (max numgeoref (read (cdr (assoc 1 (entget ent)))))) par (if (> (atoi (cdr (assoc 1 (entget ent)))) numgeoref) (setq numgeoref (atoi (cdr (assoc 1 (entget ent))))) ) ps : le lisp ne fonctionne qu'avec l'etiquette NUMGEOREF @+
  22. Je viens de comprendre. Tu ne veux pas voir le défilement des commandes dans la fenêtre de texte. Regarde la variable cmdecho @+
  23. Le lisp fait un tri, si tu as par exemple 07 au lieu de 7, c'est le zéro qui prime (ex: 0 02 07 1 2 21 22 3 4). L'avantage du lisp est qu'il fonctionne aussi sur de l'aphanumérique. @+
  24. Quoi de plus simple que (eval (read (strcat "hand" ntxt))) Je pense que tu as ces quatre sujets qui pourraient d'apporter des réponses (voir des questions) http://cadxp.com/index.php?/topic/28642-arguments-et-variables/page__hl__setq http://cadxp.com/index.php?/topic/29314-ces-listes-qui-nen-sont-pas/ http://cadxp.com/index.php?/topic/20170-elements-de-syntaxe-autolisp/ http://cadxp.com/index.php?/topic/29047-symbole-expression-variable/page__p__158235__hl__atom @+
  25. Salut Regarde la variable regenmode @+
×
×
  • 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é