Aller au contenu

Convertir polyligne 3D en polyligne 2D


aldo127

Messages recommandés

 

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 Minimum

soit au niveau Z Maximum

soit 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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par bonuscad
Ajout pour prendre en compte une élévation éventuelle de l'objet
  • Upvote 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

En d'autres termes, elle plaque/projette au sol (Z=0) toute entite curviligne construite

dans 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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

  • 5 semaines après...

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é