-
Compteur de contenus
2 523 -
Inscription
-
Dernière visite
-
Jours gagnés
23
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Fraid
-
Autocad <-> Python <-> L' infini et au-delà
Fraid a répondu à un(e) sujet de Fraid dans ObjectARX/DBX, C++, .NET, RealDWG
L'utilitaire pip télécharge et place les fichiers dans le dossier Python enregistrer dans la variable d'environnement Windows PATH. Il installe le module et éventuellement les modules associés si absent. C'est pour moi évident. Un code malicieux pourrais mettre ton Autocad hors service après avoir envoyé des infos sensibles en Chine par exemple. Je ne te montrerais pas d'exemple de code. Sinon Merci, cela m'encourage à continuer. C'est un retour d'experience, non un cours de Python. Pour un cours Python, j'aime bien OpenClassRoom Pour une description simple des fonctions et méthodes w3schools à bientôt -
Autocad <-> Python <-> L' infini et au-delà
Fraid a répondu à un(e) sujet de Fraid dans ObjectARX/DBX, C++, .NET, RealDWG
On dirais que tu n'as pas lu ce que j'ai écrit. Installer la dernières version de Python. Installer un EDI Pour le teste Installer Pyautocad avec PIP install pyautocad en ligne de commande windows. -
Autocad <-> Python <-> L' infini et au-delà
Fraid a répondu à un(e) sujet de Fraid dans ObjectARX/DBX, C++, .NET, RealDWG
c'est qu'il n'y a pas grand chose à dire de plus. Je ne comprend pas ton F5, chez moi c'est pour sélectionner le debugger A tu une version récente de Visual ? A tu un message d'erreur dans la console (en bas)? -
Autocad <-> Python <-> L' infini et au-delà
Fraid a répondu à un(e) sujet de Fraid dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour Gile, Effectivement celui la, je ne l'avais pas vu, c'est ce que je disais plus haut, il existe de nombreuse façon d'accéder à Autocad. Didiers C'est exactement ce que j'essaye de faire. Apparemment ce n'est pas mon fort, j'en suis désolé. L'EDI que j'utilise est Visual Studio Code qui est gratuit et multi langage. Tu n'auras qu'a cliquer sur la flèche en haut à droite pour l'exécuter. -
Autocad <-> Python <-> L' infini et au-delà
Fraid a répondu à un(e) sujet de Fraid dans ObjectARX/DBX, C++, .NET, RealDWG
Python dans Autocad En fait, ce n'est pas l'aspect le plus attrayant de cette collaboration. Car, je vous le concède, il y a déjà un certain nombre de langages utilisables. Mais sa facilité de mise en place (aucune dans Autocad) et d'écriture, ainsi que son accès à de nombreux Domaines grace à ces modules, vous permet d'attaquer les dwg par l'extérieur. Pour que python puisse agir dans Autocad, nous pouvons utiliser Pyautocad, mais ce n'est pas obligatoire, si vous fouiller dans le code de Pyautocad, vous trouvez sa solution par exemple et si vous cherchez, vous en trouverez d'autres (si vous connaissez le chinois, le russe ou le tchèque c'est un plus). Il faut savoir aussi qu'on peut aussi éditer les dwg sans Autocad sur le poste gratuitement, mais ça, je ne suis pas sure d'avoir le droit de vous le révéler. Si quelqu'un à un avis sur le sujet. Pour tester votre installation, créer un nouveau fichier Python dans votre EDI. # coding: utf-8 from pyautocad import Autocad, APoint acad = Autocad(create_if_not_exists=True) acad.prompt("Coucou, c'est Python\n") Exécuter le fichier, Autocad démarre si il ne l'est pas, et le message est affiché. Comme vous pouvez le constater, Autocad c'est laissé faire. Si aucun message n'est affiché, l'action de Python ne laisse aucune trace. C'est une énorme faille de sécurité, un gouffre sans fond, un abysse technologique. Juste pour info, vous trouverez souvent au début des codes Python ceci : #!/usr/bin/env python . C'est pour linux, cela remplace la variable d'environnement PATH de Windows. Ici, nous causons pas le linuxiens, pour les utilisateurs de Mac, il se débrouille, puisque le pognon rend intelligent (la preuve au gouvernement). à suivre ... -
Autocad <-> Python <-> L' infini et au-delà
Fraid a posté un sujet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Il est impossible d'être exhaustif au sujet des interactions Autocad/Python. Des possibilités infini dans Autocad un peu comme VBA. Au-delà d'Autocad, comme tout les langages de programmations avancés. Si Python est devenu le langage le plus utilisé, ce n'est pas le cas pour les "Autocadiens". Pourquoi ? A vous de me répondre. En attendant voici comment en profiter. Prérequis - Etre administrateur de son poste ou si vous pouvez prendre un ticket au près de votre service informatique qui vous configure votre poste. - Windows 10 ou 11 - Un Autocad d'installé. (full 64 bit qu'importe la version, testé sur 2015 à 2024, non testé avec LT, CIVIL ou MAP : à explorer) - Un EDI comme Visual Studio Code - Avoir des notions de base de Python. C'est peut être le langage le plus facile à apprendre. Je parle bien de la base, car c'est un langage modulaire et que l'utilisation de certain modules n'est pas si simple. Il y a des cours gratuit sur le net, il suffit de demander à votre moteur de recherche préféré. Si vous connaissez déjà un autre langage, l'apprentissage va très vite. - Si vous connaissez l'Autolisp c'est le top, il communique très bien avec Python. De plus, comme Python est présenté comme multi- paradigme, vous pouvez coder en fonctionnel. Je dit bien présenté, car en fait, il est purement orienté objet. Si dans Autolisp tout est liste, tout est objet dans python, même une fonction ou une variable. Installation - Télécharger la dernière version stable de Python - Installer Python. Normalement il n'y a rien à changer dans les options d'installation, mais vérifier quand même que Modifier PATH soit coché et que PIP (utilitaire de téléchargement des Modules) soit installé avec. - Selon l'utilisation il y auras des modules à installer. Cela se fait en ligne de commande Windows avec l'utilitaire PIP. Pour le Module Pyautocad qui permet d'agir dans le Domaine d'Autocad on tape ceci dans l'invite de commande Windows: pip install pyautocad - Et c'est tout, rien à faire dans Autocad, il s'en fout totalement et l'ignore. Voila, je reviendrais avec des exemples. -
[PYTHON] Conversion .las en .dwg
Fraid a répondu à un(e) sujet de Fraid dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Pareil, mais pour le traitement de plusieurs centaines de nuages, Python est notre ami. J'ai plein d'exemples d'utilisation de Python avec Autocad, mais je ne sait pas trop ou publier sur le forum. De plus, l'utilisation de Python soulève bien souvent des problèmes de sécurité et/ou de license. Mais je vais faire un effort pour bien présenter les choses sans froisser personne. à tantôt. -
Transformation de Champ en Texte dans plusieurs présentation.
Fraid a répondu à un(e) sujet de Akkroma dans Autodesk Map
Bonjour, J'ai trouvé une solution plus rapide et qui fonctionne avec odbx permettant de traiter tout un dossier, mais qui fonctionneras uniquement avec des dessins contenant ce cartouche. Je n'ai pas réussi à écrire un code générique traitant la variable CTAB particulièrement. La formule des champs est difficile à attraper dans les attributs. Je continu à chercher quand même, cela m'intéresse. ;;;field2txt Conversion des champs en textes ;;;Supprime les champs et les remplace par leurs valeurs ;;;acdc, (vla-get-activedocument (vlax-get-acad-object)) ou ObjectDBX ;;;taper f2t pour traiter le dessin courant ou f2tindir pour traiter un dossier ;;;Converti les Textes, Mtextes, repères, repères multiples, cotations, Attributs et tableaux ;;;dans chaques présentations et les blocks (defun field2txt ( acdc / delfield getconstantatt) (defun delfield (ob layoutname / objname objlay lays dic ind atts lconst ctc ctr lver tag) (setq objname (vla-get-objectname ob) objlay (vla-get-layer ob) lays (vla-get-layers acdc) ) (and (= (vla-get-freeze (vla-item lays objlay)) :vlax-false) (= (vla-get-lock (vla-item lays objlay)) :vlax-false) ;(not (member objlay '("0" "EXCLU")));option d'exclusion de calques (progn (and (wcmatch objname "*Text,AcDbMLeader");Texte, Mtextes, repères et repères multiples (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textstring ob)) (progn (vla-put-textstring ob " ") (vla-put-textstring ob ind) ) ) (and (wcmatch objname "*Dimension");Cotations (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textoverride ob)) (progn (vla-put-textoverride ob " ") (vla-put-textoverride ob ind) ) ) (and (eq objname "AcDbBlockReference");Attributs (setq atts (vlax-invoke ob 'GetAttributes) lconst (getconstantatt ob)) (foreach att atts (setq tag (vla-get-TagString att)) (and (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary att) "ACAD_FIELD")) (not (member tag lconst)) (setq ind (vla-get-textstring att)) (progn (if (eq tag "NO") (setq ind layoutname)) (if (eq tag "REF_DSP")(setq ind (strcat (substr ind 1 (1+ (vl-string-position (ascii "_") ind nil T))) layoutname))) (vla-put-textstring att " ") (vla-put-textstring att ind) ) ) ) ) (and (eq objname "AcDbTable");Tableaux (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ctr 0 ctc 0 ) (while (< ctr (vla-get-rows ob)) (while (< ctc (vla-get-columns ob)) (and (/= (vla-GetCellState ob ctr ctc) 1) (/= (vla-GetCellState ob ctr ctc) 17) (setq ind (vlax-invoke ob 'getcellvalue ctr ctc)) (progn (vlax-invoke ob 'setcellvalue ctr ctc " ") (vlax-invoke ob 'setcellvalue ctr ctc ind) ) ) (setq ctc (1+ ctc)) ) (setq ctc 0 ctr (1+ ctr)) ) ) ) ) );fin delfield ;;;getconstantatt ;;;bl, vla objet (block) ;;;Retourne la liste des étiquettes des attributs constants (defun getconstantatt ( bl / lc) (setq lc '()) (vlax-for bls (vla-get-blocks acdc) (if (eq (vlax-get bls 'Name)(vlax-get bl 'Name)) (vlax-for obj bls (and (= (vla-get-ObjectName obj) "AcDbAttributeDefinition") (= (vla-get-Constant obj) :vlax-true) (setq lc (cons (vla-get-TagString obj) lc)) ) ) ) ) lc ) ;Définitions de blocks (vlax-for bl (vla-get-blocks acdc) (and (= (vla-get-islayout bl) :vlax-false) (= (vla-get-IsXRef bl) :vlax-false) (= (vla-get-IsDynamicBlock bl) :vlax-false) (not (wcmatch (vla-get-name bl) "`*T*")) (vlax-for obj bl (delfield obj "") ) ) ) ;Chaque présentations (vlax-for layout (vlax-get-property acdc 'layouts) (vlax-for obj (vlax-get-property layout 'block) (delfield obj (vla-get-name layout)) ) ) (princ) );fin field2txt ;Commande pour dessin courant (defun c:f2t (/ ac) (setvar 'ctab "Model") (field2txt (setq ac (vla-get-activedocument (vlax-get-acad-object)))) (vla-Regen ac acAllViewports)(princ)) ;Commande pour dossier (non récursif) (defun c:f2tindir ( / dir lf axdbdoc) (and (setq dir (getdir)) (setq lf (vl-directory-files dir "*.dwg" 1)) (foreach f lf (if (setq axdbdoc (getaxdbdoc (strcat dir f))) (field2txt axdbdoc) ) (vla-saveas axdbdoc (strcat dir f)) (vlax-release-object axdbdoc) ) ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getdir( / shell rep) (setq shell (vlax-create-object "Shell.Application") rep (vlax-invoke shell 'browseforfolder 0 "Sélectionnez le dossier" 512 "") ) (vlax-release-object shell) (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getaxdbdoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename)) (not (vlax-release-object axdbdoc)) axdbdoc ) ) Taper f2t, pour le dessin courant, ou f2tindir pour traiter un dossier. -
Transformation de Champ en Texte dans plusieurs présentation.
Fraid a répondu à un(e) sujet de Akkroma dans Autodesk Map
Yop, En attendant que je trouve une solution plus rapide voici celle qui change de présentation au fur et à mesure. C'est long mais fait le travail. Attention, pas en choisissant un dossier, mais seulement dans un dessin ouvert. ;;;field2txt Conversion des champs en textes ;;;Supprime les champs et les remplace par leurs valeurs ;;;acdc, (vla-get-activedocument (vlax-get-acad-object)) ou ObjectDBX ;;;tapper f2t pour traiter le dessin courant ou f2tindir pour traiter un dossier ;;;Converti les Textes, Mtextes, repères, repères multiples, cotations, Attributs et tableaux ;;;dans chaques présentations et les blocks (defun field2txt ( acdc / delfield getconstantatt) (defun delfield (ob / objname objlay lays dic ind atts lconst ctc ctr lver) (setq objname (vla-get-objectname ob) objlay (vla-get-layer ob) lays (vla-get-layers acdc) ) (and (= (vla-get-freeze (vla-item lays objlay)) :vlax-false) (= (vla-get-lock (vla-item lays objlay)) :vlax-false) ;(not (member objlay '("0" "EXCLU")));option d'exclusion de calques (progn (and (wcmatch objname "*Text,AcDbMLeader");Texte, Mtextes, repères et repères multiples (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textstring ob)) (progn (vla-put-textstring ob " ") (vla-put-textstring ob ind) ) ) (and (wcmatch objname "*Dimension");Cotations (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textoverride ob)) (progn (vla-put-textoverride ob " ") (vla-put-textoverride ob ind) ) ) (and (eq objname "AcDbBlockReference");Attributs (setq atts (vlax-invoke ob 'GetAttributes) lconst (getconstantatt ob)) (foreach att atts (and (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary att) "ACAD_FIELD")) (not (member (vla-get-TagString att) lconst)) (setq ind (vla-get-textstring att)) (progn (vla-put-textstring att " ") (vla-put-textstring att ind) ) ) ) ) (and (eq objname "AcDbTable");Tableaux (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ctr 0 ctc 0 ) (while (< ctr (vla-get-rows ob)) (while (< ctc (vla-get-columns ob)) (and (/= (vla-GetCellState ob ctr ctc) 1) (/= (vla-GetCellState ob ctr ctc) 17) (setq ind (vlax-invoke ob 'getcellvalue ctr ctc)) (progn (vlax-invoke ob 'setcellvalue ctr ctc " ") (vlax-invoke ob 'setcellvalue ctr ctc ind) ) ) (setq ctc (1+ ctc)) ) (setq ctc 0 ctr (1+ ctr)) ) ) ) ) );fin delfield ;;;getconstantatt ;;;bl, vla objet (block) ;;;Retourne la liste des étiquettes des attributs constants (defun getconstantatt ( bl / lc) (setq lc '()) (vlax-for bls (vla-get-blocks acdc) (if (eq (vlax-get bls 'Name)(vlax-get bl 'Name)) (vlax-for obj bls (and (= (vla-get-ObjectName obj) "AcDbAttributeDefinition") (= (vla-get-Constant obj) :vlax-true) (setq lc (cons (vla-get-TagString obj) lc)) ) ) ) ) lc ) ;Définitions de blocks (vlax-for bl (vla-get-blocks acdc) (and (= (vla-get-islayout bl) :vlax-false) (= (vla-get-IsXRef bl) :vlax-false) (= (vla-get-IsDynamicBlock bl) :vlax-false) (not (wcmatch (vla-get-name bl) "`*T*")) (vlax-for obj bl (delfield obj) ) ) ) ;Chaque présentations (vlax-for layout (vlax-get-property acdc 'layouts) (vla-put-ActiveLayout acdc layout) (vlax-for obj (vlax-get-property layout 'block) (delfield obj) ) ) (princ) );fin field2txt ;Commande pour dessin courant (defun c:f2t (/ ac) (field2txt (setq ac (vla-get-activedocument (vlax-get-acad-object)))) (vla-Regen ac acAllViewports)(princ)) Tu charge et tape f2t, et tu attend ... -
Transformation de Champ en Texte dans plusieurs présentation.
Fraid a répondu à un(e) sujet de Akkroma dans Autodesk Map
Bonjour, Le problème est lié au fait que ton champs CTAB correspond à la présentation active. Le Lisp ne change pas de présentation, et encore moins quand on traite un dossier. Je n'avais pas envisagé ce champs. Je pense pouvoir modifier le code afin de récupérer le nom de la présentation autrement si CTAB utilisé. Par contre cela sera dans la soirée. -
Transformation de Champ en Texte dans plusieurs présentation.
Fraid a répondu à un(e) sujet de Akkroma dans Autodesk Map
Bonjour, Comme je suis l'auteur du Lisp, je vais essayer de t'aider. Mais pour cela, j'aurais besoin d'un Bloc en exemple pour tester. Merci -
Bonjour, Ceci devrait t'aider.
-
Variable pour ouverture de fichiers étranger
Fraid a répondu à un(e) sujet de Fraid dans AutoCAD 2020-2024
Coucou, J'y suis aller, c'est toujours mon reflexe. Mes yeux on dut se croiser. -
Variable pour ouverture de fichiers étranger
Fraid a répondu à un(e) sujet de Fraid dans AutoCAD 2020-2024
Merci, je cherchais avec open ou trusted ... C'est qu'il y en a ... -
Bonjour, Lorsque l'on veut ouvrir un dwg issue d'un programme autre qu'Autodesk, nous avons un message d'alerte qui disparais si nous cochons une case prévue à cette effet. Je me souviens plus de la phrase exacte, genre Toujours faire confiance aux fichiers étranger. Quelle est la variable qui gère ceci? J'ai beau chercher, trouve pah ... Merci
-
Polyligne 2D en 3D depuis Attribut de blocs
Fraid a répondu à un(e) sujet de Mfruncad dans AutoCAD 2020-2024
Bonjour, Un petit lisp qui fait ce que tu demande. Si il n'y a pas de bloc à une poignée, c'est le z précédant qui est utilisé. Du coup il faut obligatoirement un bloc sur la première poignée. ; Chargement des fonctions VLA/Activex. (vl-load-com) ; getpt3dpol, récupère la liste des points d'une polyligne 2D ou 3D (defun getpt3dpol (ent / n pts) (if (= (type ent) 'VLA-OBJECT) (setq ent (vlax-vla-object->ename ent))) (setq n (1+ (fix (vlax-curve-getEndParam ent)))) (repeat n (setq pts (cons (vlax-curve-getPointAtParam ent (setq n (1- n))) pts))) ) (defun c:pol2d3dbyattrib ( / acdc mod lpt nlpt nlpt nlpts z flag) (setq acdc (vla-get-activedocument (vlax-get-acad-object)) mod (vla-get-modelspace acdc) ) (vlax-for obj mod (if (= (vla-get-ObjectName obj) "AcDbPolyline") (progn (setq lpt (getpt3dpol obj) nlpt '() z 0.0) (foreach pt lpt (setq flag nil) (vlax-for bl mod (if (and (= (vla-get-ObjectName bl) "AcDbBlockReference") (= (vla-get-hasAttributes bl) :vlax-true) (member pt (list (vlax-get bl 'InsertionPoint))) ) (foreach att (vlax-invoke bl 'GetAttributes) (if (= (vla-get-TagString att) "Altitude_GS") (setq z (atof (vla-get-textstring att)) nlpt (cons (list (car pt) (cadr pt) z) nlpt) flag 1) ) ) ) ) (if (not flag) (setq nlpt (cons (list (car pt) (cadr pt) z) nlpt))) ) (if nlpt (progn (setq nlpt (apply 'append (mapcar '(lambda (x)(list (car x) (cadr x) (caddr x))) nlpt)) nlpts (vlax-make-safearray vlax-vbDouble (cons 0 (- (length nlpt) 1)))) (vlax-safearray-fill nlpts nlpt) (vla-Add3DPoly mod nlpts) ) ) ) ) ) (princ) ) -
Sélection de bloc dans un buffer autour d'une polyligne
Fraid a répondu à un(e) sujet de Olivier Eckmann dans Pour aller plus loin en LISP
Bonjour, En fin de compte, j'ai pris le temps, cela peut servir. (vl-load-com) ; blocsinbuffer ; Renvois la liste des blocs se trouvant dans des Buffers (emprise autour d'une polyligne). ; Arg: ; pols (liste d'objet vla) ; blocs (liste d'objet vla) ; buf (entier ou réel) emprise du buffer ; ; Ret: Liste des blocs dans les buffers (liste d'objet vla) (defun blocsinbuffer ( pols blocs buf / ptpol1 ptpol2 pt1 pt2 dim ret) ; Pour chaque chaque polylignes. (foreach pol pols ; Extrémités de la polyligne. (setq ptpol1 (vlax-curve-getStartPoint pol) ptpol2 (vlax-curve-getEndPoint pol)) ; Pour chaque blocs (foreach bloc blocs ; Point d'insertion. (setq pt1 (vlax-get bloc 'InsertionPoint) ; Point situé sur la polyligne le plus proche du bloc. pt2 (vlax-curve-getClosestPointTo pol pt1) ; Distance entre ces 2 points. dim (distance pt1 pt2)) (and (<= dim buf) ; Si le bloc n'est pas en extrémité. (not (member pt2 (list ptpol1 ptpol2))) ; Ajout du bloc dans la liste en retour. (setq ret (cons bloc ret) ; Suppression du bloc dans la liste des blocs. blocs (vl-remove bloc blocs)) ) ) ) ret ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:bufbloc ( / acdc mod lblocs lpols objname lbuf emp) (setq acdc (vla-get-activedocument (vlax-get-acad-object)) mod (vla-get-modelspace acdc) emp (getreal "Emprise du Buffer: ") ) (vlax-for obj mod (setq objname (vla-get-ObjectName obj)) (if (= objname "AcDbBlockReference") (setq lblocs (cons obj lblocs))) (if (= objname "AcDbPolyline") (setq lpols (cons obj lpols))) ) (setq lbuf (blocsinbuffer lpols lblocs emp)) (foreach bloc lblocs (if (not (member bloc lbuf)) (vla-erase bloc)) ) (princ (strcat "\n " (itoa (length lbuf)) " Blocs dans les Buffers.")) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:odbx_bufbloc (/ dir axdoc mod objname lblocs lfil lpols lbuf emp) (if (and (setq dir (getdir)) (setq lfil (vl-directory-files dir "*.dwg" 1))) (progn (setq emp (getreal "Emprise du Buffer: ")) (foreach f lfil (if (setq axdoc (getaxdbdoc (strcat dir f))) (progn (setq mod (vla-get-modelspace axdoc) lblocs '() lpols '()) (vlax-for obj mod (setq objname (vla-get-ObjectName obj)) (if (= objname "AcDbBlockReference") (setq lblocs (cons obj lblocs))) (if (= objname "AcDbPolyline") (setq lpols (cons obj lpols))) ) (setq lbuf (blocsinbuffer lpols lblocs emp)) (foreach bloc lblocs (if (not (member bloc lbuf)) (vla-erase bloc)) ) (vla-saveas axdoc (strcat dir f)) (vlax-release-object axdoc) ) (princ (strcat "\n" f ": Illegible or corrupt.")) ) ) (princ "\n " (itoa (length lfil)) " fichiers traités") ) (princ "\nHave you lost your way?") ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getdir( / shell rep) (setq shell (vlax-create-object "Shell.Application") rep (vlax-invoke shell 'browseforfolder 0 "Choose folder" 512 "" ) ) (vlax-release-object shell) (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getaxdbdoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename)) (not (vlax-release-object axdbdoc)) axdbdoc ) ) La fonction blocsinbuffer, peut être lancé dans le dessin courant avec la commande bufbloc, ou pour traiter un dossier avec odbx_bufbloc. C'est plus rapide qu'avec décaler. Dans mon exemple je supprime les blocs qui ne se trouve pas dans le buffer. -
Sélection de bloc dans un buffer autour d'une polyligne
Fraid a répondu à un(e) sujet de Olivier Eckmann dans Pour aller plus loin en LISP
Pour ignorer les blocs qui se trouve dans la zone "arrondie". On garde de coté le point obtenu avec vlax-curve-getClosestPointTo On calcul l'angle du bloc a ce dernier On calcul l'angle premier point deuxième point de la polyligne. Si le point du bloc est égal au premier point de la polyligne et si l'angle du bloc n'est pas égal à celui de la poly - pi/2 et + pi/2 le bloc n'est pas sélectionne ... on fait la même chose pour l'autre extrémité. comme tu connais le Lisp je n'ais pas pris le temps de le coder. Bonne pêche aux blocs ! -
Sélection de bloc dans un buffer autour d'une polyligne
Fraid a répondu à un(e) sujet de Olivier Eckmann dans Pour aller plus loin en LISP
Un chalenge, comment ignorer cette zone. -
Sélection de bloc dans un buffer autour d'une polyligne
Fraid a répondu à un(e) sujet de Olivier Eckmann dans Pour aller plus loin en LISP
Je pense que je me suis mal exprimé. Avec la fonction vlax-curve-getClosestPointTo par exemple. ; Distptpol ; Distance mini entre un point et une polyligne. ; Args: pt Liste de coordonnées (10.0 12.0 0.0) ; vpol Objet vla "Polyligne" ; Ret: Réel (defun distptpol (pt vpol / ret) (setq ret (distance (vlax-curve-getClosestPointTo vpol pt) pt)) ) (distptpol (getpoint "\nClique un point:") (vlax-ename->vla-object (car (entsel)))) A toi de sélectionner les blocs à traiter par rapport à la polyligne ( une selection avec les coordonnées des extrémités décaler de 10 par exemple) -
Sélection de bloc dans un buffer autour d'une polyligne
Fraid a répondu à un(e) sujet de Olivier Eckmann dans Pour aller plus loin en LISP
Bonjour, Je suis peux être à coté de la plaque, mais en calculant simplement la distance en les vertex et les blocs? On n'a pas le même Buffer, mais peut être que cela te conviendrais quand même, surtout pour traiter un grand nombre d'objets. -
Utilisation des curseurs "DCL" en temps réel ?
Fraid a répondu à un(e) sujet de Hey_Its_Sanka dans ObjectDCL
Bonjour, Je pense que ce sont les ascenseurs, la tuile DCL slider. Montre nous ton code DCL avec + -, cela nous aiderais à t'aider. -
Utilisation des curseurs "DCL" en temps réel ?
Fraid a répondu à un(e) sujet de Hey_Its_Sanka dans ObjectDCL
Bonjour, Peut tu nous expliquer ce que c'est? De quelle coupe parle tu? Je ne comprend rien. Suis je le seul? -
Bonjour, Si tu fait comme cela, ta carte ou vue sat, ne seras pas vraiment calée. Au lieu de l'adresse, les coordonnées géographiques WSG84 (conversion des coordonnées du point choisi) comme ceci 5.355651287573366, 45.96240165432621 sont préférables et l'angle demandé en finale est celui de la convergence du méridien au point + 100.
-
Cotes biaises affichants la valeur delta
Fraid a répondu à un(e) sujet de Manbess dans AutoCAD, liste de souhaits
Avec plaisir, il y a tout ce qu'il faut à St Malo pour cela.
