aldo127 Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Bonjour, Je cherche une routine pour convertir une polyligne 3D en polyligne 2D en remettant toutes les coordonées Z à zéro. Je ne n'en ai pas trouvée sur le forum. merci [Edité le 9/12/2009 par aldo127]
lecrabe Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Hello Tu peux utiliser la routine / macro classique d'ecrasement au niveau ZERO ! SVP tu regardes ma reponse No 3 :http://www.cadxp.com/sujetXForum-26102.htm Le Decapode Autodesk Expert Elite Team
lecrabe Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Hello Et sinon la fabuleuse routine de (gile) en Juin 2009 : 3DPto2DP.lsp Qui construit une polyligne 2D a partir d'une polyligne 3D soit au niveau Z Minimumsoit au niveau Z Maximumsoit au Niveau Z Moyen Tu pourras toujours apres remettre le Z a ZERO facilement ! Donc qq recherches sur les forums, seront necessaires ... Merci Gilles, Le Decapode Autodesk Expert Elite Team
aldo127 Posté(e) le 8 décembre 2009 Auteur Posté(e) le 8 décembre 2009 Zero, je l'ai, mais ça reste une 3dpoly, donc impossible de faire un offset de la dite polyligne.Il faut absolument la transformer en polyligne 2d pour pouvoir faire un offset. Tu n'as pas le lien vers le fichier ou l'article de Gilles avec son lisp 3dpto2dp.lsp Merci
lecrabe Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Hello http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=24255#pid104447 Le Decapode "genereux" Autodesk Expert Elite Team
bonuscad Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 (modifié) Je viens d'achever une routine de projection, si ça te dit d'essayer! Elle est capable de projeter toute entité filaire (curviligne) 2D/3D depuis n'importe quel SCU de conception vers le SCG avec un Z à 0. Elle projette en discrétisant si nécessaire la courbe d'origine, dans ce cas; c'est une polyligne 2D à multiple sommets qui est générée. (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (vl-load-com) (defun c:my_project ( / jspl nbr n AcDoc Space UCS save_ucs WCS ent_name indx l_blg l_pt ename id_obj pl_typ index nw_pl) (setq jspl (ssget '((-4 . "<OR") (-4 . "<AND") (0 . "POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>") (0 . "LWPOLYLINE,LINE,SPLINE,ARC,CIRCLE,ELLIPSE,POINT") (-4 . "OR>")) ) nbr -1 n 0 ) (cond (jspl (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) UCS (vla-get-UserCoordinateSystems AcDoc) save_ucs (vla-add UCS (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point (getvar "UCSXDIR")) (vlax-3d-point (getvar "UCSYDIR")) "CURRENT_UCS" ) ) (vla-put-Origin save_ucs (vlax-3d-point (getvar "UCSORG"))) (vla-StartUndoMark AcDoc) (setq WCS (vla-add UCS (vlax-3d-Point '(0.0 0.0 0.0)) (vlax-3d-Point '(1.0 0.0 0.0)) (vlax-3d-Point '(0.0 1.0 0.0)) "TEMP_WCS")) (vla-put-activeUCS AcDoc WCS) (repeat (sslength jspl) (setq ent_name (ssname jspl (setq nbr (1+ nbr))) indx -1 l_blg nil l_pt nil ename (vlax-ename->vla-object ent_name) id_obj (vla-get-ObjectName ename) ) (cond ((member id_obj '("AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline")) (setq pl_typ (if (vlax-property-available-p ename 'Type) (vlax-get ename 'Type))) (if (member id_obj '("AcDbPolyline" "AcDb2dPolyline")) (if (not (equal (vlax-get ename 'Normal) '(0.0 0.0 1.0) 1E-13)) (progn (repeat (fix (vlax-curve-getEndParam ename)) (setq l_pt (cons (vlax-curve-GetPointAtParam ename (setq indx (1+ indx))) l_pt) index (float indx)) (if (or (eq pl_typ 1) (if (< pl_typ 3) (not (zerop (vla-GetBulge ename indx))))) (while (eq indx (fix (+ 0.01 index))) (setq l_pt (cons (vlax-curve-GetPointAtParam ename (setq index (+ 0.01 index))) l_pt)) ) ) ) (setq l_pt (cons (vlax-curve-getEndPoint ename) l_pt)) ) (setq l_pt (mapcar '(lambda (x) (trans (list (car x) (cadr x) (- ;+ (if (eq id_obj "AcDbPolyline") (caddr x) 0.0) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) ent_name 0 ) ) (l-coor2l-pt (vlax-get ename 'Coordinates) (eq id_obj "AcDb2dPolyline")) ) ) ) (setq l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) T)) ) (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) (setq nw_pl (vlax-invoke Space 'AddPolyline (apply 'append l_pt))) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) (if (vlax-property-available-p ename 'Type) (progn (setq pl_typ (if (eq (vla-get-ObjectName ename) "AcDb3dPolyline") (if (zerop (vlax-get ename 'Type)) (vlax-get ename 'Type) (1+ (vlax-get ename 'Type))) (vlax-get ename 'Type) ) ) (if (and (vlax-property-available-p ename 'Normal) (not (equal (vlax-get ename 'Normal) '(0.0 0.0 1.0) 1E-13)) (eq pl_typ 1)) (vla-put-Type nw_pl 0) (vla-put-Type nw_pl pl_typ) ) ) (if (and (vlax-property-available-p ename 'Normal) (equal (vlax-get ename 'Normal) '(0 0 1) 1E-13)) (progn (repeat (length l_pt) (setq l_blg (cons (vla-GetBulge ename (setq indx (1+ indx))) l_blg))) (foreach el l_blg (vla-SetBulge nw_pl indx el) (setq indx (1- indx))) ) ) ) (vla-put-Closed nw_pl (vlax-get ename 'Closed)) ) ((member id_obj '("AcDbEllipse" "AcDbCircle" "AcDbArc")) (if (not (equal (vlax-get ename 'Normal) '(0.0 0.0 1.0) 1E-13)) (progn (setq index (vlax-curve-getStartParam ename) l_pt (list (vlax-curve-GetPointAtParam ename index)) ) (while (< (setq index (+ 0.01 index)) (vlax-curve-getEndParam ename)) (setq l_pt (cons (vlax-curve-GetPointAtParam ename index) l_pt)) ) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) ) (cond ((eq id_obj "AcDbEllipse") (setq l_pt (vlax-get ename 'Center) nw_pl (vlax-invoke Space 'AddEllipse (list (car l_pt) (cadr l_pt) 0.0) (list (car (vlax-get ename 'MajorAxis)) (cadr (vlax-get ename 'MajorAxis)) 0.0) (* (caddr (vlax-get ename 'Normal)) (vlax-get ename 'RadiusRatio)) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) (vla-put-StartAngle nw_pl (vlax-get ename 'StartAngle)) (vla-put-StartParameter nw_pl (vlax-get ename 'StartParameter)) (vla-put-EndParameter nw_pl (vlax-get ename 'EndParameter)) ) ((or (eq id_obj "AcDbArc") (eq id_obj "AcDbCircle")) (setq l_pt (vlax-get ename 'Center) nw_pl (if (eq id_obj "AcDbArc") (vlax-invoke Space 'AddArc (list (car l_pt) (cadr l_pt) 0.0) (vlax-get ename 'Radius) (vlax-get ename 'StartAngle) (vlax-get ename 'EndAngle)) (vlax-invoke Space 'AddCircle (list (car l_pt) (cadr l_pt) 0.0) (vlax-get ename 'Radius)) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) ) ) ) ((eq id_obj "AcDbSpline") (if (or (zerop (vlax-get ename 'IsPlanar)) (and (not (zerop (vlax-get ename 'IsPlanar))) (not (equal (cdr (assoc 210 (entget ent_name))) '(0.0 0.0 1.0) 1E-13)) ) ) (progn (setq index (vlax-curve-getStartParam ename) l_pt (list (vlax-curve-GetPointAtParam ename index)) ) (while (< (setq index (+ 10.0 index)) (vlax-curve-getEndParam ename)) (setq l_pt (cons (vlax-curve-GetPointAtParam ename index) l_pt)) ) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) ) (progn (setq l_pt (l-coor2l-pt (if (zerop (vlax-get ename 'NumberOfFitPoints)) (cdddr (reverse (cdddr (reverse (vlax-get ename 'ControlPoints))))) (vlax-get ename 'FitPoints)) T) nw_pl (vlax-invoke Space 'AddSpline (apply 'append (mapcar '(lambda (x y) (list x y 0.0)) (mapcar 'car l_pt) (mapcar 'cadr l_pt))) (list (car (vlax-curve-getFirstDeriv ename 0)) (cadr (vlax-curve-getFirstDeriv ename 0)) 0.0) (list (car (vlax-curve-getFirstDeriv ename (vlax-curve-getEndParam ename))) (cadr (vlax-curve-getFirstDeriv ename (vlax-curve-getEndParam ename))) 0.0) ) l_pt (l-coor2l-pt (vlax-get ename 'ControlPoints) T) ) (vla-put-ControlPoints nw_pl (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* (length l_pt) 3))) ) (apply 'append (mapcar '(lambda (x y) (list x y 0.0)) (mapcar 'car l_pt) (mapcar 'cadr l_pt))) ) ) ) ) ) ) ((eq id_obj "AcDbLine") (setq nw_pl (vlax-invoke Space 'AddLine (list (car (vlax-get ename 'StartPoint)) (cadr (vlax-get ename 'StartPoint)) 0.0) (list (car (vlax-get ename 'EndPoint)) (cadr (vlax-get ename 'EndPoint)) 0.0) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) ((eq id_obj "AcDbPoint") (setq nw_pl (vlax-invoke Space 'AddPoint (list (car (vlax-get ename 'Coordinates)) (cadr (vlax-get ename 'Coordinates)) 0.0) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) ) (vla-put-Layer nw_pl (vla-get-Layer ename)) (vla-delete ename) ) (and save_ucs (vla-put-activeUCS AcDoc save_ucs)) (and WCS (vla-delete WCS) (setq WCS nil)) (vla-EndUndoMark AcDoc) (princ (strcat "\n" (itoa (sslength jspl)) " entité(s) soumises à la commande. TERMINE !" ) ) ) (T (princ "\nPas d'entités conformes sélectionnées..!")) ) (prin1) ) <font class=edite>[Edité le 8/1/2010 par bonuscad]</font> Modifié le 12 juillet 2022 par bonuscad Ajout pour prendre en compte une élévation éventuelle de l'objet 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 Hello En d'autres termes, elle plaque/projette au sol (Z=0) toute entite curviligne construite dans n'importe quel SCU en 3D ? :) Whaou ! je suis impressionne par ta maitrise du calcul matriciel 3D ! :D Je n'ose pas imaginer cette routine en pure AutoLisp (sans VLisp) ! :o Merci, Le Decapode Autodesk Expert Elite Team
aldo127 Posté(e) le 8 décembre 2009 Auteur Posté(e) le 8 décembre 2009 Testé avec 107 3dpoly et APPROUVE, 2 sec et me voilà avec 107 plyline et offset possible...Merci merci Bonuscad, ta routine est magnifique Testé avec Acad2009
aldo127 Posté(e) le 8 décembre 2009 Auteur Posté(e) le 8 décembre 2009 Merci aussi à toi Lecrabe, mais j'ai pas testé la combinaison des 2 lisp.Je vais essayé mais plustard, la routine de Bonuscad me suffit aujourd'hui. Merci
bonuscad Posté(e) le 8 décembre 2009 Posté(e) le 8 décembre 2009 En d'autres termes, elle plaque/projette au sol (Z=0) toute entite curviligne construitedans n'importe quel SCU en 3D ? Tout à fait! Mais j'insiste sur le fait que la projection se fera toujours dans le SCG et non dans le SCU courant. Cela peu surprendre que je cherche à réécrire un code similaire à Flatten, mais c'est pour un besoin futur de développement et je ne voulais pas être tributaire des Express. Voilà le pourquoi du comment ! Testé avec 107 3dpoly et APPROUVE, 2 sec et me voilà avec 107 plyline et offset possible... Content que ça fonctionne et de ne pas avoir de "bugs" à corriger aux premiers tests. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
aldo127 Posté(e) le 8 décembre 2009 Auteur Posté(e) le 8 décembre 2009 Je connaissais pas la commande Flatten et j'ai essayé avec le même fichier, il a trouvé 4499 entités, fichier topo donc bcp de ponts, et après 10min j'ai coupé autocad. J'ai refait la même manip avec ta routine, elle ne prend que les 3dpoly et en 1sec tout est converti, les 107 3dpoly et tout les points sont toujours avec les coordonnées 3D. C'est magnifique et y a photo.Demain je fais un test avec des régions obtenues par la commande coupe dans des volumes.Le Z des régions n'est pas tjrs 0 et avec le lisp zero, ça foire avec certaines de ces régions. Encore merci pour ta routine qui va surement encore me servir...
lecrabe Posté(e) le 9 décembre 2009 Posté(e) le 9 décembre 2009 Hello Attention si je lis bien cette ligne du programme : (0 . "LWPOLYLINE,LINE,SPLINE,ARC,CIRCLE,ELLIPSE,POINT")la routine ne traite pas les regions ! elle ne travaille que sur les entites curvilignes ! Bon d'accord, on poura toujours exploser/decomposer les regions Le Decapode Autodesk Expert Elite Team
bonuscad Posté(e) le 7 janvier 2010 Posté(e) le 7 janvier 2010 Bonjour, Je viens de m'apercevoir d'un problème dans le code. Si je suis dans un scu non parallèle, l'expression suivante (pour sauvegarder le SCU): (vla-add UCS (vlax-3d-point (getvar "UCSORG")) (vlax-3d-point (mapcar '+ (getvar "UCSORG") (getvar "UCSXDIR"))) (vlax-3d-point (mapcar '+ (getvar "UCSORG") (getvar "UCSYDIR"))) "CURRENT_UCS" ) me retourne une erreur: ; erreur: Erreur Automation Axes SCU X et Y non perpendiculaires Je ne vois pas mon erreur dans les points fournis.Un éclairage serait le bienvenu. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 7 janvier 2010 Posté(e) le 7 janvier 2010 Salut, Bizarre en effet.J'ai fait quelques test, chez moi ça fonctionne.Par contre, l'expression suivante qui théoriquement représente la même chose ne fonctionne pas (avec une différence de l'ordre de 1e-11). (vla-add (vla-get-UserCoordinateSystems *acdoc*) (vlax-3d-point (getvar "UCSORG")) (vlax-3d-point (trans '(1. 0. 0.) 1 0)) (vlax-3d-point (trans '(0. 1. 0.) 1 0)) "CURRENT_UCS2" )Il me semble me souvenir avoir eu ce problème, mais je ne me souviens plus si j'avais trouvé une astuce. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 7 janvier 2010 Posté(e) le 7 janvier 2010 Par contre, l'expression suivante qui théoriquement représente la même chose ne fonctionne pas (avec une différence de l'ordre de 1e-11). Je pense que mon problème vient aussi de la précision.En effet, je faisais un test réel sur un fichier topo 3D en LAMBERT II, donc une mantisse pour les nombres importantes en X Y (6 chiffres devant la virgule). Peut être que, comme pour les matrices de transformation, faire la rotation d'abords, puis le déplacement ensuite pour conserver la meilleure précision pour le calcul des rotations et ne pas avoir ce test de perpendicularité qui échoue ? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 8 janvier 2010 Posté(e) le 8 janvier 2010 Hello Et si tu deplaces TOUT vers le ZERO, ZERO !? Le Decapode Autodesk Expert Elite Team
bonuscad Posté(e) le 8 janvier 2010 Posté(e) le 8 janvier 2010 Il me semble me souvenir avoir eu ce problème, mais je ne me souviens plus si j'avais trouvé une astuce. Ce code précédent je l'ai vu en vba et en lisp (dans tes routines gilles!) donc forcément je m'en suis fortement inspiré (pour pas dire pompé) ;) Mais je pense avoir trouvé la solution pour ces cas (qui peuvent être fréquent en topo calé en lambert ou rgf93) faire la rotation d'abords, puis le déplacement ensuite C'était la bonne piste car en procédant comme cela aucun problème. :D par exemple ce test fonctionne bien. ((lambda ( / AcDoc Space UCS save_ucs) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) UCS (vla-get-UserCoordinateSystems AcDoc) save_ucs (vla-add UCS (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point (getvar "UCSXDIR")) (vlax-3d-point (getvar "UCSYDIR")) "CURRENT_UCS_USER" ) ) (vla-put-Origin save_ucs (vlax-3d-point (getvar "UCSORG"))) (vla-put-activeUCS AcDoc save_ucs) (vlax-release-object Space) (vlax-release-object AcDoc) (vlax-release-object UCS) )) Je met à jour la routine de projection en conséquence. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 8 janvier 2010 Posté(e) le 8 janvier 2010 Voilà une bonne nouvelle si tu dis que ça marche sans problèmes :) Aparté : je ne suis pas sûr de l'utilité des vlax-release-object sur AcDoc Space et UCS, à priori, on ne l'utilise que pour les objets ActiveX extérieurs à AutoCAD.Par contre il me semble avoir lu quelque chose à propos de (vlax-get-acad-object) qui créerais un nouvel objet à chaque appel (mais je n'arrive pas à le retrouver). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 8 janvier 2010 Posté(e) le 8 janvier 2010 Aparté : je ne suis pas sûr de l'utilité des vlax-release-object sur AcDoc Space et UCS Pourtant je l'ai déjà observé dans d'autre code (sauf le SCU qui est une invention de ma part) :( Donc je l'ai reproduis bêtement, mais pourtant au contraire de toi, il me semble bien avoir vu quelque part (certainement un forum US) que le (vlax-release-object AcDoc) était recommandé.Bon ma compréhension du sujet en Anglais est parfois laborieuse, mais je me demande si j'avais pas compris un truc en rapport avec les ouvertures multiples de dessins. Comme c'est encore bien flou pour moi, si tu as des précisions, se sera bien volontier! Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 9 janvier 2010 Posté(e) le 9 janvier 2010 Salut, Effectivement, il y a eu quelques codes qui utilisaient ces expressions dans le groupe de discussion Autodesk, mais ça ressemble plus à une mode passagère entre certains forumeurs qu'à une utilisation rationnelle.L'aide est assez claire :When an AutoLISP routine no longer uses an object outside AutoCAD, such as a Microsoft Excel object, call the (vlax-release-object) function to make sure that the associated application closes properly. Objects released with (vlax-release-object...) may not be released immediately. The actual release may not happen until the next automatic garbage collection occurs. You can call (gc) directly to force the garbage collection to occur at a specific location within your code. Il s'agit bien d'objets extérieurs à AutoCAD, et s'il s'agissait de libérer des ressources à l'intérieur d'AutoCAD invoquer vlax-release-object sans invoquer gc ne garantirait pas que les ressources soient immédiatement libérées.Par ailleurs pourquoi invoquer vlax-release-object sur certains objets (Acdoc Apace Ucs) et pas d'autres (l'application (vlax-get-acad-object ou les entité ouvertes pour modification) ?... Pour les documents, on utilise vlax-release-object pour les documents ouverts avec ObjectDBX :(setq dbxDoc (vla-GetInterfaceObject (vlax-get-acad-object) (if ( "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (vla-open dbxDoc DwgName)ou(setq dbxDoc (vlax-create-object (if ( "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (vla-open dbxDoc DwgName)Dans les deux cas, en fin de routine, on fait :(vlax-release dbxDoc DwgName) Concernant la libération de l'application AutoCAD (vlax-get-acad-object), ça m'est revenu, et encore une fois il s'agit de l'utilisation d'objets extérieurs à AutoCAD créés avec la méthode vla-getInterfaceObject.Par exemple si on fait :(setq acAp (vlax-get-acad-object) shell (vla-getInterfaceObject acAp "Shell.Application") )chaque nouvel appel créerait une nouvelle instance de l'objet application AutoCAD, il faudrait donc faire :(vlax-release-object acAp) (vlax-release-object shell)Mais je ne suis pas vraiment sûr de la pertinence de cette façon de faire. De mon côté, la plupart du temps j'utilise une variable globale (automatiquement initialisée dans un fichier de chargement de routines LISP) donc tous les appels sont sensés pointer vers le même objet:(or *acad* (setq *acad* (vlax-get-acad-object)))De même pour les objets les plus couramment utilisés : *acdoc*, *layers*, *blocks*, *layouts* etc... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 9 janvier 2010 Posté(e) le 9 janvier 2010 Merci pour ces explications, Je vais suivre tout ces bons conseils... Juste une question concernant SDI, suivant sa valeur si j'avais pas compris un truc en rapport avec les ouvertures multiples de dessins. En effet dans ce mode multi-session ne vaut t-il pas mieux "relacher les objets" pour qu'une session soit fermée correctement sans impacter les autres ouvertes car dans ce cas il peut y avoir plusieurs instance d'autocad d'ouverte. Bien que ce mode d'utilisation soit rare par défaut, il est possible, donc le mieux ne serait t-il pas d'en tenir compte (quitte à tester la variable). Ais je bien compris ? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 9 janvier 2010 Posté(e) le 9 janvier 2010 Je ne suis pas sûr de comprendre ta question, mais il me semble que Visual LISP (langage de très haut niveau) gère tout seul la libération des ressources internes à AutoCAD.En mode MDI (SDI = 0) (vla-close doc ...) (ou (vla-close (vla-get-Documents *acdoc*) ...) pour fermer tous les documents de la session) "détruit" le (ou les) document(s). Si SDI est à 1 chaque document est ouvert dans une session différente, on ne peut donc accéder à un autre document depuis le document actif (ni par (vla-get-Documents ...) bien sûr, ni par ObjectDBX qui ne fonctionne qu'avec des documents fermés). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 9 janvier 2010 Posté(e) le 9 janvier 2010 Je ne suis pas sûr de comprendre ta question Il faut dire que pour moi cette gestion des "documents/objets" est encore floue dans ma tête. Une doc sommaire des bases en français, m'éclairerait sans doute mieux que les brides que j'interprète sur des points ponctuels. Dans mon interprétation personnelle; vlax-release-object avait pour role de "décharger/casser" les liens vers les propriétés de l'objet chargé en mémoire. Je que je pense avoir compris/retenu maintenant, c'est que cela ne concerne que les objets externe à autocad dans l'interface de Visual LISP. Que pour Autocad la libération est géré par lui même..., on n'a pas besoin de s'en ocupper? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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