Invité ingoenius Posté(e) le 26 juin 2006 Posté(e) le 26 juin 2006 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 ,
Tramber Posté(e) le 26 juin 2006 Posté(e) le 26 juin 2006 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) le 27 juin 2006 Posté(e) le 27 juin 2006 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 ;-)
(gile) Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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
Tramber Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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 ./__\. (.°=°.)
bonuscad Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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
(gile) Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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
Tramber Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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 ./__\. (.°=°.)
bonuscad Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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
Tramber Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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) le 27 juin 2006 Posté(e) le 27 juin 2006 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
bonuscad Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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
(gile) Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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
Tramber Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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 ./__\. (.°=°.)
bonuscad Posté(e) le 27 juin 2006 Posté(e) le 27 juin 2006 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) le 28 juin 2006 Posté(e) le 28 juin 2006 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 ;-(
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant