pelloux Posté(e) le 11 janvier 2013 Posté(e) le 11 janvier 2013 Bonsoir J'ai à ma disposition un millier de fichiers dwg. Je recherche un moyen de classer tous mes fichiers selon qu'ils sont compris ou pas dans une emprise géographique précise. Je ne vois pour cela que la création d'un programme. Ce dernier ouvrirait chacun des fichiers et examinerait si la condition concernant l'emprise géographique est respectée. Mon emprise géographique est comprise dans un rectangle : point supérieur gauche : X=1534000Y=8272000 point inférieur droite : X=1578000Y=8224000 Si les objets ne sont pas strictement compris dans ce périmètre, le fichier est mis dans un répertoire 1.Si tous les objets sont compris dans ce périmètre, le fichier est mis dans un répertoire 2. Par avance merci pour votre aide. PH PELLOUX
lecrabe Posté(e) le 11 janvier 2013 Posté(e) le 11 janvier 2013 Hello Ton histoire me laisse "reveur" car cela suppose que tes 1000 DWGs n'ont AUCUN objet graphique dessine "a perpete" (un rate de dessin en fait), cad en dehors de la vraie zone UTILE du projet ! Donc tu as deja fais (dans l'onglet Objet), un Zoom Etendu sur tes 1000 DWGs pour etre sur qu'ils sont OK ? A ce moment seulement, tu pourras envisager de voir si les entites graphqiues sont totalement ou non incluses dans le rectangle voulu ... En effet il faut un developpement specifique, car meme si le groupe de dessins de MAP pourrait interroger les 1000 DWGs (ou peut etre plutot par paquet de 100/200), les requetes te permettront SEULEMENT de dessiner dans un dessin vierge (le DWG courant en fait) les objets inclus (OU PAS) dans le fameux rectangle (ou polygone quelconque) ! As tu une idee approximative du nbr de dessin repondant a chaque critere ? lecrabe Autodesk Expert Elite Team
pelloux Posté(e) le 14 janvier 2013 Auteur Posté(e) le 14 janvier 2013 Salut le Crabe Ton histoire me laisse "reveur" car cela suppose que tes 1000 DWGs n'ont AUCUN objet graphique dessine "a perpete" (un rate de dessin en fait), cad en dehors de la vraie zone UTILE du projet ! Effectivement on pourrait plutôt raisonner de cette manière : Si au moins un objet est compris dans ce périmètre, le fichier est mis dans un répertoire 1.Si aucun objet n'est compris dans ce périmètre, le fichier est mis dans un répertoire 2. Pour le reste je ne suis pas certain d'avoir tout compris dans ta réponse. Pourrais tu m'expliquer comment une requête à partir d'un dessin vierge permet de savoir si des données sont comprise ou pas comprise dans l'emprise en question ? J'ai ma petite idée mais je ne l'ai jamais mis en pratique. Quel langage utiliser pour ce type de problème ? Connais-tu une société qui peut me le développer (et le coût éventuel de cette prestations) ? Bonne soirée. PH PELLOUX
lili2006 Posté(e) le 14 janvier 2013 Posté(e) le 14 janvier 2013 Bonne Année à toutes et tous, Pourrais tu m'expliquer comment une requête à partir d'un dessin vierge permet de savoir si des données sont comprise ou pas comprise dans l'emprise en question ?Je verrai bien : Ouvrir un nouveau dessin,Associer un des plans à traiter,Définir une requête type "Emplacement_Polyligne_Intérieure (et là tu mentionnes tes coordonnées)Option "Dessiner"Dissocier le plan traitéRefermer le plan avec le même nom et en suffixe "traité", ou quelque chose dans le genre,.. Peut_être en script avec ensuite l'utilisation de SAS de Eric par exemple ? J'ai ma petite idée mais je ne l'ai jamais mis en pratique. C'est à ça que tu pensais aussi ? Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 14 janvier 2013 Posté(e) le 14 janvier 2013 Hello La gestion du groupe de dessins est Scriptable donc ca devrait faire ... Par contre cela ne repondra peut etre pas parfaitement aux besoins exprimes !? lecrabe PS: au fait, tu as suivi une formation ?Si Oui, avec qui SVP ? Autodesk Expert Elite Team
pelloux Posté(e) le 16 janvier 2013 Auteur Posté(e) le 16 janvier 2013 PS: au fait, tu as suivi une formation ?] Tu veux dire la formation Autodesk MAP de base de l'année dernière ? Je l'ai faite avec Géomédia (notre service formation a estimé que comme on avait été formé par eux sur Covadis on pouvait leur faire confiance). Pour continuer sur le sujet : Attention : Il s'agit simplement de faire une requête et de déterminer si il a y a des objets dans cette zone d'intérêt, et pas de récupérer les objets de la zone d'intérêt dans un nouveau fichier. On pourrait simplement introduire une condition qui orienterait le fichier vers l'un des 2 répertoires suite à la requête. Comme on peut introduire une condition sous forme de LISP dans un script je pense que c'est faisable assez facilement. J'ai donc besoin de vous pour ce petit lisp. @+ PH PELLOUX
alala Posté(e) le 16 janvier 2013 Posté(e) le 16 janvier 2013 Tout ceci est théorique car je ne l'ai pas testé (je n'ai jamais eu l'occasion de tenter de scipter les actions MAP) :- Si l'on peu scripter l'association de plan- si l'on peu scripter la création de requettes L'on peu associer un plan et faire une requette avec un rapport qui porterais le nom du fichier associéSachant qu'une requette qui ne retourne aucun objet ne génére pas de rapport, il suffirait d'associer un plan, de créer une requette sur un polygone, de demander un rapport que l'on configurera pour qu'il porte le nom du fichier associé. L'on scripte tout ça avec un logiciel de type scripteur, et le tour est joué. Au pire l'on peu faire un lisp (un ssget fera ça très très bien), mais si le but est de le faire en MAP uniquement je ne vois pas d'autre méthodes. ps: j'ai tenté de mettre en bloc "n" plansDe l'associer dans un plan vide, et de faire une requette spaciale.Le soucis c'est que l'on n'intéroge 0 objets car les blocs (plans d'origine) sont inséré en 0,0. Peu être qu'il y a un moyen de fouiller dans les sous objets des blocs mais de ne retourner dans un rapport que le nom du bloc lié, ça arrangerait tout. C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
Olivier Eckmann Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Bonjour, Si tu crées une requête et que tu l'enregistre en requête externe, tu obtiens un fichier QRY que tu peux ouvrir avec le bloc-note (en fait c'est un enchaînement de commande Lisp) (setq ade_cmddia_before_qry (getvar "cmddia")) (setvar "cmddia" 0) (mapcar 'ade_dwgdeactivate (ade_dslist)) (setq ade_tmpprefval (ade_prefgetval "ActivateDwgsOnAttach")) (ade_prefsetval "ActivateDwgsOnAttach" T) (setq dwg_id(ade_dsattach "C:\\DONNEES\\Dessin2.dwg")) (ade_prefsetval "ActivateDwgsOnAttach" ade_tmpprefval) (ade_qryclear) (ade_qrysettype "draw") (ade_qrydefine '("" "" "" "Location" ("window" "crossing" (1534000.000000 8224000.000000 0.000000)(1578000.000000 8272000.000000 0.000000))"")) (ade_qrysetaltprop nil) (ade_qryexecute) (setvar "cmddia" ade_cmddia_before_qry) il suffit que tu ajoutes à la fin le test sur la présence d'objet ou pas dans l'espace objet ; test si objet dans l'espace Objet (if (ssget "x" (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (command "sh" "copy C:\\DONNEES\\Dessin2.dwg c:\\DONNEES\\Dedans\\Dessin2.dwg") ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (command "sh" "copy C:\\DONNEES\\Dessin2.dwg c:\\DONNEES\\Dehors\\Dessin2.dwg") ) A partir de là il suffit de scripter une boucle en remplacant DESSIN2.DWG par chacun des noms de tes DWG du dossier Si tu n'y parviens pas, tu peux m'envoyer un MP, on peut te développer ça. Olivier
alala Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Si l'on part sur du lisp la partie MAP ne sert à rien, il suffit de faire une légére adatation :; test si l'on dispose d'un objet dans une zone de l'espace Objet (defun c:dispzone ( / MonPlan) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OK\\" (getvar 'DWGNAME)) acNative) ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "KO\\" (getvar 'DWGNAME)) acNative) ) (princ) (command "._close" "o") ) On charge le lisp au démarage et ou fait un script pour ouvrir le plan et lancer le lisp! C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
lecrabe Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Hello YES pour Olivier : les fichiers de requetes externes (".QRY") permettent de nombreuses "magouilles" ! YES pour Alala : a mon avis, un simple Lisp/VLisp (+ Script sur les N DWGs) est bien suffisant ! Cependant je serais plutot interesse par une variante de la routine de Alala : 1 - Liste de points XY (et non pas un simple rectangle) : en fait sommets/vertex d'une polyligne 2D close 2 - Option de selection: Mode Fenetre Normale ou Mode Fenetre Capturante SVP serait il possible d'avoir cette "petite" variante ? Merci d'avance, lecrabe Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Bonjour, Dans le cas d'un script, l’intérêt de passer par MAP est que l'on s'affranchit de 2 problèmes potentiels:- ouvrir le dessin => que se passe-t-il s'il y a un message à l'ouverture (shx manquant, purge échelle d'annotation, applicatif (macro) quelconque qui affiche un message...)- sélection graphique => vérifier que l'on est en Espace objet, activer et libérer tous les calques, SCU..., un objet non graphique ne sera pas sélectionné. Avec MAP, le dessin n'est pas ouvert dans l'éditeur car la requête est exécutée sur la database, uniquement sur l'espace objet et indépendamment des calques, SCU et graphismes des objets.D'autre part, s'il faut une requête plus élaborée qu'un simple rectangle, il suffit de la construire avec l'éditeur de MAP, puis de la sauvegarder en QRY. Tu n'as pas à mettre les mains dans le "cambouis" du Lisp pour construire ton filtre de requête, et le test que l'on rajoute à la fin vérifie toujours la même chose. D'autre part, le fait de passer par un SaveAs plutôt que par Copy (sous DOS) change la date et l'heure du DWG, ainsi que sa version, Cependant le Saveas s'affranchit des chemins de noms longs ou avec espace qui peuvent poser problème à la commande Copy. Ceci dit, la solution graphique portant sur le dessin courant reste une solution très intéressante, plus simple et indépendante du moteur MAP. Olivier
alala Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Si l'on pense à un script il faut changer les options du ssget"_CP" pour un polygone de sélection avec les objets qui le touchent."_WP" pour un polygone de sélection Sans les objets qui le touchent.La liste des points se retournes de la manière suivante :'((x1 y1) (x2 y2) (x3 y3) ...) Donc pour une sélection dans un polygone (objets qui touchent incluent) l'on remplacera :(ssget '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))par :(ssget "_CP" '((1534000 8272000)(1534000 8224000)(1578000 8224000)(1578000 8272000)) (list (cons 410 "Model")) L'on peu aussi faire un lisp plus complet qui posera plein de questions :(defun c:dispzone ( / MonPlan pt PtList) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (setq ptlist '()) (while (setq pt (Getpoint "Sélectionner un point pour créer une Zone : ")) (setq PtList (append PtList (list pt))) (princ "\n") ) (initget "Avec Sans") (setq OptPoly(getkword "Avec ou Sans les objets sur le polygone? (Avec Sans) \n")) (if (= OptPoly "Avec") (setq OptSs "_CP") (setq OptSs "_WP") ) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget OptSs ListPt (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OK\\" (getvar 'DWGNAME)) acNative) ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "KO\\" (getvar 'DWGNAME)) acNative) ) (princ) (command "._close" "o") ) Mais ici ça a peu d'intérêt! C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
lecrabe Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Hello Merci a TOUS, c tres interessant ce sujet ! En effet la solution de Olivier : lancer un Shell (SH) et faire un COPY permet de ne pas changer Date/Heure du DWG ce qui peut s'averer important ! lecrabe Autodesk Expert Elite Team
alala Posté(e) le 17 janvier 2013 Posté(e) le 17 janvier 2013 Bonjour, Dans le cas d'un script, l’intérêt de passer par MAP est que l'on s'affranchit de 2 problèmes potentiels:- ouvrir le dessin => que se passe-t-il s'il y a un message à l'ouverture (shx manquant, purge échelle d'annotation, applicatif (macro) quelconque qui affiche un message...)- sélection graphique => vérifier que l'on est en Espace objet, activer et libérer tous les calques, SCU..., un objet non graphique ne sera pas sélectionné. Avec MAP, le dessin n'est pas ouvert dans l'éditeur car la requête est exécutée sur la database, uniquement sur l'espace objet et indépendamment des calques, SCU et graphismes des objets.D'autre part, s'il faut une requête plus élaborée qu'un simple rectangle, il suffit de la construire avec l'éditeur de MAP, puis de la sauvegarder en QRY. Tu n'as pas à mettre les mains dans le "cambouis" du Lisp pour construire ton filtre de requête, et le test que l'on rajoute à la fin vérifie toujours la même chose. D'autre part, le fait de passer par un SaveAs plutôt que par Copy (sous DOS) change la date et l'heure du DWG, ainsi que sa version, Cependant le Saveas s'affranchit des chemins de noms longs ou avec espace qui peuvent poser problème à la commande Copy. Ceci dit, la solution graphique portant sur le dessin courant reste une solution très intéressante, plus simple et indépendante du moteur MAP. Oliviertente alors d'inserer en bloc dans un fichier un certain nombre de tes plans (pas trop pour éviter la saturation).Puis sur un autre fichier vide tu associe ce plan.Tu fait une requette avec rapport qui retourne le nom du bloc.Et dans "autres" dans le fenetre de requette tu a l'option "Indication emplacements de blocs avec", qui faut surrement sélectionner en "Zone de contour".De la tu optiendra une liste des plans dans la zone, et pourra faire un "script" DOS de déplacementdes fichiers! Pour insérer dans un plan tous les fichiers qui sont dans un répertoire j'ai réalisé ce LISP (qui me sert à mettre à jour mes blocs dans un plan) :(defun c:insertblocmaj ( / UserFile UserDir FileList ) (setq UserFile (getfiled "Select Any Drawing File to Process the Entire Directory" "" "dwg" 16 ) ) (setq UserDir (vl-filename-directory UserFile ) ) (setq FileList (vl-directory-files UserDir "*.dwg" 1 ) ) (mapcar '(lambda (x) (command "_.insert" (strcat (vl-filename-base (strcat UserDir "\\" x)) "=" UserDir "\\" x ) "0,0,0" "1" "1" "0")) FileList) (princ) ) C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
pelloux Posté(e) le 18 janvier 2013 Auteur Posté(e) le 18 janvier 2013 Bonjour Merci pour vos contributions. J'ai un impératif encore aujourd'hui. Je me remets à ce développment dès que possible et vous tiens au courant concernant l'introduction de ce lisp dans mon script. PH PELLOUX
fabcad Posté(e) le 22 janvier 2013 Posté(e) le 22 janvier 2013 Bonjour à tous, Lisant avec intérêt les différentes solutions proposées j'ai une question. En passant par une qry et si le dessin projet possède un système de coordonnées, je crois qu'une requête modifie la situation géographique des objets, donc si les dessins sources ont un système de coordonnées, ils se trouveront dans la zone concernée d'où un résultat incorrect.. Je penchais, pour ma part, faire un script/lisp sur tous les dessins à contrôler. Sur chaque dessin, en faire un fichier temporaire, ouvrir ce dernier, contrôler l'emprise et déplacer l'original dans le bon dossier et passer au dessin suivant. A+
pelloux Posté(e) le 22 janvier 2013 Auteur Posté(e) le 22 janvier 2013 Bonjour J'ai testé hier le script d'ECKMANN et le Lisp de ALALA. Dans les 2 cas je n'ai pas de résultat. J'ai donc essayé de voir si cela ne provenait pas d'une utilisation incorrecte de ma part. N'ayant rien trouvé d'incorrect, je vous donne les résultats en ligne de commande. Pour info : - J'ai crée 2 sous dossiers DEDANS et DEHORS vides. - j'ai crée un fichier "polyligne_in.dwg" dans le repertoire parent, contenant une polyligne se trouvant entièrement dans la zone d'intérêt. Pour le script d’Eckmann, posté 17 janvier 2013 - 10:37 : Commande: '_script Commande: (setq ade_cmddia_before_qry (getvar "cmddia")) 1 Commande: (setvar "cmddia" 0) 0 Commande: (mapcar 'ade_dwgdeactivate (ade_dslist)) nil Commande: (setq ade_tmpprefval (ade_prefgetval "ActivateDwgsOnAttach")) T Commande: (ade_prefsetval "ActivateDwgsOnAttach" T) T Commande: (setq dwg_id(ade_dsattach "C:\\DONNEES\\Dessin2.dwg")) nil Commande: (ade_prefsetval "ActivateDwgsOnAttach" ade_tmpprefval) T Commande: (ade_qryclear) T Commande: (ade_qrysettype "draw") T Commande: (ade_qrydefine '("" "" "" "Location" ("window" "crossing" (1534000.000000 8224000.000000 0.000000)(1578000.000000 8272000.000000 0.000000))"")) 3.66198e+008 Commande: (ade_qrysetaltprop nil) T Commande: (ade_qryexecute) La requête a extrait 0 objet(s).0.0 Commande: (setvar "cmddia" ade_cmddia_before_qry) 1 Commande: Enregistrement automatique vers C:\Documents and Settings\pelloux\local settings\temp\rectangle_in_1_1_1759.sv$ ... Commande: Quand je vais dans Définir requête, j'ai bien dans "Requête courante" : "Emplacement INTERSECTION FERMEE"Quand je vais dans "Modifier" : "Fenêtre", "Intersection" j'ai les 4 coordonnées d'emplacement (1534000,8224000;...;1534000,8272000). Pour info :- Exécuter tel que défini -> La requête a extrait 0 objet.- Aucune trace du fichier qry. je n'ai pas testé ton LISP qui suit le script. Pour le lisp d’Alala,posté 17 janvier 2013 - 14:57 : Dispzone >Sélectionner un point pour créer une Zone : Click d’un point à l’écran >Sélectionner un point pour créer une Zone : Click d’un autre point à l’écran Avec ou Sans les objets sur le polygone? (Avec Sans) >Avec >Régénération du modèle. >Commande: ; erreur: nombre d'arguments trop important >Commande: Question : A la question "Avec ou Sans les objets sur le polygone? (Avec Sans)" En fait la question ne se pose puisqu'il s'agit des objets à l'intérieur (ou au moins à cheval sur la zone d'intérêt). D'où viendrait l'erreur ? :) Par avance merci pour vos réponses. Ce qu'à indiqué Fabcad est ce que je recherche : Je penchais, pour ma part, faire un script/lisp sur tous les dessins à contrôler. Sur chaque dessin, en faire un fichier temporaire, ouvrir ce dernier, contrôler l'emprise et déplacer l'original dans le bon dossier et passer au dessin suivant. @+ PH PELLOUX
pelloux Posté(e) le 22 janvier 2013 Auteur Posté(e) le 22 janvier 2013 Bonjour J'ai testé hier le script d'ECKMANN et le Lisp de ALALA. Dans les 2 cas je n'ai pas de résultat. J'ai donc essayé de voir si cela ne provenait pas d'une utilisation incorrecte de ma part. N'ayant pas résolu le problème, je vous donne les résultats en ligne de commande. Pour info : - J'ai crée 2 sous dossiers DEDANS et DEHORS vides. - j'ai crée un fichier "polyligne_in.dwg" dans le repertoire parent, contenant une polyligne se trouvant entièrement dans la zone d'intérêt. Pour le script d’Eckmann, posté 17 janvier 2013 - 10:37 : Commande: '_script Commande: (setq ade_cmddia_before_qry (getvar "cmddia")) 1 Commande: (setvar "cmddia" 0) 0 Commande: (mapcar 'ade_dwgdeactivate (ade_dslist)) nil Commande: (setq ade_tmpprefval (ade_prefgetval "ActivateDwgsOnAttach")) T Commande: (ade_prefsetval "ActivateDwgsOnAttach" T) T Commande: (setq dwg_id(ade_dsattach "C:\\DONNEES\\Dessin2.dwg")) nil Commande: (ade_prefsetval "ActivateDwgsOnAttach" ade_tmpprefval) T Commande: (ade_qryclear) T Commande: (ade_qrysettype "draw") T Commande: (ade_qrydefine '("" "" "" "Location" ("window" "crossing" (1534000.000000 8224000.000000 0.000000)(1578000.000000 8272000.000000 0.000000))"")) 3.66198e+008 Commande: (ade_qrysetaltprop nil) T Commande: (ade_qryexecute) La requête a extrait 0 objet(s).0.0 Commande: (setvar "cmddia" ade_cmddia_before_qry) 1 Commande: Enregistrement automatique vers C:\Documents and Settings\pelloux\local settings\temp\rectangle_in_1_1_1759.sv$ ... Commande: Quand je vais dans Définir requête, j'ai bien dans "Requête courante" : "Emplacement INTERSECTION FERMEE"Quand je vais dans "Modifier" : "Fenêtre", "Intersection" j'ai les 4 coordonnées d'emplacement (1534000,8224000;...;1534000,8272000). Pour info :- Exécuter tel que défini -> La requête a extrait 0 objet.- Aucune trace du fichier qry. je n'ai pas testé ton LISP qui suit le script. Pour le lisp d’Alala,posté 17 janvier 2013 - 14:57 : Dispzone >Sélectionner un point pour créer une Zone : Click d’un point à l’écran >Sélectionner un point pour créer une Zone : Click d’un autre point à l’écran Avec ou Sans les objets sur le polygone? (Avec Sans) >Avec >Régénération du modèle. >Commande: ; erreur: nombre d'arguments trop important >Commande: Question : A la question "Avec ou Sans les objets sur le polygone? (Avec Sans)" En fait la question ne se pose puisqu'il s'agit des objets à l'intérieur (ou au moins à cheval sur la zone d'intérêt). D'où viendrait l'erreur ? :) Par avance merci pour vos réponses. Ce qu'à indiqué Fabcad est ce que je recherche : Je penchais, pour ma part, faire un script/lisp sur tous les dessins à contrôler. Sur chaque dessin, en faire un fichier temporaire, ouvrir ce dernier, contrôler l'emprise et déplacer l'original dans le bon dossier et passer au dessin suivant. @+ PH PELLOUX
alala Posté(e) le 22 janvier 2013 Posté(e) le 22 janvier 2013 Pour le lisp que j'ai créer et que tu utilise je n'ait pas fait de zonne de sélection visible mais pour faire un rectangle il te faut quatres points. Le mieux, si tu utilise une zone rectangulaire à la souris est de prendre ce LISP : ; test si l'on dispose d'un objet dans une zone de l'espace Objet (defun c:dispzone ( / MonPlan) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OK\\" (getvar 'DWGNAME)) acNative) ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "KO\\" (getvar 'DWGNAME)) acNative) ) (princ) (command "._close" "o") ) Et donc si tu connais à l'avance ton emprise à contrôler :; test si l'on dispose d'un objet dans une zone de l'espace Objet (defun c:dispzone ( / MonPlan) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OK\\" (getvar 'DWGNAME)) acNative) ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "KO\\" (getvar 'DWGNAME)) acNative) ) (princ) (command "._close" "o") )ou '(1534000 8272000) '(1578000 8224000) est l'expression des coordonnées de la zone de sélection. (donc à adapter à ta zone) C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
pelloux Posté(e) le 22 janvier 2013 Auteur Posté(e) le 22 janvier 2013 J'ai appliqué le 2ième lisp avec l'emprise : (if (ssget '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) ; test si l'on dispose d'un objet dans une zone de l'espace Objet (defun c:dispzone ( / MonPlan) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier DEDANS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OK\\" (getvar 'DWGNAME)) acNative) ; si PAS d'objet en espace Objet ALORS copie le DWG dans le sous-dossier DEHORS (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "KO\\" (getvar 'DWGNAME)) acNative) ) (princ) (command "._close" "o") ) Une fois le lisp lancé, je n'ai plus de message d'erreur en ligne de commande par contre mon fichier reste ouvert et n'est pas enregistré dans le dossier DEDANS. :( Est-ce normal ? PH PELLOUX
alala Posté(e) le 22 janvier 2013 Posté(e) le 22 janvier 2013 Arf j'ai faitune erreur dans le code, je m'en excuse. Déjà il faut ajouter le "_C" pour un rectangle de sélection avec les bord inclus.Ou "_W" pour un rectangle avec les bord exclus. (ssget "_C" '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) Donc le dossier que j'ai définit dans celui ci pour les fichiers dans la zone est "OK" et les fichiers hors zone est "KO". Dans le LISP fournis il te faut changer ces deux nom pour qu'ils correspondents au dossier ou tu souhaite mettre tes fichiers de chaque genre. Les dossiers doivents exister, normalement ça ne devrais plus poser de soucis. Donc : (defun c:dispzone ( / MonPlan) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget "_C" '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) ; si il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier OK (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OK\\" (getvar 'DWGNAME)) acNative) ; si PAS d objet en espace Objet ALORS copie le DWG dans le sous-dossier KO (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "KO\\" (getvar 'DWGNAME)) acNative) ) (princ) (command "._close" "o") ) "Normalement" plus de soucis! C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
fabcad Posté(e) le 22 janvier 2013 Posté(e) le 22 janvier 2013 Re-Bonjour, Un dessin ouvert dans AutoCAD ou associé dans AutoCAD MAP est verrouillé et donc non déplacable dans windows. C'est pourquoi je préconisais une copie temporaire afin de déplacer le vrai fichier . A+
alala Posté(e) le 22 janvier 2013 Posté(e) le 22 janvier 2013 Associé oui, ouvert non si l'on fait un "enregistrer sous" (Save as) comme dans le code proposé!La est l'astuce. Pou un plan associé effectivement il faudra passer par une phase de copie du fichier. C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
pelloux Posté(e) le 23 janvier 2013 Auteur Posté(e) le 23 janvier 2013 Arf j'ai faitune erreur dans le code, je m'en excuse. Déjà il faut ajouter le "_C" pour un rectangle de sélection avec les bord inclus.Ou "_W" pour un rectangle avec les bord exclus. "Normalement" plus de soucis! Bonsoir Effectivement ça marche. Les fichiers sont copiés dans soit dans le dossier "RGF_93" soit dans le dossier "OUT". Pour conclure : Le script contient ceci : (load "verification_emprise.lsp") dispzone et le lisp contient cela : defun c:dispzone ( / MonPlan) (vl-load-com) (setq MonPlan(vla-get-activedocument(vlax-get-acad-object))) (vla-ZoomAll (vlax-get-acad-object)) (if (ssget "_C" '(1534000 8272000) '(1578000 8224000) (list (cons 410 "Model"))) ; SI il y a des objets en espace Objet ALORS copie le DWG dans le sous-dossier RGF93_CC49 (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "RGF93_CC49\\" (getvar 'DWGNAME)) acNative) ; SI PAS d objet en espace Objet ALORS copie le DWG dans le sous-dossier OUT (vla-SaveAs MonPlan (strcat (getvar 'DWGPREFIX) "OUT\\" (getvar 'DWGNAME)) acNative) ) (princ) ;(command "._close" "o") en commentaire car fait planter SuperAutoScript ) En fin de lisp, j'ai mis ;(command "._close" "o") en commentaire pour pouvoir utiliser le script/lisp avec SuperAutoScript. La seule chose que je ne m'explique pas c'est qu'en plus du dwg, un .bak est crée pour chacun des fichiers dans les 2 dossiers. En tous cas merci à tous les contributeurs à ce sujet (le bonsoir à Fabcad qui me passe des tuyaux en off). PH PELLOUX
pelloux Posté(e) le 23 janvier 2013 Auteur Posté(e) le 23 janvier 2013 Sinon comment fait-on pour indiquer que le sujet a été résolu ? PH PELLOUX
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant