Aller au contenu

Messages recommandés

Posté(e)

Bonjours à tous,

 

Pour une fois, je fais appel à vos lumières, car je piétine lamentablement. J'y suis presque mais n'arrive pas à parfaire la routine.

 

Mon but et de projeter une polyligne optimisée (sans arc, tout ce qui a de plus simple) sur des 3dFace (qui représente un MNT en quelque sorte)

 

Le problème que je n'arrive pas à appréhender la finalisation de ma projection en bordure, je voudrais que ma 3dpoly finisse exactement au bords de ma dalle, ceci pour pouvoir la joindre par la suite. (avec l'excellente routine de Gilles)

 

Vous trouverez ICI un fichier de test et le lisp.

 

Je me fous de l'élégance de la routine, pourvu qu'elle fonctionne dans le dessin fourni, ce n'est pas un chalenge mais cela me permettrait d'avancer dans mon boulot plus rapidement (j'ai 290 dalles à traiter !)

 

Par la même occasion, pouvez vous me dire si vous obtenez quelque chose dans une vue3D en faisant un rendu avec l'option photo-réaliste

 

Merci à ceux qui prendront le temps de me donner un coup de main.

 

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

Posté(e)

Salut,

pas le temps d'approfondir pour l'instant mais :

projeter une polyligne optimisée (sans arc, tout ce qui a de plus simple) sur des 3dFace

l1 est une ligne

l2 est une entité

(vlax-invoke l1 [b]'IntersectWith[/b] l2 acExtendBoth)

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

 

Par la même occasion, pouvez vous me dire si vous obtenez quelque chose dans une vue3D en faisant un rendu avec l'option photo-réaliste

 

 

Tu veux dire sur une 3DFace ?

Il faut cocher "ignorer les faces cachées dans les autres options de rendu (

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Mon but et de projeter une polyligne optimisée (sans arc, tout ce qui a de plus simple) sur des 3dFace (qui représente un MNT en quelque sorte)

 

Le problème que je n'arrive pas à appréhender la finalisation de ma projection en bordure, je voudrais que ma 3dpoly finisse exactement au bords de ma dalle, ceci pour pouvoir la joindre par la suite. (avec l'excellente routine de Gilles)

 

 

Ta demande est assez difficile à cerner car tu parles à la fois d'entités autoCAD et d'objets "métier"

c'est quoi un MNT ?

 

essaie de parler uniquement métier ou uniquement AutoCAD

j'ai travaillé un peu en topo3D et je dois avoir encore des outils pour t'aider

 

en plus, le lien que tu proposes ne fonctionne pas

Posté(e)

c'est quoi un MNT ?

 

Modèle Numérique Terrestre.

 

en plus, le lien que tu proposes ne fonctionne pas

 

Pourtant je viens de le télécharger chez moi ! :o

Il faut tapez les 3 lettres aléatoires proposées, puis attendre 45s avant de pouvoir télécharger.

 

Le fichier dwg contient une dalle (carré) constitué de 3dfaces régulières en XY mais pas en Z, et un fichier lisp qui fonctionne pour ce dessin, qui projette les bords d'une polyligne2D épaisse sur le maillage.

On observe pour les projections que la terminaison en bord de dalle n'est pas parfaite, c'est ça mon problème que je cherche à résoudre.

 

Par la même occasion, pouvez vous me dire si vous obtenez quelque chose dans une vue3D en faisant un rendu avec l'option photo-réaliste

 

J'ai la réponse a ma question, le rendu ne fonctionne pas car il manque l'image qui ma servi à définir le matériaux (un ECW converti en TGA)

Si ça interesse quelqu'un (pour voir), je joindrais le fichier demain, mais il faudra soit le placer dans la même arborescence que moi, ou redéfinir le matériaux

Ou plus simplement je ferais une image depuis mon poste du résultat final

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

Posté(e)

ce qui suit devrait pouvoir t'aider

c'est une fonction qui recherche les points d'intersection entre un segment (à priori 2D) et une facette définie par 3 points ; elle retourne soit nil soit une liste de deux points 3D

 

je te propose d'abord de l'essayer avec la commande TEST jointe (qui suppose que la face 3D n'a que 3 points) ; s'il y a une projection possible, la commande test dessine une ligne rouge

j'ai essayé,çà fonctionne avec

- un segment qui traverse complètement la 3Dface

- un segment completement contenu dans la 3DFace

- un segement qui coupe un seul coté de la 3DFace

 

je te propose d'utiliser la fonction comme çà:

repérer toutes tes 3dfaces par un ssget "capture polygone" avec les points de ta polyligne

ensuite, pour chaque face3D, tu utilises la fonction avec chaque segment de ta polyligne

çà devrait te donner une liste de points avec laquelle tu peux générer(après nettoyage) ta polyligne 3D

 

si tes 3Dfaces ont 4 cotés tu peux les diviser en 2 triangles

 

ou bien tu peux l'intéger dans ton algorythme qui a l'air déjà avancé,

 

bon courage

 
;;---Début---------------------------------------------------int-pvectoriel------
;; << calcule le produit vectoriel de deux vecteurs                            >>
;; <<                                                                          >>
;;
;;  créée le :  jeudi 24 mai 2007  à 20:54
;;
;; Admet : 
;; =======
;;   V1         : Liste    = coordonnées
;;   V2         : Liste    = coordonnées
;;
;; Retourne : Liste = vecteur produt scalaire
;; ==========
;-------------------------------------------------------------------------------
(Defun int-pvectoriel ( V1 V2 / )
 ; ajouter si nécessaire la coordonnée Z à V1
 (if (not (caddr V1))
   (setq V1 (append V1 (list 0)))
 )
 ; ajouter si nécessaire la coordonnée Z à V2
 (if (not (caddr V2))
   (setq V2 (append V2 (list 0)))
 )
 (list
   (- (* (cadr V1) (caddr V2)) (* (caddr V1) (cadr V2)))
   (- (* (caddr V1) (car V2)) (* (car V1) (caddr V2)))
   (- (* (car V1) (cadr V2)) (* (cadr V1) (car V2)))
 )
)
;;---fin-----------------------------------------------------int-pvectoriel------



;;---Début---------------------------------------------------int-adroite---------
;; << vérifie qu'un point est à droite d'un segment                            >>
;; <<                                                                          >>
;;
;;  créée le :  jeudi 24 mai 2007  à 21:03
;;
;; Admet : 
;; =======
;;   A          : Point    = premier point du segment
;;   B          : Point    = second point du segment
;;   P          : Point    = à tester
;;
;; Retourne : Entier = -1 si à gauche 0 dessus 1 si à droite
;; ==========
;-------------------------------------------------------------------------------
(Defun int-adroite ( A B P / v)
 (setq v (int-pvectoriel (mapcar '- B A) (mapcar '- P A)))
 (cond
   ((minusp (caddr v)) -1)
   ((equal (caddr v) 0.0 1e-9) 0)
   (t 1)
 )
)
;;---fin-----------------------------------------------------int-adroite---------




;;---Début---------------------------------------------------int_danstriangle----
;; << vérifie qu'un point est à l'intérieur d'un triangle                      >>
;; << (soit toujours à droite soit toujours à gauche des cotés)                >>
;;
;;  créée le :  jeudi 24 mai 2007  à 21:06
;;
;; Admet : 
;; =======
;;   pt         : Point    = à tester
;;   triangle   : Liste    = de points
;;
;; Retourne : Booléen = T si à l'intérieur Nil si à l'extérieur
;; ==========
;-------------------------------------------------------------------------------
(defun int-danstriangle (pt triangle / lad)
 (setq lad (mapcar '(lambda (A B)
	       (int-adroite A B pt)
	     )
	     (mapcar 'int-xy triangle)
	     (mapcar 'int-xy (cons (last triangle) (int-xy triangle)))
    )
lad (vl-remove-if 'zerop lad)
 )
 (apply 'and (mapcar '(lambda (v) (= v (car lad))) lad))
)  
;;---fin-----------------------------------------------------int_danstriangle----
 



;;---Début---------------------------------------------------int-xy--------------
;; << retourne les deux premier termes d'une liste                             >>
;; <<                                                                          >>
;;
;;  créée le :  jeudi 24 mai 2007  à 21:09
;;
;; Admet : 
;; =======
;;   pt         : Liste    = 
;;
;; Retourne : Liste = '((car pt) (cadr pt))
;; ==========
;-------------------------------------------------------------------------------
(Defun int-xy ( pt / )
 (list (car pt) (cadr pt))
)
;;---fin-----------------------------------------------------int-xy--------------



;;---Début---------------------------------------------------int-proj------------
;; << donne la projection selon Z d'un point sur un plan                       >>
;; <<                                                                          >>
;;
;;  créée le :  jeudi 24 mai 2007  à 21:10
;;
;; Admet : 
;; =======
;;   pt         : Point    = point à projeter verticalement sur le plan
;;   triangle   : Liste    = de 3 points définissant le plan
;;
;; Retourne : Point = 3D
;; ==========
;-------------------------------------------------------------------------------
(defun int-proj (pt triangle / Nx Ny Nz C)
 ; l'équation du plan vérifie Nx*X + Ny*Y + Nz*z + C =0
 ; avec Nx,Ny,Nz les coordonnées du vecteur normal au plan qu'on obtient par le produit vectoriel de deux cotés du triangle
 (mapcar 'set (list 'Nx 'Ny 'Nz) (int-pvectoriel (mapcar '- (cadr triangle) (car triangle)) (mapcar '- (last triangle) (car triangle))))
 (setq C (-  0 (* Nx (caar triangle)) (* Ny (cadar triangle)) (* Nz (caddar triangle))))
 (list (car pt)
(cadr pt)
(/ (+ C (* Nx (car pt)) (* Ny (cadr pt))) Nz -1.0)
 )	

)  
;;---fin-----------------------------------------------------int-proj------------


;;---Début---------------------------------------------------int-seg-triangle----
;; << recherche la projection d'un segment 2D verticalement sur une facette    >>
;; << définie par 3 points                                                     >>
;;
;;  créée le :  jeudi 24 mai 2007  à 21:14
;;
;; Admet : 
;; =======
;;   seg        : Liste    = de deux points (à priori 2D)
;;   triangle   : Liste    = de 3 points définissant la facette 3D
;;
;; Retourne : Liste = de deux points ou nil si pas de projecion
;; ==========
;-------------------------------------------------------------------------------
(defun int-seg-triangle (seg triangle / lint)
 ; recherche des intersections (2D) entre le segment et le triangle
 (setq lint (mapcar '(lambda (p1 p2)
		(inters (int-xy p1) (int-xy p2) (int-xy (car seg)) (int-xy (cadr seg)) T)
	      )
	      triangle
	      (cons (last triangle) (int-xy triangle))
     )
lint (vl-remove-if 'null lint)
 )
 (cond
   ((zerop (length lint)) ; pas d'intersection trouvées
    (if (int-danstriangle (car seg) triangle) ; un point est dans le triangle donc les 2 y sont
      (list (int-proj (car seg) triangle) (int-proj (cadr seg) triangle))
    )
   )
   ((= 1 (length lint)) ; une intersection trouvée
    (if (int-danstriangle (car seg) triangle) ; premier point dans le triangle ?
      (list (int-proj (car seg) triangle) (int-proj (car lint) triangle))
      (list (int-proj (car lint) triangle) (int-proj (cadr seg) triangle))
    )
   )
   (t ; 2 intersections trouvées
    ; les mettre dans le bon ordre
    (if (< (distance (car lint) (int-xy (car seg))) (distance (cadr lint) (int-xy (car seg))))
      (list (int-proj (car lint) triangle) (int-proj (cadr lint) triangle))
      (list (int-proj (cadr lint) triangle) (int-proj (car lint) triangle))
    )
   )
 )  
 
)
;;---fin-----------------------------------------------------int-seg-triangle----

(defun c:test (/ face ent seg trian ptmp)
 (setq face (car (entsel "\n pointez une face 3d")))
 (setq ent (entget face))
 (if (= "3DFACE" (cdr (assoc 0 ent)))
    (setq seg (list
        (setq ptmp(getpoint "\npremier point du segment"))
        (getpoint ptmp  "\n second point du segment")
       )
   trian (list (cdr (assoc 10 ent)) (cdr (assoc 11 ent)) (cdr (assoc 12 ent)))
    )	   
  )
  (if seg
    (if (setq seg1 (int-seg-triangle seg trian))
      (entmake (list
	  (cons 0 "LINE")
	  (cons 10 (car seg1))
	  (cons 11 (cadr seg1))
	  (cons 62 1)
	)
      )
      (alert "pas de projection possible")
    )
    (alert "Tant pis")
  )   
)

Posté(e)

j'ai réussi à charger ton dessin et ton application ; j'ai essayé, j'ai regardé ton lisp et je crois que j'ai compris

pour chaque point de tes polylignes décalées, tu effectus une sélection par capture autour du point

ensuite pour chaque 3DFace trouvée, tu effectue un calcul de point (ligne 95) seulement si le point de ta polyligne est inclu dans ta facette (ligne 86)

sur l'image ci dessous, on voit bien que les facettes 1, 2 et 3 ne contiennent pas de point de tes polylignes décalées ; elles ne sont donc pas prises en compte

http://xs215.xs.to/xs215/07215/Image2.jpg

sur un segment droit de ta dalle, tu pourrais même louper des facettes et avoir une polyligne 3D qui oublie des trous et des bosses de ton MNT(tu vois j'apprends vite)

la routine que je t'ai fournie dans le message précédent raisonne sur un segment et non pas autour d'un point, elle prendra donc en compte les extrémités mais il faudra que tu gères les points en double.

en cas de pb n'hésites pas à appeler à l'aide, j'ai peut-être une autre idée d'algorythme.

 

Posté(e)

En fait dans la routine, je fais 2 passes.

La première avec une "capture" aux points de sommets de la polyligne décalée en 2D, j'obtiens une liste de point 3D qui est la projection de la forme géométrique en XY de ma polyligne. (sommets situés à l'interieur d'une 3Dface)

A partir de cette liste je refais une seconde passe avec "trajet" pour obtenir les intersections entre sommet et les arrêtes de 3Dfaces. pour que ma nouvelle polyligne épouse le cheminement en Z des 3Dfaces

J'insère ces sommets dans ma liste précédente (en controlant les doublons et l'ordre des nouveaux point) et dessine ma poly3D

 

Donc dans ma routine le problème vient (dans la 1ère passe) que dès qu'un sommet (le 1er rencontré) EST contenu dans ma dalle il faudrait que je reprenne le sommet n-1 et applique le mode trajet comme à la seconde passe.

En résumé, quand la polyligne n'est pas contenu entièrement dans la dalle, il faudrait que je fixe de nouveaux sommet en point d'appui en bord de dalle.

 

Tiens d'avoir résumé mon problème, m'a peut être donné la solution

 

PS: Voici ce qu'aurait du donner un rendu en possédant le matériaux

http://img341.imageshack.us/img341/6334/mntyo5.th.jpg

En grande taille

 

 

Ca y est j'ai résolu mon problème, d'avoir formulé des explications m'a éclairé.

Je me suis servi du boundingbox de ma pmaille de départ (avant la décomposition en 3Dface).

 

[Edité le 25/5/2007 par bonuscad]

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

Posté(e)

 

Hello

 

SVP tu pourais éventuellement nous re-poster ta routine corrigée / améliorée et

bien nous indiquer les conditions / restrictions d'utilisation ?! :)

 

Merci d'avance, Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

Euh! Je veux bien, mais c'est du brut de décoffrage pour répondre à MON besoin immédiat. (aucune élégance dans le code et utilisation de sous routine tierce qui sont pas de moi)

 

Si vous voulez en faire un challenge pour qu'elle soit plus générale d'utilisation, pourquoi pas!

Je n'ai pas trop de temps en ce moment pour faire cela.

 

Donc au départ j'ai une dalle en PMAILLE 3D (la routine la décompose en 3Dface, mais je ne sauvegarde pas mon dessin, mais fais un copier-coller du résultat dans un autre dessin) et des LWPOLYLINE (SANS arcs) ayant une épaisseur constante, tout ça dans le SCG. Les calques que je veux traiter sont aussi spécifique à mon dessin, mais ca c'est facile à modifier.

 

Cette routine + utilisation de PEDIT3D de gilles va me permettre d'arriver au résultat que je souhaite avec le minimum de manipulation par la suite. (je pense "mailler" entre mes polyligne3d avec mon module "trinod.lsp" par la suite pour qu'elle soient visible en rendu, pas tester encore!)

 

(defun punktinpolylinie (pointinquestion point_list / )
(if (equal 0.0 (pipwinkelsumme pointinquestion point_list) 0.0001)
	nil
	t
)
)
(defun pipwinkelsumme (pointinquestion point_list / count p1 p2 scheitel winkeleins winkelzwei)
(setq
	winkeleins 0.0
	scheitel (car point_list)
	count 1
)
(while (< 1 (length point_list))
	(setq
		p1 (car point_list)
		p2 (cadr point_list)
		point_list (cdr point_list)
		winkelzwei (pipwinkelhilfe pointinquestion p1 p2)
		winkelzwei (if (< 180.0 winkelzwei) (- winkelzwei 360.0) winkelzwei)
		winkeleins (+ winkeleins winkelzwei)
	)
	(setq count (1+ count))
)
(setq
	winkelzwei (pipwinkelhilfe pointinquestion p2 scheitel)
	winkelzwei (if (< 180.0 winkelzwei) (- winkelzwei 360.0) winkelzwei)
)
(+ winkeleins winkelzwei)
)
(defun pipwinkelhilfe (pointinquestion p1 p2 / alpha beta)
(setq
	beta (angle pointinquestion p1)
	alpha (angle pointinquestion p2)
	alpha (- alpha beta)
)
(if (< alpha 0)
	(setq alpha (+ (* 2 pi) alpha))
)
(* (/ (float alpha) pi) 180.0)
)
(defun c:lw2pl3d ( / )
(if (not bdx)
	(progn
		(setq jsm (ssget "_X" '((0 . "POLYLINE") (8 . "MAILLAGE3D") (70 . 64))))
		(vlax-invoke-method
			(vlax-ename->vla-object (ssname jsm 0))
			'GetBoundingBox
			'pt1
			'pt2
		)
		(setq bdx
			(list
				(mapcar
					'vlax-safearray->list
					(list pt1 pt2)
				)
			)
		)
		(setq bdx
			(mapcar
				'(lambda (funcs)
					(mapcar
						'(lambda (func) (apply func bdx))
						funcs
					)
				)
				'((caar cadar)(caadr cadar)(caadr cadadr)(caar cadadr))
			)
		)
		(command "_.explode" (ssname jsm 0))
	)
)
(command "_.zoom" "_window" (car bdx) (caddr bdx))
(princ "\nChoisir la polyligne 2D")
(setq js_lw (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
(cond
	(js_lw
		(setvar "cmdecho" 0)
		(setq
			dxf_lw (entget (ssname js_lw 0))
			vla_obj (vlax-ename->vla-object (cdar dxf_lw))
			dxf_elw (cdr (assoc 40 dxf_lw))
			loop 0
		)
		(vla-Offset vla_obj (/ dxf_elw 2.0))
		(repeat 2
			(setq
				dxf_lw (entget (entlast))
				dxf_10 (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) dxf_lw))
				all_pt nil
			)
			(while dxf_10
				(if (cdr dxf_10)
					(if (setq rslt (vl-remove nil (mapcar '(lambda (x y) (inters (car dxf_10) (cadr dxf_10) x y T)) (cons (last bdx) bdx) bdx)))
						(if (and (punktinpolylinie p1 bdx) (not (equal (car dxf_10) (car rslt) 1E-12)))
							(setq p1 (car dxf_10) dxf_10 (cons p1 (cons (car rslt) (cddr dxf_10))))
							(setq p1 (car rslt))
						)
						(setq p1 (car dxf_10))
					)
				)
				(setq
					js (ssget "_C" (list (- (car p1) 25.0) (- (cadr p1) 25.0)) (list (+ (car p1) 25.0) (+ (cadr p1) 25.0)) '((0 . "3DFACE") (8 . "MAILLAGE3D")))
					p1 (trans p1 1 0)
					p1 (list (car p1) (cadr p1))
					n -1
					lst_px nil
				)
				(cond
					(js
						(repeat (sslength js)
							(setq
								dxf_ent (entget (ssname js (setq n (1+ n))))
								lst_pt
								(list
									(cdr (assoc 10 dxf_ent))
									(cdr (assoc 11 dxf_ent))
									(cdr (assoc 12 dxf_ent))
									(cdr (assoc 13 dxf_ent))
								)
							)
							(if (equal (caddr lst_pt) (cadddr lst_pt))
								(setq lst_pt (list (car lst_pt) (cadr lst_pt) (caddr lst_pt) (car lst_pt)))
								(setq lst_pt (append lst_pt (list (car lst_pt))))
							)
							(if (punktinpolylinie p1 lst_pt)
								(progn
									(command "_.ucs" "_3point" "_none" (car lst_pt) "_none" (cadr lst_pt) "_none" (caddr lst_pt))
									(setq
										p_10 (trans (list (car p1) (cadr p1) 1000.0) 0 1)
										p_11 (trans (list (car p1) (cadr p1) 0.0) 0 1)
										p10_2d (list (car p_10) (cadr p_10) 0.0)
										p11_2d (list (car p_11) (cadr p_11) 0.0)
										p_int (trans (inters p10_2d p11_2d p_10 p_11 nil) 1 0)
										lst_px (cons p_int lst_px)
									)
									(command "_.ucs" "_world")
								)
							)
						)
						(if lst_px
							(setq all_pt (append lst_px all_pt))
						)
					)
				)
				(setq dxf_10 (cdr dxf_10))
			)
			(cond
				(all_pt
					(setq pt_all (list (car all_pt)))
					(while (cdr all_pt)
						(setq
							p1 (car all_pt)
							p2 (cadr all_pt)
							js (ssget "_F" (list p1 p2) '((0 . "3DFACE") (8 . "MAILLAGE3D")))
							p1 (trans p1 1 0)
							p2 (trans p2 1 0)
							p1 (list (car p1) (cadr p1))
							p2 (list (car p2) (cadr p2))
							n -1
							lst_px nil
						)
						(cond
							(js
								(repeat (sslength js)
									(setq
										dxf_ent (entget (ssname js (setq n (1+ n))))
										lst_pt
										(list
											(cdr (assoc 10 dxf_ent))
											(cdr (assoc 11 dxf_ent))
											(cdr (assoc 12 dxf_ent))
											(cdr (assoc 13 dxf_ent))
										)
									)
									(if (equal (caddr lst_pt) (cadddr lst_pt))
										(setq lst_pt (list (car lst_pt) (cadr lst_pt) (caddr lst_pt) (car lst_pt)))
										(setq lst_pt (append lst_pt (list (car lst_pt))))
									)
									(while (cdr lst_pt)
										(setq px (inters p1 p2 (car lst_pt) (cadr lst_pt) T))
										(if px
											(progn
												(setq px (inters (list (car px) (cadr px) 0.0) (list (car px) (cadr px) 100.0) (car lst_pt) (cadr lst_pt) nil))
												(if (and px (not (member px lst_px)))
													(setq lst_px (cons px lst_px))
												)
											)
										)
										(setq lst_pt (cdr lst_pt))
									)
								)
								(if lst_px
									(progn
										(setq new_lst nil)
										(while lst_px
											(setq l (mapcar '(lambda (x) (distance x p1)) lst_px))
											(setq el (nth (- (length lst_px) (length (member (apply 'min l) l))) lst_px))
											(setq
												lst_px (vl-remove el lst_px)
												new_lst (cons el new_lst)
											)
										)
										(setq pt_all (append (list (cadr all_pt)) new_lst pt_all))
									)
									(setq pt_all (append (list (cadr all_pt)) pt_all))
								)
							)
							(T (setq pt_all (append (list (cadr all_pt)) pt_all)))
						)
						(setq all_pt (cdr all_pt))
					)
					(command "_.3dpoly")
					(foreach el pt_all (command "_none" (trans el 0 1)))
					(command "")
					(entdel (cdar dxf_lw))
				)
				(T (princ "\nAucune 3DFACE trouvée!"))
			)
			(if (not (zerop (rem (setq loop (1+ loop)) 2)))
				(vla-Offset vla_obj (- (/ dxf_elw 2.0)))
			)
		)
		(setvar "cmdecho" 1)
	)
)
(prin1)
)

 

NB: Le dessin d'essai que j'avais fourni en exemple ne fonctionne pas pour cette routine car j'avais déjà décomposé ma maille.

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

Posté(e)

Oui, Oui :calim:

 

Désolé, de la confusion sur l'appellation, il faut dire que pour l'instant, à part de l'avoir testée et conservée, je m'en suis pas trop servi.

 

Mais là elle va m'être forte utile

 

Merci encore ;)

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

  • 4 mois après...
Posté(e)

Merci a Didier, ça routine m'a vraiment été utile.

et j'étais loin de prendre les choses dans le bon sens.

J'ai du adapter le code à mon besoin, retourner seulement les z des sommets de polylignes,

en ignorant les intersections avec les arretes de 3dfaces.

je le tiens à disposition, mais c'est un vrai foutoir avec beaucoup de références à des routines de powerclic.

salut

 

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

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é