VDH-Bruno
Membres-
Compteur de contenus
1 146 -
Inscription
-
Dernière visite
-
Jours gagnés
20
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VDH-Bruno
-
Petit problème avec les chaines de caractères
VDH-Bruno a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Oui mais si tu fait un test pour vérifier que n'a pas une valeur décimal, dans ce cas tu ne change pas ton "pas ouvert" en "as ouvert" dans ton texte. -
Petit problème avec les chaines de caractères
VDH-Bruno a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
J'ai appris en testant avec la console et les exemples de la guerre des étoiles fautes de comprendre les définitions, effectivement la courbe de progression est plus lente mais du coup les fonctions sont peut être mieux intégré sur le long terme... A+ -
Petit problème avec les chaines de caractères
VDH-Bruno a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Salut, trim -> ajusté right -> droite left -> gauche donc (vl-string-right-trim "m" (vl-string-left-trim "p" "p1.20m")) Je n'ai pourtant quasiment pas fait d'anglais de ma vie (4ème et 3ème il y a 28 ans..) Sinon ma variante (read (vl-string-translate "pm" " " "p1.20m")) A+ -
Calculs entre du texte et un bloc
VDH-Bruno a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Oui c'est très bon, attention toute fois aux expressions alphanumériques: _$ (setq x (atof "2xxx")) 2.0 _$ (type x) REAL c'est pourquoi j'ai préféré read à atof _$ (setq x (read "2xxx")) 2XXX _$ (type x) SYM A+ -
Calculs entre du texte et un bloc
VDH-Bruno a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Bonjour, Quelque chose comme cela? _$ (numberp (read (vl-string-translate "," "." "+4,256"))) T _$ (numberp (read (vl-string-translate "," "." "-40.27"))) T _$ (numberp (read (vl-string-translate "," "." "toto"))) nil A+ -
Petit problème entre les Propriétés et l'affichage
VDH-Bruno a répondu à un(e) sujet de DenisHen dans AutoCAD 2014
Pour moi le texte est rouge à l'ouverture pas de problème, quitte et relance ton AutoCAD... A+ -
Faute d'ortographe ... et franche rigolade
VDH-Bruno a répondu à un(e) sujet de famaice dans Pause café
Bonjour, Une faute de frappe (sans faire de jeu de mot), personnellement si à l'écrit j'avais la moitié du quart de son talent d'écriture et de rédaction, j'en serais très heureux. A+ -
Sinon en complément à la remarque suivante: Un code à minima (de (gile) il me semble) avec entmake pour la création de polylignes 3D (AcDb3dPolyline). (defun makePl3d (pts) (entmake '((0 . "POLYLINE") (70 . 8))) (foreach p pts (entmake (list '(0 . "VERTEX") (cons 10 p) '(70 . 32)))) (entmake '((0 . "SEQEND"))) ) (makePl3d lst-pt);Pour tester Pour la culture général et comprendre les polylignes, sur ce forum je conseil la relecture de cette réponse de (gile). http://cadxp.com/topic/38025-coordonnees-dune-polyligne/page__view__findpost__p__214361 A+ Nb: Les points transmis à vl-cmd (command, command-s) -> SCU Les points transmis à entmake -> SCG (Au besoin utilise la fonction trans pour passer de l'un à l'autre)
-
Non vl-cmf à besoin d'un argument valide, et tous comme command peut être appelée séquentiellement dans mon exemple (foreach/while), il est appelé pour chaque point. Dans ton exemple si tu évalue ton expression while, tu obtiens nil en sortie _$ (while (setq pt (car lst-pt)) (setq lst-pt (cdr lst-pt))) nil Ce qui revient après évaluation de l'expression la plus imbriqué à écrire.. _$ (vl-cmdf "POLY3D" nil) nil Expression qui ne peut évidemment pas être interprété par vl-cmdf A+
-
Bonjour, Pour la correction: (vl-cmdf "POLY3D") (while lst-pt (vl-cmdf (setq pt (car lst-pt))) (setq lst-pt (cdr lst-pt))) (vl-cmdf "") Sinon comme évoqué récemment sur le forum, l'emploie d'une boucle foreach me semble plus évident sur ce type de traitement. (vl-cmdf "_3dpoly") (foreach p lst-pt (vl-cmdf p)) (vl-cmdf "") A+
-
Bonsoir x_all, Attention avec ssget et les modes de sélection (point, fenêtre, capture), ces modes de sélection sont graphique dons si le point recherché n'est pas visible à l'écran cela va échoué, un autre cas d'école avec les blocs c'est si le point d'insertion n'est pas définie sur une entité graphique du bloc la sélection peu aussi échouer.. Si tu as un peu de temps je t'invite à jeter un œil sur cette discussion http://cadxp.com/topic/37447-rechercher-un-bloc/page__view__findpost__p__205935 ou je proposais une sélection par fitres de coordonnées avec ssget. Ce qui revient à sélectionner tous les blocs et à comparer leurs points d'insertion comme tu l'avais initialement exprimé. A+ et bon WE
-
Regarde ici si cela peut te dépanner http://cadxp.com/topic/38099-pagination-automatique/page__view__findpost__p__210208 (Ps je sais pas comment est fait ton bloc le plus simple pour tester c'est de lancer la routine sur un simple texte présent dans ton onglet) A+
-
La fonction strlen (string length) mesure la longueur de la chaîne de caractère, puis avec l'opérateur moins je soustrait 3 à cette longueur. C'est avec la fonction substr que l'on retire les 3 derniers caractères (plus exactement que l'on garde tous ceux précède -> Du 1er caractère au Nième caractères - 3 caractères). A+
-
Re, J'ai personnellement beaucoup pris sur ce forum, je m'efforce de rendre quant je peux... Oui, un exemple: _$ (setq fich "C:\\Users\\toto\\Documents\\000000000\\TEST\\toto.txt") "C:\\Users\\toto\\Documents\\000000000\\TEST\\toto.txt" _$ (strcat (substr fich 1 (- (strlen fich) 3)) "top") "C:\\Users\\toto\\Documents\\000000000\\TEST\\toto.top" A+
-
Bonjour, Remplace: (string-subst-all "T:" "A=" line) par (foreach x '(("A=" . "T:") ("B=" . "G:")) (setq line (string-subst-all (cdr x) (car x) line))) Pour l'exemple le code modifié et commenté: (defun c:testxt (/ fich desc string-subst-all lst line) ;; Pour le cas ou il y aurait plusieurs occurences à substituer dans une même ligne ;; Si une seul occurence par ligne remplacer string-subst-all par vl-string-subst ;; dans le code (defun string-subst-all (n o l / p) (if (setq p (vl-string-search o l)) (string-subst-all n o (vl-string-subst n o l p)) l ) ) ;; Programme principal (if ;; Sélection du fichier (setq fich (getfiled "Sélectionner un fichier texte" "" "txt;*" 0)) (progn ;; Ouverture du fichier en lecture (setq desc (open fich "r")) ;; Boucle de lecture de l'ensemble des lignes (while (setq line (read-line desc)) ;; Substitution des chaînes de caractères dans la ligne (foreach x '(("A=" . "T:") ("B=" . "G:")) (setq line (string-subst-all (cdr x) (car x) line))) ;; Stockage de la ligne modifié dans une liste (stockage inversé) (setq lst (cons line lst)) ) ;; Fermeture du fichier (close desc) ;; Ouverture du fichier en écriture (setq desc (open fich "w")) ;; Ecriture des lignes dans le fichier (foreach line (reverse lst) (write-line line desc)) ;; Fermeture du fichier (close desc) ) ) (princ) ) A+
-
Salut, Rapidement pour le principe, écrit à la volé.. A tester (defun c:testxt (/ fich desc string-subst-all lst) (defun string-subst-all (n o l / p) (if (setq p (vl-string-search o l)) (string-subst-all n o (vl-string-subst n o l p)) l ) ) (and (setq desc (open (setq fich (getfiled "Sélectionner un fichier texte" "" "txt;*" 0)) "r")) (while (setq line (read-line desc)) (setq lst (cons (string-subst-all "T:" "A=" line) lst))) (not (close desc)) (setq lst (reverse lst)) (setq desc (open fich "w")) (foreach line lst (write-line line desc)) (close desc) ) (princ) ) A+
-
LISP - Création d'une certaine polyligne par décalage
VDH-Bruno a répondu à un(e) sujet de hey_bapt dans AutoCAD 2012
Slt, Une coquille dans le copier-coller des expression de (gile) à fait sauter la fonction (entlast) A+ -
LISP - Création d'une certaine polyligne par décalage
VDH-Bruno a répondu à un(e) sujet de hey_bapt dans AutoCAD 2012
Dans la même idée que zebulon_ mais avec assoc au lieu de cond: (initget "T1 T2 T3 T4 T5 P1 P2") (setq Ep (cdr (assoc (getkword "\nType de bordure [T1/T2/T3/T4/T5/P1/P2] <T2> : ") '((nil . 0.15) ("T1" . 0.12) ("T2" . 0.15) ("T3" . 0.17) ("T4" . 0.20) ("T5" . 0.24) ("P1" . 0.08)) ) ) ) -
Attention aux comparaisons dans ton if, l'égalité que tu utilises ne fonctionne pas _$ (= T :vlax-true) nil _$ (= T :vlax-false) nil Attention également à ton imbrication dans ton if
-
Bien que je préfère la manipulation des listes DXF, on peut effectivement obtenir ces informations en exploitant les propriétés définie dans l'objet BLOCK_RECORD. ((lambda (obj_blrecord) (alert (strcat (if (eq :vlax-true (vla-get-explodable obj_blrecord)) "Décomposition autorisé -> \t\t Oui" "Décomposition autorisé -> \t\t Non" ) "\n" (if (zerop (vla-get-BlockScaling obj_blrecord)) "Echelle non uniforme autorisé -> \t Oui" "Echelle non uniforme autorisé -> \t Non" ) ) ) ) (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-Acad-Object))) (cdr (assoc 2 (entget (car (entsel))))) ) ) Oui toujours, je ne te parlerai pas de la taille de l'écran, ni des perf de l'ordi j'en choquerai plus d'un… <_< A+
-
Bonjour, Le premier retourne le ename de la définition de bloc (0 . "BLOCK") Le second retourne le ename d'une référence de bloc inserer dans le dessin (0 . "INSERT") Oui, et plus spécifiquement dans l'aide tu as la description des codes par type d'entité. (vla-get-explodable (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-Acad-Object))) "Nom_de_ton_bloc")) A+
-
Bonjour rebcao, Pour compléter, la réponse d'Olivier, les options de création du bloc tel que la mise à l'échelle uniforme et la décomposition. Sont respectivement renseigné dans les codes DXF 281 et 280 de la table BLOCK_RECORD, associée à la définition du bloc. La table BLOCK_RECORD est accessible via le code 330 présent dans la définition du bloc. Pour le principe un exemple pour une sélection par pointage sur une référence de bloc ((lambda (dxf_blrecord) (alert (strcat (if (zerop (cdr(assoc 280 dxf_blrecord))) "Décomposition autorisé -> \t\t Non" "Décomposition autorisé -> \t\t Oui" ) "\n" (if (zerop (cdr(assoc 281 dxf_blrecord))) "Echelle non uniforme autorisé -> \t Oui" "Echelle non uniforme autorisé -> \t Non" ) ) ) ) (entget (cdr (assoc 330 (entget (tblobjname "block" (cdr (assoc 2 (entget (car (entsel)))))))))) ) L'équivalent sous AutoCAD visible dans l'éditeur de bloc: A+
-
En utilisant tblobjname pour récupérer plus directement le ename.. (cdr (assoc 280 (entget (assoc 330 (entget (tblobjname "block" "Nom_de_ton_bloc")))))) A+
-
Bonjour, Je n'ai pas encore eu besoin de faire cela autrement Oui trés facilement avec entmake ou vla-add, un lien pour l'exemple avec entmake http://cadxp.com/topic/4615-inserer-un-bloc-sur-chaque-sommet-polyligne/page__view__findpost__p__21464 _$ (atof (getvar "ACADVER")) 17.0 Sur wikipedia il y a un tableau de correspondance entre numéro et version d'AutoCAD, si tu ne les as pas tous en tête https://en.wikipedia.org/wiki/AutoCAD A+
-
Après réflexion, l'écriture suivante me semble plus juste… (defun map (f l) (if l (cons (eval (list f (list 'quote (car l)))) (map f (cdr l))) ) ) A+ Bruno
