Aller au contenu

fillet all


Messages recommandés

Invité ingoenius
Posté(e)

a votre avis est possible avec autocad 2007 avoir acces en autolisp aux aretes d'un solide??

 

l'idee serai de faire un petit scrip pour faire un _FILLET global qui demande seulement le rajon desiréé et puis s'applique a tous les arete d'un solide selectionne, sans avoir a le cliquer un par un ,

 

 

Posté(e)

De mémoire, j'avais déjà répondu à ta question.

 

Il faut se mettre dansune vue adaptée et cliquer les points (à la main ou en lisp). C'est la seule méthode.

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

oui tu avais dejà repondu, mais je me suis dit que avec cette nouvelle version ou on peut acceder a la modifications des solides, peut etre il avait un nouveau moyen dans les codes dxf ;-)

Posté(e)

Salut,

 

Eh non, les codes DXF des solides sont toujours aussi inexploitables, et je n'ai rien trouvé en vlisp qui puisse servir à accéder aux arrêtes et/ou aux faces d'un solide.

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

Posté(e)

Malheureusement, le DXF ne donne rien pour les solides.

Il renferme un code, certes, mais le code ACIS qui ne s'édite pas par programmation.

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Si vous tenez absolument à pouvoir exploiter les codes DXF des solides, regardez par exemple ICI

 

Qui a trouvé ce fameux nombre magique 95 de décalage booléen, je n'en sais rien, mais ça peux rendre service ;)

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

Posté(e)

Merci Bonus,

 

Mais j'avais essayé avec ce LISP, il traduit effectivement la liste entget d'un solide, mais dans un autre code quasi aussi incompréhensible et, pour moi, autant inexploitabe.

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

Posté(e)

même remarque, c'est pour cela que je n'en avais même pas parlé.

 

Reconnaissons qu'il est difficile d'imaginer des solides complexes décrits de façon suffisamment intelligible pour y ajouter des raccords.

 

Dommage Ingoenius !

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Ecrit rapidement, sans trop de test, j'ai fait simplement un essai sur une boite et cela a fonctionné. Cependant ce n'est pas très élégant et certainement peu fiable en règle générale.

 

(defun espa (chn / )
(while (eq (substr chn 1 1) " ")
(setq chn (substr chn 2))
)
(while (/= (substr chn 1 1) " ")
(if (eq (substr chn 1 1) "")
(setq chn '" ")
(setq chn (substr chn 2))
)
)
)
(defun ACISDecode (Chaine / i AscVal Result)
 (setq Result "" i (strlen Chaine))
 (while (> i 0) ; On scanne la chaine en commencant par son dernier caractère
   (setq 
     AscVal (ascii (substr Chaine i 1)) ; On converti le caractère en code ASCII 
     Result (strcat
       (cond
         ((= AscVal 32) " ") ; Si la valeur est 32, on affiche un espace
         ((= AscVal 86) "I") ; Si la valeur est 86, on affiche un I
         ((chr (boole 6 AscVal 95))) ; Sinon on fait un Xor entre la valeur 
                                     ; et le nombre magique 95, puis on reconverti l'entier
                                     ; obtenu en caractère
       )
       Result
     )
     i (1- i) ; On boucle sur les autres caractères de la chaine
   )
 )
 Result
)
(defun c:fillet_3d ( / LstEnt Elt)  
 (setq LstEnt (entget (car (entsel "\nSélectionnez un corps 3D:"))) lst_pt nil)
 (foreach Elt LstEnt
(cond
	((= (car elt) 1)
		(if (eq (read (acisdecode (cdr elt))) (read (strcase "straight-curve")))
			(progn
				(setq data_sol (acisdecode (cdr elt)) pt nil)
				(while (read data_sol)
					(if (or (eq (type (read data_sol)) 'REAL) (eq (type (read data_sol)) 'INT))
						(if (< (length pt) 3)
							(setq pt (append pt (list (read data_sol))))
						)
					) 
					(setq data_sol (espa data_sol))
				)
				(setq lst_pt (cons pt lst_pt))
			)
		)
	)
)
 )
(cond
	(lst_pt
		(initget 5)
		(setvar "filletrad" (getdist "\nRayon du raccord: "))
		(foreach n lst_pt (command "_.fillet" n "" ""))
	)
)
 (princ)
)

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

Posté(e)

Je ne comprends pas l'astuce du -1 dans les listes de points.

 

Mais chapeau, tu as réussi à trouver des segments !

 

Il faut fixer des conditions de zoom et surtout de vue cavalière pour envoyer avec succès des points 3D.

 

....et sans ACCROBJ

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

je copier le lisp, mais je doit rater quelque chose, il me retourne tout de suist l'erreur

de que je cherche de le lancer

 

 # 
nil 
; erreur: no function definition: CHN
_$ 

 

il y a une procedure particuliere?

 

mais je vois que avec vous meme l'impossible, c'est faisable, si ca avace encore serà genial

Posté(e)

Pour être sur j'ai refais un copier-coller depuis le forum directement en ligne de commande, pas de problème :casstet:

 

Donc refais la manip...

 

Attention le code est grossier, c'était juste pour essayer.

 

Comme dit Tramber désactive l'accroche objet et mets toi bien en vue cavalière pour qu'il n'y ait pas de confusion lors de la sélection des arrêtes.

 

Tramber!

Je ne comprends pas l'astuce du -1

 

Tu parles de ça (= (car elt) 1) :exclam:

Si c'est cela, c'est juste pour s'assurer que les données DXF sont bien du texte et peuvent être soumis à la routine ACISdecode.

 

Voilà pourquoi je penses que la routine est légère car il y a eu une conversion de texte/réel (dans les 2 sens) et on perd forcément en précision dans les décimales et les point retournés sont imprécis dans les petites dimensions. C'est vraiment du bricolage :(

 

Le raccord pourrait être fait en une seule fois en modifiant la fin:

 

(command "_.fillet" (car lst_pt) "")

(foreach n (cdr lst_pt) (command n))

(command "")

 

à la place de:

(foreach n lst_pt (command "_.fillet" n "" ""))

 

et rajouter ceci au début (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384)))

 

[Edité le 27/6/2006 par bonuscad]

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

Posté(e)

Encore une fois, bravo Bonuscad.

 

Dès que j'ai un peu de temps, je me repencherais sur cet obscur code.

 

Merci, tu as ouvert une voie que j'avais ignorée tant par manque d'observation que par flemme ;)

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

Posté(e)
Tu parles de ça (= (car elt) 1) :exclam:

 

Pas du tout (quand même...)

 

LstEnt était composé de points comme si X=1.

Je devais m'y reprendre, mais c'était tout à l'heure.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Ah Ok, je te dirais que la signification des -1, 1 et 0 qui sont donnés me sont complétement obscur.

 

Je pense, sans pouvoir l'affirmer, que sont des bits de control au niveau booléen et qu'ils doivent déterminer les rapports entre les faces et les arrêtes au niveaux du solide (par exemple arrête adjacente bit à 1 pour le sommet x à -1 pour le sommet y et à 0 quand les arrêtes ne se touchent pas).

 

Mais tout ça sont des suppositions, il faudrait décortiquer un solide simple et voir les corrélations.

Bonjour la prise de tête :casstet:

 

En tout cas les coordonnés affecté à "plane-surface" ont l'air d'être les centres de gravité (ou orthocentre?) de chaque faces.

 

:mad:

Ca y est, j'ai compris ta question en essayant la routine sous une 2005 (je l'ai créé sous une 2000) et effectivement le codage DXF n'est pas identique et retourne des -1 dans la liste

 

Il faut modifier

(if (or (eq (type (read data_sol)) 'REAL) (eq (type (read data_sol)) 'INT))

en

(if (and (or (eq (type (read data_sol)) 'REAL) (eq (type (read data_sol)) 'INT)) (not (member (read data_sol) '(1 -1))))

 

 

[Edité le 27/6/2006 par bonuscad]

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

Invité ingoenius
Posté(e)

bon j'ai essaye et maintenant ca fait quelque chose, mais j'ai vu que par exemple sur une boite ne fillete pas tout les aretes, mais bon pas grave, par contre je vu que en 2007 on peut par exemple modifier le rajon d'un raccord sur an solide en selectionnand le raccord CTRL + selection et en modifiant numeriquement ce rayon dans la palette prorprietes (meme plusieurs en meme temps)

or dans la palette proprietes donc on identifie exactement le raccord comme raccord,

mais en lisp cela c'est pas accessible si comme vous dites est codes dans la description acis cripte de celui ci ;-(

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é