Aller au contenu

Développer les surfaces développables


(gile)

Messages recommandés

Voici une petite routine qui crée un bloc figurant le développé de la surface réglée sélectionnée.

 

 

Cette routine fonctionne avec tous les maillages 3D à 2 sommets M (surfaces réglées, cones, cylindres ...).

 

 

La méthode employée consiste en une "triangulation" de chaque maille pour récupérer les distances entre les sommets et "reconstruction" des triangles en 2D dans le plan du SCU pour retrouver les sommets qui serviront à faire une spline.

 

 

La précision de la méthode dépend donc du nombre de sommets N (ne pas hésiter à mettre une valeur importante à SURFTAB1).

 

 

Après avoir positionné la région dans le dessin, il est proposé à l'utilisateur de faire un miroir, s'il préfère afficher l'autre face du développé.

 

 

Toutes les critiques sont les bienvenues, notamment de la part des "forts en descro" concernant la méthode (je suis autodidacte dans ce domaine aussi).

 

 

 

NOUVELLE VERSION (08/07/06)

 

 

Le bloc est nommé par défaut avec un nom indexé : SurfDev_1, SurfDev_2 ... À la fin de la routine, il est proposé à l'utilisateur de renommer le bloc.

 

 

;;; SURFDEV -Gilles Chanteau- 08/07/06
;;; Crée un bloc représentant le développé d'un maillage 3D ouvert ou
;;; fermé à 2 sommets M (surface réglée).
;;; La précision du développé augmente avec le nombre de mailles N (SURFTAB1)
;;; Après positionnement du bloc (insertion et rotation), il est proposé à
;;; l'utilisateur d'exécuter un miroir pour afficher l'autre face du développé.
;;; Par défaut, le bloc est nommé SurfDev_1, SurfDev_2, en fonction de l'existence
;;; de blocs du même nom dans le dessin.
;;; Il est proposé à l'utilisateur de le renommer.
;;;
;;;[color=#FF0000] NOTA : si les surfaces développables sont toujours des surfaces réglées, toutes
;;; les surfaces réglées ne sont pas forcément développables. 
;;; Surfdev n'évalue si la surface sélectionnée est rigoureusement développable,
;;; et peut donc créer un développé erroné ou inexact pour celle-ci.[/color]

;;; SQR retourne le carré du nombre

(defun sqr (num)
 (if (numberp num)
   (* num num)
 )
)

;;; ACOS Retourne l'arc cosinus du nombre

(defun acos (num)
 (if (<= -1 num 1)
   (atan (sqrt (- 1 (sqr num))) num)
 )
)

;;; THIRD_PT Retourne le point qui est à dist1 de pt1 et dist2 de pt2

(defun third_pt	(pt1 pt2 dist1 dist2 /)
 (cond
   ((zerop dist1) pt1)
   ((zerop dist2) pt2)
   (T
    (polar
      pt1
      (+ (angle pt1 pt2)
  (acos
    (/ (+ (sqr (distance pt1 pt2)) (sqr dist1) (- (sqr dist2)))
       (* 2 (distance pt1 pt2) dist1)
    )
  )
      )
      dist1
    )
   )
 )
)

;;; Index_name Crée un nom indexé dont l'indice n'est pas présent dans la table spécifiée

(defun index_name (tbl prfx / nom compt)
 (setq	nom   (strcat prfx "1")
compt 1
 )
 (while (tblsearch tbl nom)
   (setq compt	(1+ compt)
  nom	(strcat prfx (itoa compt))

   )
 )
 nom
)

;;; Liste des sommets d'une polyligne 3D

(defun 3dpoly_pts (ent / pt pts)
 (while (setq pt (cdr (assoc 10 (entget (entnext ent)))))
   (setq ent (entnext ent)
  pts (cons pt pts)
   )
 )
 pts
)

;;; Fonction principale

(defun c:SurfDev (/ *error* osm	cmd del	obj lst	n lst1 lst2 rslt1 rslt2	n1 n2 ss
	  ind new)
 

;; Redéfinition de *error*

(defun *error* (msg)
 (if (= msg "Fonction annulée")
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (command "_undo" "_end")
 (command "_u")
 (princ)
)

 (setq	osm (getvar "OSMODE")
cmd (getvar "CMDECHO")
del (getvar "DELOBJ")
 )
 (while
   (not
     (setq
obj (car (entsel "\Sélectionnez la surface à développer: "))
     )
   )
 )
 (if (and (= (cdr (assoc 0 (entget obj))) "POLYLINE")
   (zerop (logand (cdr (assoc 70 (entget obj))) 207))
   (< (cdr (assoc 71 (entget obj))) 3)
     )
   (progn
     (command "_undo" "_begin")
     (setq lst	(3dpoly_pts obj)
    n	0
    n1	0
    n2	0
     )
     (repeat (/ (length lst) 2)
(setq lst1 (cons (nth n lst) lst1)
      n	   (1+ n)
)
     )
     (repeat (/ (length lst) 2)
(setq lst2 (cons (nth n lst) lst2)
      n	   (1+ n)
)
     )
     (if (equal (car lst1) (car lst2) 1e-9)
(setq rslt1 (cons '(0 0 0) rslt1)
      rslt2 (cons '(0 0 0) rslt2)
      rslt1 (cons (polar '(0 0 0)
			 (angle (car lst1) (cadr lst1))
			 (distance (car lst1) (cadr lst1))
		  )
		  rslt1
	    )
      rslt2 (cons (third_pt (car rslt1)
			    '(0 0 0)
			    (distance (cadr lst1) (cadr lst2))
			    (distance (car lst2) (cadr lst2))
		  )
		  rslt2
	    )
      lst1  (cdr lst1)
      lst2  (cdr lst2)
)
(setq rslt1 (cons '(0 0 0) rslt1)
      rslt2 (cons (polar '(0 0 0)
			 (angle (car lst1) (car lst2))
			 (distance (car lst1) (car lst2))
		  )
		  rslt2
	    )
)
     )
     (repeat (1- (length lst1))
(setq rslt1 (cons (third_pt
		    (car rslt1)
		    (car rslt2)
		    (distance (nth n1 lst1)
			      (nth (setq n1 (1+ n1)) lst1)
		    )
		    (distance (nth n2 lst2) (nth n1 lst1))
		  )
		  rslt1
	    )
)
(if (equal (nth n1 lst1) (nth (1+ n2) lst2) 1e-9)
  (setq	rslt2 (cons (car rslt1) rslt2)
	n2    (1+ n2)
  )
  (setq	rslt2
	 (cons (third_pt
		 (car rslt1)
		 (car rslt2)
		 (distance (nth n1 lst1) (nth (1+ n2) lst2))
		 (distance (nth n2 lst2)
			   (nth (setq n2 (1+ n2)) lst2)
		 )
	       )
	       rslt2
	 )
  )
)
     )
     (setvar "CMDECHO" 0)
     (setvar "OSMODE" 0)
     (setvar "DELOBJ" 1)
     (setq ss (ssadd))
     (foreach l (list rslt1 rslt2)
(if (not
      (vl-every '(lambda (pt) (equal pt (car l) 1e-9)) l)
    )
  (progn
    (command "_.spline")
    (mapcar 'command l)
    (command "" "" "")
    (ssadd (entlast) ss)
  )
)
     )
     (foreach fun (list 'car 'last)
(if (not (equal	(apply fun (list rslt1))
		(apply fun (list rslt2))
		1e-9
	 )
    )
  (progn
    (command "_.line"
	     (apply fun (list rslt1))
	     (apply fun (list rslt2))
	     ""
    )
    (ssadd (entlast) ss)
  )
)
     )
     (setq ind (index_name "BLOCK" "SurfDev_"))
     (command "_.block" ind '(0 0 0) ss "")
     (setvar "OSMODE" osm)
     (command "_.insert" ind "_scale" 1)
     (princ "\nSpécifiez le point d'insertion: ")
     (command pause)
     (princ (strcat "\nSpécifiez l'angle de rotation <"
	     (angtos 0)
	     ">: "
     )
     )
     (command pause)
     (setq bloc (entlast))
     (initget "Oui Non")
     (if (= "Oui"
     (getkword "\nEffectuer un miroir ? [Oui/Non] < Non >: ")
  )
(progn
  (command "_mirror"
	   bloc
	   ""
	   (setq pt (cdr (assoc 10 (entget bloc))))
	   "_non"
	   (polar pt 0.0 1)
	   "_yes"
	   "_.explode"
	   bloc
	   "_.block"
	   ind
	   "_yes"
	   pt
	   "_previous"
	   ""
  )
  (command "_.insert" ind "_scale" 1)
  (princ "\nSpécifiez le point d'insertion: ")
  (command pause)
  (princ (strcat "\nSpécifiez l'angle de rotation <"
		 (angtos 0)
		 ">: "
	 )
  )
  (command pause)
)
     )
     (initget "Oui Non")
     (if (= "Oui"
     (getkword (strcat "\nRenommer le bloc \""
		       ind
		       "\" ? [Oui/Non] < Non >: "
	       )
     )
  )
(progn
  (initdia)
  (command "_.rename" "_block")
  (while (< 7 (getvar "CMDACTIVE"))
    (command pause)
  )
  (command)
)
     )
     (command "_.undo" "_end")
     (setvar "CMDECHO" cmd)
     (setvar "DELOBJ" del)
   )
   (princ
     "\nL'objet sélectionné n'est pas une surface développable."
   )
 )
 (princ)
)

[Edité le 29/6/2006 par (gile)][Edité le 30/6/2006 par (gile)][Edité le 2/7/2006 par (gile)][Edité le 8/7/2006 par (gile)][Edité le 19/12/2007 par (gile)]

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 51
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

En passant par un bloc, l'insertion du développé semble plus rapide, plus élégante (pas de ligne élastique) et permet la rotation pour un meilleur positionnement.

 

Je modifie le LISP ci dessus en conséquence.

 

PS : Le bloc est ensuite supprimé et purgé.

 

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

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Je suis un bien piètre testeur, j'avais laissé passer un appel à la fonction GETVAL qui n'était pas définie parmi les sous-routines ci-dessus, comme elle fait partie des routines chargées automatiquement dans mon profil utilisateur, je n'avais pas eu de message d'erreur.

 

L'erreur dans le LISP ci-dessus est réparé.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Je suis étonné que çà n'intéresse personne. :exclam:

 

Deux petits exemples d'utilisation possible.

 

Une trémie :

 

http://img112.imageshack.us/img112/5441/developptrmie6iz.png

 

Un bateau :

 

http://img301.imageshack.us/img301/5519/dveloppbateau9vq.png

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Super Post !

 

J'avais pas vu. Magnifique code, en pur Autolisp.

 

Il faudrait le livrer avec un séparateur dans le sens M au cas où l'on voudrais s'attaquer à plus gros.

 

J'ai fait une surface réglée sur deux objets fermés, là, ca a marché mais le résultat fut un peu bizarre.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Merci Tramber,

 

Il me semblait bien que le message était passé inaperçu.

 

Le choix du "pur AutoLISP" est essentiellement du à l'utilisation des (command ... pause ...).

 

Je ne comprends pas bien ce que tu veux dire par "un séparateur dans le sens M", il me semble que s'il y a plus de 2 sommets M la surface n'est plus développable, non ?

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Non, bien sur, mais il suffit alors de continuer à boucler et de proposer l'insertion d'autant de développés qu'il ya de rangs M-1. Regarde ton bateau, si il avait été modelé en un seul maillage polygonal ?!

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

C'est bien ce qu'il m'avait semblé comprendre, ce que tu propose est, il me semble, tout à fait réalisable, mais je me demande si çà a une réelle utilité.

 

Dans le cas dudit bateau par exemple, s'il avait été fait en un seul maillage (_edgesurf), d'abord ce ne seait plus la même carène (une coque en forme et plus une coque à bouchains vifs) et les arrêtes générées par les développés de chaque rangées M ne correspondraient pas aux bouchains.

 

Il existe sûrement d'autres situations où le problème ne se pose pas de a même façon, je vais regarder ce que je peux faire.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Voici un premier jet pour répondre à la suggestion de Tramber.

 

 

J'ajouterais aux objections faites ci-dessus que la précision dépendant du nombre de sommets, si un grand nombre de sommets N ne fait qu'allonger le temps de calcul, l'augmentation de sommets M augmente d'autant le nombre de blocs créés.

 

 

;;; MSURFDEV -Gilles Chanteau- 08/07/06
;;; Crée, pour chaque rangée M d'un maillage 3D ouvert ou fermé, un bloc (region)
;;; représentant le développé de la rangée.
;;; La précision du développé augmente avec le nombre de mailles N (SURFTAB1)
;;; Après positionnement du bloc (insertion et rotation), il est proposé à
;;; l'utilisateur d'exécuter un miroir pour afficher l'autre face du développé.
;;; Par défaut, le bloc est nommé SurfDev_1, SurfDev_2, en fonction de l'existence de
;;; blocs du même nom dans le dessin. Il est proposé à l'utilisateur de le renommer.
;;; SQR retourne le carré du nombre
(defun sqr (num)
 (if (numberp num)
   (* num num)
 )
)
;;; ACOS Retourne l'arc cosinus du nombre
(defun acos (num)
 (if (<= -1 num 1)
   (atan (sqrt (- 1 (sqr num))) num)
 )
)
;;; THIRD_PT Retourne le point qui est à dist1 de pt1 et dist2 de pt2
(defun third_pt	(pt1 pt2 dist1 dist2 /)
 (cond
   ((zerop dist1) pt1)
   ((zerop dist2) pt2)
   (T
    (polar
      pt1
      (+ (angle pt1 pt2)
  (acos
    (/ (+ (sqr (distance pt1 pt2)) (sqr dist1) (- (sqr dist2)))
       (* 2 (distance pt1 pt2) dist1)
    )
  )
      )
      dist1
    )
   )
 )
)
;;; Index_name Crée un nom indexé dont l'indice n'est pas présent dans la table spécifiée
(defun index_name (tbl prfx / nom compt)
 (setq	nom   (strcat prfx "1")
compt 1
 )
 (while (tblsearch tbl nom)
   (setq compt	(1+ compt)
  nom	(strcat prfx (itoa compt))
   )
 )
 nom
)
;;; Liste des sommets d'une polyligne 3D
(defun 3dpoly_pts (ent / pt pts)
 (while (setq pt (cdr (assoc 10 (entget (entnext ent)))))
   (setq ent (entnext ent)
  pts (cons pt pts)
   )
 )
 pts
)
;;; Redéfinition de *error*
(defun SurfDev_err (msg)
 (if (= msg "Fonction annulée")
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (command "_undo" "_end")
 (command "_u")
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)
;;; Fonction principale
(defun c:MSurfDev
	 (/ osm	cmd del	obj lst	n lst1 lst2 rslt1 rslt2	n1 n2 ss
	  ind new)
 (setq	m:err	*error*
*error*	SurfDev_err
 )
 (setq	osm (getvar "OSMODE")
cmd (getvar "CMDECHO")
del (getvar "DELOBJ")
 )
 (while
   (not
     (setq
obj (car (entsel "\Sélectionnez la surface à développer: "))
     )
   )
 )
 (if (and (= (cdr (assoc 0 (entget obj))) "POLYLINE")
   (zerop (logand (cdr (assoc 70 (entget obj))) 206))
     )
   (progn
     (setq lst	 (3dpoly_pts obj)
    nb_M (cdr (assoc 71 (entget obj)))
    nb_N (cdr (assoc 72 (entget obj)))
     )
     (command "_undo" "_begin")
     (setvar "CMDECHO" 0)
     (setvar "OSMODE" 0)
     (setvar "DELOBJ" 1)
     (while (< 1 nb_M)
(foreach n '(lst1 lst2 rslt1 rslt2)
  (set n nil)
  )
(setq n	 0
      n0 (/ (length lst) nb_M)
      n1 0
      n2 0
)
(repeat	n0
  (setq	lst1 (cons (nth n lst) lst1)
	n    (1+ n)
  )
)
(repeat	n0
  (setq	lst2 (cons (nth n lst) lst2)
	n    (1+ n)
  )
)
(if (equal (car lst1) (car lst2) 1e-9)
  (setq	rslt1 (cons '(0 0 0) rslt1)
	rslt2 (cons '(0 0 0) rslt2)
	rslt1 (cons (polar '(0 0 0)
			   (angle (car lst1) (cadr lst1))
			   (distance (car lst1) (cadr lst1))
		    )
		    rslt1
	      )
	rslt2 (cons (third_pt (car rslt1)
			      '(0 0 0)
			      (distance (cadr lst1) (cadr lst2))
			      (distance (car lst2) (cadr lst2))
		    )
		    rslt2
	      )
	lst1  (cdr lst1)
	lst2  (cdr lst2)
  )
  (setq	rslt1 (cons '(0 0 0) rslt1)
	rslt2 (cons (polar '(0 0 0)
			   (angle (car lst1) (car lst2))
			   (distance (car lst1) (car lst2))
		    )
		    rslt2
	      )
  )
)
(repeat	(1- (length lst1))
  (setq	rslt1 (cons (third_pt
		      (car rslt1)
		      (car rslt2)
		      (distance	(nth n1 lst1)
				(nth (setq n1 (1+ n1)) lst1)
		      )
		      (distance (nth n2 lst2) (nth n1 lst1))
		    )
		    rslt1
	      )
  )
  (if (equal (nth n1 lst1) (nth (1+ n2) lst2) 1e-9)
    (setq rslt2	(cons (car rslt1) rslt2)
	  n2	(1+ n2)
    )
    (setq rslt2
	   (cons (third_pt
		   (car rslt1)
		   (car rslt2)
		   (distance (nth n1 lst1) (nth (1+ n2) lst2))
		   (distance (nth n2 lst2)
			     (nth (setq n2 (1+ n2)) lst2)
		   )
		 )
		 rslt2
	   )
    )
  )
)
(setq ss (ssadd))
(foreach l (list rslt1 rslt2)
  (if (not
	(vl-every '(lambda (pt) (equal pt (car l) 1e-9)) l)
      )
    (progn
      (command "_.spline")
      (mapcar 'command l)
      (command "" "" "")
      (ssadd (entlast) ss)
    )
  )
)
(foreach fun (list 'car 'last)
  (if (not (equal (apply fun (list rslt1))
		  (apply fun (list rslt2))
		  1e-9
	   )
      )
    (progn
      (command "_.line"
	       (apply fun (list rslt1))
	       (apply fun (list rslt2))
	       ""
      )
      (ssadd (entlast) ss)
    )
  )
)
(command "_.region" ss "")
(command "_.chprop" (entlast) "" "_layer" "0" "")
(setq ind (index_name "BLOCK" "SurfDev_"))
(command "_.block" ind '(0 0 0) (entlast) "")
(setvar "OSMODE" osm)
(command "_.insert" ind "_scale" 1)
(princ "\nSpécifiez le point d'insertion: ")
(command pause)
(princ (strcat "\nSpécifiez l'angle de rotation <"
	       (angtos 0)
	       ">: "
       )
)
(command pause)
(setq bloc (entlast))
(initget "Oui Non")
(if (= "Oui"
       (getkword "\nEffectuer un miroir ? [Oui/Non] < Non >: ")
    )
  (progn
    (command "_mirror"
	     bloc
	     ""
	     (setq pt (cdr (assoc 10 (entget bloc))))
	     "_non"
	     (polar pt 0.0 1)
	     "_yes"
	     "_.explode"
	     bloc
	     "_.block"
	     ind
	     "_yes"
	     pt
	     "_previous"
	     ""
    )
    (command "_.insert" ind "_scale" 1)
    (princ "\nSpécifiez le point d'insertion: ")
    (command pause)
    (princ (strcat "\nSpécifiez l'angle de rotation <"
		   (angtos 0)
		   ">: "
	   )
    )
    (command pause)
  )
)
(initget "Oui Non")
(if (= "Oui"
       (getkword (strcat "\nRenommer le bloc \""
			 ind
			 "\" ? [Oui/Non] < Non >: "
		 )
       )
    )
  (progn
    (initget 1)
    (setq new (getstring "\Entrez le nouveau nom: "))
    (command "_.rename" "_block" ind new)
  )
)
(repeat	n0
  (setq lst (cdr lst))
)
(setq nb_M (1- nb_M))
     )
     (command "_.undo" "_end")
     (setvar "CMDECHO" cmd)
     (setvar "DELOBJ" del)
   )
   (princ
     "\nL'objet sélectionné n'est pas une surface développable."
   )
 )
 (setq	*error*	m:err
m:err nil
 )
 (princ)
) 

 

[Edité le 8/7/2006 par (gile)]

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Magnifique !

 

Même s'il est très contraignant de répondre à toutes ces questions de positionnement et de renommage.

 

Ca peut être très intéressant de développer des surface complexes à M et N mailles. Bravo.

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Magnifique !

 

Merci encore :red:

 

Même s'il est très contraignant de répondre à toutes ces questions de positionnement et de renommage.

 

Il est, bien sûr, possible de modifier tout ça (et tu n'aurais aucune difficulté à le faire ;) ).

 

Pour le positionnement (rotation et miroir), si ce n'est pas fait dans le déroulement du LISP il est fort probable que l'utilisateur doive le faire après.

 

L'orientation du bloc (surface développée) est faite arbitrairement par rapport au SCU courant en fonction des premiers sommets traités (selon qu'ils sont confondus ou pas).

 

La face vue dépend du côté qui a été sélectionné sur les objets au moment de la création de la surface réglée, il me semblait donc intéressant de proposer la possibilité d'afficher l'autre face.

 

Pour le renommage, on pourrait éviter de faire un bloc ou le supprimer et le purger à la fin.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonsoir (gile),

 

existe-t-il une version de ta routine Lisp surfdev qui trace chaque génératrice sur le développement afin de pouvoir plier le développé par plis successifs ?

 

sinon je suis obligé de décomposer la courbe en points et de tracer chaque génératrice, ce qui est relativement long manuellement. :(

 

Merci !

 

Lien vers le commentaire
Partager sur d’autres sites

existe-t-il une version de ta routine Lisp surfdev qui trace chaque génératrice sur le développement afin de pouvoir plier le développé par plis successifs ?

 

Non, la routine n'est pas rigoureusement "mathématique'. Elle fait un développé par triangulations de la surface réglée mais ne vérifie pas si la surface est vraiment une surface développable (toutes les surfaces développables sont des surfaces réglées mais l'inverse n'est pas vrai).

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

 

Bon Matin Gilles

 

Ta routine (que je n'ai pas encore testée, mais j'ai une totale confiance)

me semble fabuleuse :) :D :cool:

 

Je vais me replonger avec délice dans la bonne vieille 3D Filaire d'AutoCAD :P

 

Le Decapode "filairement impressionné"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Gile

Après la lecture de ce sujet je m'interesse à ce genre de chose developée des maillage.

J'aimerais que tu me precise sur quel entités autocad marche ton lisp et si il serait possible de l'adapter avec les solid 3D ou les maillage polyface????

Merci d'avance.

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

Comme dit au début le LISP ne fonctionne qu'avec des surfaces maillées de type surface réglées.

Les surfaces développables sont toujours des surfaces réglées, mais l'inverse n'est pas vrai, certaines surface réglées ne sont pas développables. Le LISP ne sait pas les différencier et donnera dont un développé faux pour ces surfaces non développables.

 

Je ne pense pas qu'il soit possible de faire la même chose avec des solides en LISP.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

(Re)Bonjour,

Et pour un maillage polyface???

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Si le calcul de développé intéresse du monde, j'ai eu l'occasion de me pencher sur le problème d'un point de vue pratique pour la réalisation d'un limon balancé caissonné de section triangulaire.

 

Suivant le rapport entre l'épaisseur et la largeur de la pièce à développer, on peux utiliser des méthodes différentes.

 

Si le rapport ep/largeur est proche de 0, les bords ne pourront pas s'allonger. La méthode par triangulation sera la plus fiable, elle conserve la longueur des cotés.

 

Si le rapport ep/largeur est proche de 1, les bords allongerons pendant le formage. Une autre méthode permet d'anticiper ces déformations. L'explication à cette adresse avec des images http://www.le-metal.net/Un-escalier#3

 

Etienne

www.le-metal.net, sur la métallerie
Lien vers le commentaire
Partager sur d’autres sites

Ah tiens, marrant.

 

J'ai déjà du me battre dans mon entreprise actuelle car ils pensaient que certaines surfaces étaient développables quand je pensais le contraire.

 

http://www.schaffner-escaliers.com/

 

Allez voir les escaliers d'intérieurs et particulièrement les limons centraux. Ils sont à peu près tous de moi. Mais y a pas de mal pour un tube rectangulaire débillardé de 100 de large, on fait un pré-cintrage (R/ cos² angle de montée) pour les flasques dessus et dessous. Quand c'est plus large c'est plus délicat.

 

Mais c'est rigolo qu'on parle de limon triangulaire. On me prend toujours pour un fou quand je dis ce qui est développable et ce qui ne l'est pas !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
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é