Aller au contenu

M2S version 2007


Messages recommandés

Posté(e)

Si dans les nouveautés il est possible de couper (_slice) un solide avec une surface, cela reste impossible avec les surfaces gauches, réglées,extrudées ou de révolution, extrait de l'aide :

 

Remarque Vous ne pouvez pas sélectionner des maillages créés à l'aide des commandes SURFGAU, SURFREV, SURFREGL et SURFEXTR

 

M2S n'a donc pas fini sa carrière !

 

Comme les options de la commande EXTRUSION (_extrude) ont changé (l'angle d'extrusion est une option à spécifier avant la hauteur), j'ai modifié le LISP pour qu'il fonctionne avec la nouvelle version.

 

Çà marche, sauf que avec une surface gauche créée avec SURFTAB1 et SURFTAB2 à 20 çà plante avant l'union des rangées :

 

Le nombre maximal de noeuds d'historique dans un solide serait dépassé.

Vous voulez peut-être convertir le solide en représentation de contour.

 

Le code compatible TOUTES VERSIONS

 

;;    M2S  (Mesh-to-Solid)
;;    Creates an ACIS solid from an open 3d polygon mesh.
;;
;;    Take 3 - Updated 4/28/2006
;;       - Works with AutoCAD 2007 as well as all previous releases.
;;       - Works with REVSURF'd meshes that touch or cross axis of revolution.
;;       - Works even if solid being constructed is not fully visible on screen.
;;       - Works with all open meshes created with REVSURF, RULESURF,
;;          EDGESURF, TABSURF, AI_MESH, and 3DMESH. Most of the stock 3D
;;          surfaces will work if you use DDMODIFY to open them in the M
;;          and N directions.
;;       - Does not work with polyface entities.
;;       - _. prefix added to commands for compatibility with CSG editor and
;;         international users
;;
;;    (c) Copyright 1998,2006 by Bill Gilliss.
;;    All rights reserved... such as they are.
;;
;;    bill.gilliss@aya.yale.edu    gilliss@iglou.com
;;
;;       I wrote this to create sculptable ACIS terrain models
;;    for architectural site renderings. It can also be used
;;    to create thin shells from meshes, by subtracting a moved
;;    copy of the solid from the original solid, but AutoCAD's native
;;    Solids Editing > Shell now does a much better job of this.
;;
;;       The solid is created by projecting each mesh facet "down"
;;    the *current* z-axis to a plane a user-specified distance below
;;    the lowest vertex. To assure that all parts of the mesh are
;;    generated as solids, this distance can not be zero, but the
;;    solid can be SLICEd later if need be.
;;
;;       The solid will match the displayed mesh: if the mesh has
;;    been smoothed and SPLFRAME is set to 0, the solid will be
;;    smoothed. Otherwise, it will not be. The mesh itself is not
;;    changed at all.
;;
;; Modifié le 01/05/06 - Gilles Chanteau -
;; Ajout des fonctions std_err / save&set_var
;; Contrôle de la variable système SOLIDHIST
;; Traduction des invites

(defun c:m2s (/	     SavedSysVarLst	  R17	 ent	ename  entlst
      M	     N	    MN	   SN	  SM	 ST	smooth vtx
      d1     low    vtxcnt vtxmax bot	 bottom	p1     p2
      p3     p4	    c1	   c2	  c3	 c4	b1     b2
      b3     b4	    soldepth	  ssall	 ssrow
     )

 (setq	m:err	*error*
*error*	STD_ERR
 )
 (command "_.undo" "_begin")
 (SAVE&SET_VAR "cmdecho" 0)
 (SAVE&SET_VAR "osmode" 0)
 (SAVE&SET_VAR "blipmode" 0)
 (cond
   ((< 16 (atoi (substr (getvar "acadver") 1 2)))
    (setq R17 T)
    (SAVE&SET_VAR "solidhist" 0)
   )
 )
 (princ "\nM2S")

 ;;select the mesh
 (setq ent (entsel "\nSélectionnez une maille polygonale à solidifier: "))
 (setq ename (car ent))
 (setq entlst (entget ename))
 (if (not (= (cdr (assoc 0 entlst)) "POLYLINE"))
   (progn
     (alert "Ce n'est pas une maille polygonale.")
     (exit)
     (princ)
   ) ;_ progn
 ) ;_ endif
 (if (not (or (= (cdr (assoc 70 entlst)) 16) ;_ open 3d polygon mesh
       (= (cdr (assoc 70 entlst)) 20) ;_ open mesh w/ spline-fit vertices
   ) ;_ or
     ) ;_ not
   (progn (alert "Ce n'est pas une maille polygonale \"ouverte\".")
   (exit)
   (princ)
   ) ;_ progn
 ) ;_ endif

 ;; decide whether to use smoothed or unsmoothed vertices
 (setq M (cdr (assoc 71 entlst))) ;_ M vertices
 (setq N (cdr (assoc 72 entlst))) ;_ N vertices
 (setq SM (cdr (assoc 73 entlst))) ;_ smoothed M vertices
 (setq SN (cdr (assoc 74 entlst))) ;_ smoothed N vertices
 (setq ST (cdr (assoc 75 entlst))) ;_ surface type
 (if (or (= (getvar "splframe") 1) ;_ use MxN vertices when splframe = 1
  (= ST 0) ;_ or mesh has not been smoothed
     )
   (setq smooth 0
  MN (* M N)
   )
   (setq smooth 1 ;_ use SMxSN vertices when mesh is smoothed
  MN	 (* SM SN) ;_ and SPLFRAME = 0
  M	 SM
  N	 SN
   )
 ) ;_ if

 ;; determine lowest vertex
 (grtext -2 "Contrôle de la maille...")
 (setq vtx ename)
 (setq vtx (entnext vtx))
 (setq d1 (entget vtx))
 (setq bottom (caddr (trans (cdr (assoc 10 d1)) 0 1)))
 (repeat (1- MN) ;_ compare with each vertex's z coord
   (setq vtx (entnext vtx))
   (setq d1 (entget vtx))
   (setq low (caddr (trans (cdr (assoc 10 d1)) 0 1)))
   (setq bottom (min bottom low))
 ) ;_ repeat

 ;; get desired thickness of solid
 (setq soldepth 0)
 (while (zerop soldepth)
   (progn
     (setq soldepth
     (getdist
       "\nEntrez l'épaisseur du solide sous le point le plus bas <1>: "
     )
     )
     (if (not soldepth)
(setq soldepth 1.0)
     )
     (if (zerop soldepth)
(princ
 "\nL'épaisseur peut être faible, mais pas égale à zéro.\n(Couper ensuite, si nécessaire.)"
)
     )
   ) ;_ progn
 ) ;_ while
 (setq bot (- bottom (abs soldepth)))
 (setq p1 ename)
 (if (= smooth 1)
   (setq p1 (entnext p1))
 ) ;_ skip 1st vtx of smoothed mesh - not true vtx
 (setq ssrow (ssadd)) ;_ initialize set of extruded segments to be unioned as a row
 (setq ssall (ssadd)) ;_ initialize set of rows to be unioned into the whole
 (grtext -2 "Création de la rangée...")
 (setq vtxmax (- MN N))
 (setq vtxcnt 1)

 ;;create row of solid segments
 (while (< vtxcnt vtxmax)
   (if	(= 0 (rem vtxcnt N)) ;_ at end of each row...
     (progn (setq rowmsg (strcat "Union de la rangée... "
			  (itoa (/ vtxcnt N))
			  " de "
			  (itoa (1- M))
			  "... "
		  )
     )
     (grtext -2 rowmsg)
     (command "_.union" ssrow "")
     (setq row (entlast))
     (ssadd row ssall)
     (setq ssrow (ssadd))
     (setq p1	  (entnext p1) ;_ skip to the next vertex
	   vtxcnt (1+ vtxcnt)
     )
     ) ;_ progn
   ) ;_ if
   (grtext -2 "Création de la rangée...")
   (setq p1 (entnext p1) ;_ first vertex of mesh square
  p2 (entnext p1) ;_ second vertex
  p3 p2
   )
   (repeat (1- n) (setq p3 (entnext p3))) ;_ walk along to 3rd (p1 + N) vertex
   (setq p4 (entnext p3)) ;_ 4th vertex of mesh square
   (setq c1 (trans (cdr (assoc 10 (entget p1))) 0 1) ;_ top coordinates
  c2 (trans (cdr (assoc 10 (entget p2))) 0 1)
  c3 (trans (cdr (assoc 10 (entget p3))) 0 1)
  c4 (trans (cdr (assoc 10 (entget p4))) 0 1)
  b1 (list (car c1) (cadr c1) bot) ;_ bottom coordinates
  b2 (list (car c2) (cadr c2) bot)
  b3 (list (car c3) (cadr c3) bot)
  b4 (list (car c4) (cadr c4) bot)
   )
   (LOFT c1 c2 c3 b1 b2 b3)
   (LOFT c2 c3 c4 b2 b3 b4)
   (setq vtxcnt (1+ vtxcnt))
 ) ;_ while
 (grtext -2 "Union de la denière rangée...")
 (command "_.union" ssrow "")
 (setq row (entlast))
 (ssadd row ssall)
 (if (> M 2) ;_ bypass final union for N x 1 meshes (i.e., RULESURF)
   (progn (grtext -2 "Union de toutes les rangées...")
   (command "_.union" ssall "")
   ) ;_ progn
 ) ;_ if

 ;;cleanup
 (command "_.undo" "_end")
 (mapcar 'eval SavedSysVarLst)
 (setq	ssall nil
ssrow nil
 )
 (princ)
) ;_ defun

;;============== SUBROUTINES ====================

(defun LOFT (r1 r2 r3 s1 s2 s3 / e1 extr highest)
 (command "_.area" s1 s2 s3 "")
 (if (not (equal (getvar "area") 0.0 0.00000001))
   (progn (command "_.pline" s1 s2 s3 "_close")
   (setq highest (max (caddr r1) (caddr r2) (caddr r3)))
   (setq extr (- highest bot))
   (if R17
     (command "_.extrude" (entlast) "" extr) ;_ 2007 and higher
     (command "_.extrude" (entlast) "" extr 0.0) ;_ 2006 and below 
   ) ;_ endif
   (command "_.slice" (entlast) "" "_3points" r1 r2 r3 s1)
   (setq e1 (entlast))
   (ssadd e1 ssrow)
   ) ;_ progn
 ) ;_ if
) ;_ defun

;;; Redéfinition de *error*
(defun STD_ERR (msg)
 (if (or
(= msg "Fonction annulée")
(= msg "quitter / sortir abandon")
     )
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (command)
 (command "_.undo" "_end")
 (mapcar 'eval SavedSysVarLst)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

;;; SAVE&SET_VAR
;;; Enregistre la valeur initiale de la variable système dans une liste
;;; et lui attribue sa nouvelle valeur (si val est non nil)
;;;
;;; ex: (SAVE&SET_VAR "autosnap" nil) (SAVE&SET_VAR "orthomode" 1)
;;; -> SavedSysVarLst : (("orthomode" . 0) ("autosnap" . 63))
;;; -> (getvar "orthomode") : 1
;;; -> (getvar "autosnap") : 55 (63 - 8 : le repérage polaire est désactivé)
;;; Pour restaurer les variables : (mapcar 'eval SavedSysVarLst)

(defun SAVE&SET_VAR (var val)
 (cond
   ((not (getvar var))
    (princ (strcat "\nErreur: variable AutoCAD rejetée: " var))
    (princ)
   )
   (T
    (setq SavedSysVarLst
    (cons (list 'setvar var (getvar var)) SavedSysVarLst)
    )
    (if val
      (setvar var val)
    )
   )
 )
)

(princ
 "M2S chargé. Taper M2S pour lancer le programme."
)
(princ) 

[Edité le 29/4/2006 par (gile)]

[Edité le 2/5/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

salut

 

merci pour le lisp modifié gile, mais tu veux dire que tous les lisp utilisant la fonction _extrude ne vont plus fonctionner avec la version 2007 :o

Posté(e)

Presque

 

Tous les LISP utilisant (command "_.extrude" objet "" ValeurHauteur ValeurAngle) doivent être changer :

 

- soit en (command "_.extrude" objet "" ValeurHauteur) si ValeurAngle était 0.0 ou ""

 

- soit en (command "_.extrude" objet "" "_taper" ValeurAngle ValeurHauteur) si ValeurAngle est un réél non nul.

 

Les LISP utilisant (command "_.extrude" objet "" "_path" chemin) devraient continuer à fonctionner.

 

[Edité le 30/4/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut Gilles,

 

Cela peut être interressant de voir comment d'autres ont appréhendé la conversion.

Personnellement je n'ai testé ni l'un, ni l'autre (pas encore concerné) ;)

 

A VOIR ?!

 

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

Posté(e)

Merci, Bonuscad, pour le lien.

 

C'est Bill Gilliss, l'auteur du LISP, qui y donne une version de M2S compatible avec toutes les versions.

 

J'étais justement en train d'essayer une idée similaire (avec ACADVER), je modifie le code ci-dessus en conséquence.

 

Par ailleurs, Bill ne semble pas avoir vu le problème avec SOLIDHIST, je le préviens.

 

 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Pour la même surface gauche, avec le même ombrage (filaire 2D) et la même projection (parallèle), M2S met environ 5 fois plus de temps à aboutir dans l'espace de travail "Modelisation 3D" que dans l'espace "AutoCAD classique" :casstet:

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

J'ai reçu une réponse (en français !) de Bill Gilliss à mon message le prévenant du problème rencontré avec "Le nombre maximal de noeuds d'historique dans un solide".

 

Gilles -

 

Merçi pour vos suggestions. Je suis d'accord: (setvar "solidhist" 0) est une bonne idée, et je vais modifier M2S.

 

-Bill

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

J'espère que ces échanges avec nos amis d'outre-atlantique vont leur donner l'habitude d'internationaliser leur lisp :casstet:

 

C'est rare qu'il se sentent concerné par ce problème qui pour eux n'en est pas un.

Avec les sources ce n'est pas un gros problème, mais avec les compilés, nada :mad:

 

Consolation; généralement les meilleurs lisps le sont. Ouff!

Mais les oublis sont fréquents, surtout dans les options de commande.

Quant aux options de (ssget) et de (osnap), elles sont pratiquement systématiques.

 

Je pense qu'Autodesk aurait du laisser le language natif pour le lisp au lieu de différencier ces options suivant la langue.

 

 

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

Posté(e)

Mais les oublis sont fréquents, surtout dans les options de commande.

 

C'est le cas pour la version que donne Bill dans le lien que tu donnais plus haut.

 

Je lui ai signalé.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 2 semaines après...
Posté(e)

J'ai reçu une réponse de Bill Gilliss (l'auteur de M2S) aux sugestions que je lui avais faites :

 

Hello, Gilles -

 

Here is the updated version of M2s2007.lsp, which now should work with the international versions and with AutoCAD 2007. I used your suggestions, for which I think you greatly.

 

-Bill Gilliss

 

Je mets ci-dessous le code qu'il m'a envoyé. Celui que j'ai mis au dessus est semblable à ceci près que les invites y sont traduites en français, que j'ai rajouté une redéfinition de *error* et que les variables systèmes y sont gérées "à ma façon".

 

;;    M2S  (Mesh-to-Solid)
;;    Creates an ACIS solid from an open 3d polygon mesh.
;;
;;    Take 3 - Updated 5/15/2006
;;       - Works with AutoCAD 2007 as well as all previous releases.
;;           Thanks to Gilles Chanteau for R2007 suggestions and
;;           international syntax fixes.
;;       - Works with REVSURF'd meshes that touch or cross axis of revolution.
;;       - Works even if solid being constructed is not fully visible on screen.
;;       - Works with all open meshes created with REVSURF, RULESURF,
;;          EDGESURF, TABSURF, AI_MESH, and 3DMESH. Most of the stock 3D
;;          surfaces will work if you use DDMODIFY to open them in the M
;;          and N directions.
;;       - Does not work with polyface entities.
;;       - _. prefix added to commands for compatibility with CSG editor and
;;         international users
;;
;;    (c) Copyright 1998,2006 by Bill Gilliss.  
;;    All rights reserved... such as they are.
;;
;;    bill.gilliss@aya.yale.edu    gilliss@iglou.com
;;
;;       I wrote this to create sculptable ACIS terrain models
;;    for architectural site renderings. It can also be used
;;    to create thin shells from meshes, by subtracting a moved
;;    copy of the solid from the original solid, but AutoCAD's native
;;    Solids Editing > Shell now does a much better job of this.
;;
;;       The solid is created by projecting each mesh facet "down"
;;    the *current* z-axis to a plane a user-specified distance below
;;    the lowest vertex. To assure that all parts of the mesh are
;;    generated as solids, this distance can not be zero, but the
;;    solid can be SLICEd later if need be.
;;
;;       The solid will match the displayed mesh: if the mesh has
;;    been smoothed and SPLFRAME is set to 0, the solid will be
;;    smoothed. Otherwise, it will not be. The mesh itself is not
;;    changed at all.
;;

(defun c:m2s (/  ent ename entlst M N MN SN SM ST smooth oldecho vtx d1
                low vtxcnt vtxmax bot bottom p1 p2 p3 p4 c1 c2 c3 c4 
                b1 b2 b3 b4 soldepth ssall ssrow)

(setq oldecho (getvar "cmdecho"))
(setq oldsnap (getvar "osmode"))
(setq oldblip (getvar "blipmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setvar "blipmode" 0)
(if (< 16 (atoi (substr (getvar "acadver") 1 2))) (setq R17 T))
(if R17 (setq oldsolidhist (getvar "solidhist")))
(command "_.undo" "_begin")

;;select the mesh
 (setq ent (entsel "Select a polygon mesh to solidify: "))
 (setq ename (car ent))
 (setq entlst (entget ename))

 (if (not (= (cdr (assoc 0 entlst)) "POLYLINE"))
   (progn
     (alert "That is not a polygon mesh.")
     (exit)
     (princ)
   );progn
 );endif

 (if
   (not
     (or
      (= (cdr (assoc 70 entlst)) 16) ;open 3d polygon mesh
      (= (cdr (assoc 70 entlst)) 20) ;open mesh w/ spline-fit vertices
       );or
      );not
    (progn
      (alert "That is not an *open* polygon mesh.")
      (exit)
      (princ)
    );progn
 );endif

;; decide whether to use smoothed or unsmoothed vertices
 (setq M (cdr (assoc 71 entlst)))   ;M vertices
 (setq N (cdr (assoc 72 entlst)))   ;N vertices
 (setq SM (cdr (assoc 73 entlst)))  ;smoothed M vertices
 (setq SN (cdr (assoc 74 entlst)))  ;smoothed N vertices
 (setq ST (cdr (assoc 75 entlst)))  ;surface type
 (if
   (or
     (= (getvar "splframe") 1)      ;use MxN vertices when splframe = 1
     (= ST 0)                       ;or mesh has not been smoothed
     )
   (setq smooth 0
        MN (* M N))
   (setq smooth 1                   ;use SMxSN vertices when mesh is smoothed 
         MN (* SM SN)               ;and SPLFRAME = 0
         M SM
         N SN)
   );if

;; determine lowest vertex
 (grtext -2 "Examining the mesh...")
 (setq vtx ename)
 (setq vtx (entnext vtx))
 (setq d1 (entget vtx))
 (setq bottom (caddr (trans (cdr (assoc 10 d1)) 0 1)))
 
 (repeat (1- MN)   ;compare with each vertex's z coord
   (setq vtx (entnext vtx))
   (setq d1 (entget vtx))
   (setq low (caddr (trans (cdr (assoc 10 d1)) 0 1)))
   (setq bottom (min bottom low))
   );repeat

;; get desired thickness of solid
 (setq soldepth 0)
 (while
    (zerop soldepth)
    (progn
      (setq soldepth 
         (getdist "\nEnter desired thickness of solid below lowest vertex <1>: "))
      (if (not soldepth) (setq soldepth 1.0))
      (if (zerop soldepth)
         (princ "\nThickness can be small, but not zero. (Slice it later, if need be.)"))
       );progn
    );while
 (setq bot (- bottom (abs soldepth)))
  
 (setq p1 ename)
 (if (= smooth 1)
     (setq p1 (entnext p1))) ;skip 1st vtx of smoothed mesh - not true vtx
 (setq ssrow (ssadd))        ;initialize set of extruded segments to be unioned as a row
 (setq ssall (ssadd))        ;initialize set of rows to be unioned into the whole
 (grtext -2 "Creating row...")
 (setq vtxmax (- MN N))  
 (setq vtxcnt 1)

;;create row of solid segments
 (while (< vtxcnt vtxmax)

   (if (= 0 (rem vtxcnt N))  ;at end of each row...
       (progn
         (setq rowmsg (strcat "Unioning row "
                      (itoa (/ vtxcnt N)) " of "
                      (itoa (1- M)) "... "))
         (grtext -2 rowmsg)
         (command "_.union" ssrow "")
         (setq row (entlast))
         (ssadd row ssall)
         (setq ssrow (ssadd))
         (setq p1 (entnext p1)         ;skip to the next vertex
               vtxcnt (1+ vtxcnt))
         );progn
       );if
       
   (grtext -2 "Creating row...")
   (setq p1 (entnext p1)                  ;first vertex of mesh square
         p2 (entnext p1)                  ;second vertex
         p3 p2)
   (repeat (1- n) (setq p3 (entnext p3))) ;walk along to 3rd (p1 + N) vertex
   (setq p4 (entnext p3))                 ;4th vertex of mesh square

   (setq c1 (trans (cdr (assoc 10 (entget p1))) 0 1) ;top coordinates
         c2 (trans (cdr (assoc 10 (entget p2))) 0 1)
         c3 (trans (cdr (assoc 10 (entget p3))) 0 1)
         c4 (trans (cdr (assoc 10 (entget p4))) 0 1)
         b1 (list (car c1) (cadr c1) bot)            ;bottom coordinates
         b2 (list (car c2) (cadr c2) bot)
         b3 (list (car c3) (cadr c3) bot)
         b4 (list (car c4) (cadr c4) bot))
         (LOFT c1 c2 c3 b1 b2 b3)
         (LOFT c2 c3 c4 b2 b3 b4)

   (setq vtxcnt (1+ vtxcnt))
 );while

(grtext -2 "Unioning last row...")
 (command "_.union" ssrow "")
 (setq row (entlast))
 (ssadd row ssall)
 (if (> M 2)       ;bypass final union for N x 1 meshes (i.e., RULESURF)
   (progn
     (grtext -2 "Unioning all rows...")
      (command "_.union" ssall "")
       );progn
    );if

;;cleanup
 (command "_.undo" "_end")
 (setvar "cmdecho" oldecho)
 (setvar "osmode" oldsnap)
 (setvar "blipmode" oldblip)
 (if R17 (setvar "solidhist" oldsolidhist))
 (setq ssall nil ssrow nil)
 (princ)

);defun

;;============== SUBROUTINES ====================

(defun LOFT (r1 r2 r3 s1 s2 s3 / e1 extr highest)
 (command "_.area" s1 s2 s3 "")
 (if (not (equal (getvar "area") 0.0 0.00000001))
   (progn
     (command "_.pline" s1 s2 s3 "c")
     (setq highest (max (caddr r1) (caddr r2) (caddr r3)))
     (setq extr (- highest bot))
     (if 
       R17
       (command "_.extrude" (entlast) "" extr)     ;;2007 and higher 
       (command "_.extrude" (entlast) "" extr 0.0) ;;2006 and below
       );endif
     (command "_.slice" (entlast) "" "_3points" r1 r2 r3 s1)
     (setq e1 (entlast))
     (ssadd e1 ssrow)
     );progn
   );if
 );defun

(princ "Mesh-to-Solid 2007 loaded. Type  M2S  to run the program.")

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é