bseb67
Membres-
Compteur de contenus
833 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bseb67
-
Ouf, ca va pour l'alsace enfin pour l'instant :) Mais c'est vrai que l'an dernier lorsque j'ai acheté mon appart, j'ai pris les dernier étage (3ème) donc j'ai de la marge, mais j'ai hésité à acheter une péniche :D , il y a de la surface, mais beaucoup de travaux et je l'a mets où en attendant le déluge ? :cool:
-
Salut rimbo, Vista 32bits ou 64Bits? Si 32bits, ce message apparait lorsque tu atteint les 2Go de ram possible pour un processus, sur les versions d'avant et sous XP tu avais juste le petit message ce programme a engendrer une erreur envoyer un rapport. Au lancement autocad bouffe environ 300 à 400 Mo de ram, mais le truc super bizarre, c'est que lorsque les dessinateurs lancent des impressions, autocad prend de la ram, mais ne la libère pas à la fin. Ce qui fait qu'en fin de journée, s'ils non pas plantés autocad, il arrive qu'autocad utilise 1.6 à 1.8Go, le maximum que j'ai atteint est de 1.85Go avant plantage. Si 64bits, normalement tu devrai avoir accès à 128Go, mais je ne pense pas que vista te le permet. ;) Utilise le gestionnaire de tâches (enfin son équivalent sous vista) et surveille l'utilisation en ram d'autocad. [Edité le 27/6/2008 par bseb67]
-
Salut kermitos! Tout d'abord, l'objet rectangle n'existe pas sous autocad, c'est en fait une polyligne fermée avec 4 sommets. Est-ce que le rectangle que tu veux dessiner sera parallèle au scu (axe X et Y)? - Si oui, tu peux utiliser simplement la commande _rectang: (command "_rectang" (setq p1 (getpoint "\nCoin1: ")) (getpoint p1 "\nCoin2: ")) getpoint demande la saisie d'un point, et (getpoint p1 "message") affiche une ligne allant de p1 au curseur de ta souris, donc la diagonale du rectangle. - Sinon, solution 1: utiliser la commande _rectang et faire une rotation solution 2: demander au moins 3 points (le 4ème tu peux le calculer) et créer une polyligne passant par ces 4 points.
-
Salut bred, Ces paramètres externes je sais qu'ils peuvent faire varier le temps, mais j'ai fais les essais en coupant le maximum de processus et en déconnectant mon pc du réseau, donc rien que du local, et bien sur je ne touche pas à la souris ni au clavier. Je n'ai pas gardé les valeurs, mais j'ai même testé sur des répétitions de 10 à 15 au lieu de 3 comme je le décri avant, et c'est toujours les mêmes conclusions. Donc, on clair, + tu lisp, - ca lisp ;) haha! Bon, disons que normalement, en utilisation classique, le dessinateur ne fera pas des lancements successifs, mais comme mon rôle est d'automatiser des manipulations, mes patrons souhaitent que se soit rapide. C'est pour cela que je fais toujours des mesures de temps, afin de voir si c'est utile ou non et je mesure souvent les sous-fonctions pour trouver laquelle me fait perdre le plus de temps et donc chercher à l'améliorer. Normalement "je ne devrai pas donner ca", mais voici le code (bien-sur ce n'est que quelques lignes sur les 15.000 que font tous les lisp réunis) (defun total1() (setq fonc_name "total1: ") (cond ; on lance la suppression des Tés sur le groupe ((= (delete_tes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des Tés sur le réseau") -1) ) ; on lance la suppression des réductions sur le groupe ((= (delete_rcc_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des Tés sur le réseau") -1) ) ; on lance la suppression des coudes sur le groupe ((= (delete_coudes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des coudes sur le réseau") -1) ) ; on lance la suppression des tuyaux sur le groupe ((= (delete_tuyaux_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR d'effacement des tuyaux sur le réseau") -1) ) ((= (setq VAR_AT_LISTE_POINTS_RESEAU (get_pointsCAD_du_groupe VAR_AT_GROUPE_ENCOURS)) nil) ) ((= (place_tes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des Tés") nil) ) ((= (place_rcc_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des rcc") nil) ) ((= (place_coudes_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des coudes") nil) ) ((= (ramene_reduction_du_reseau) nil) ) ((= (place_tuyaux_sur_reseau VAR_AT_GROUPE_ENCOURS) nil) (write_error_log (strcat fonc_name "ERREUR de placement des tuyaux") nil) ) (t (zoom_groupe VAR_AT_GROUPE_ENCOURS) (setq res t) ) ) ) voila.
-
Salut! Le titre est un peu bizarre, car je suis tombé sur un super mystère. J'ai une fonction qui s'appelle total, lorsque je la lance une première fois sur mon dessin elle met environ 24s. Si je la lance une deuxième fois elle met 25s, une troisième fois elle passe à 26-27s. une quatrième fois elle passe à 30s. Je vois que tout de suite certains vont se dire, c'est normal, car le dessin change, et bien non, ma fonction supprime des blocs sur mon dessin et ré-insère les blocs, c'est juste pour une mise à jour. Et comme mes blocs ne changent pas le temps devrai être pratiquement le même. J'ai fait un petit test en utilisant le lisp de benchmark (désolé, mais je ne connais plus lien) et j'ai copier ma fonction pour avoir total1 total2 et total3 Premier test: (benchmark '((total1)(total2)(total3))) Elapsed milliseconds / relative speed for 1 iteration(s):rking ... (TOTAL1).....23203 / 1.62 (TOTAL2).....30157 / 1.25 (TOTAL3).....37546 / 1.00 zoom sur le dessin, et je relance (benchmark '((total1)(total2)(total3))) Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....24828 / 1.54 (TOTAL2).....31719 / 1.21 (TOTAL3).....38234 / 1.00 je relance simplement (benchmark '((total1)(total2)(total3))) Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....28328 / 1.46 (TOTAL2).....35516 / 1.17 (TOTAL3).....41484 / 1.00 Dans les trois benchmark, total1 < total2 < total3, mais alors pourquoi le total1 du deuxième bench est-il plus rapide quand même que le total3 du premier bench? Trouvant ca super bizarre, j'ai donc mis dans un lisp ceci: (benchmark '((total1)(total2)(total3))) (benchmark '((total1)(total2)(total3))) (benchmark '((total1)(total2)(total3))) Je charge le lisp qui lance donc les trois benchmark à la suite, et là surprise :o : Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....35657 / 1.40 (TOTAL2).....41906 / 1.19 (TOTAL3).....49782 / 1.00 Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....56296 / 1.13 (TOTAL2).....61922 / 1.03 (TOTAL3).....63563 / 1.00 Elapsed milliseconds / relative speed for 1 iteration(s): (TOTAL1).....65375 / 1.01 (TOTAL2).....65468 / 1.01 (TOTAL3).....66109 / 1.00 Dans tous les cas total1 < total2 < total3 mais total1 du 2ème> total3 du 1er bench. Si quelqu'un sait pourquoi je suis preneur. a+ [Edité le 25/6/2008 par bseb67]
-
Salut open-mind, Pour trouver si un objet est dans un cadre, j'utilise la technique du nombre d'intersections. Tu prend un point Pref dont tu es sur qu'il est hors du cadre, tu fais le segment Pref et le point à tester (code dxf 10 de l'entité), puis test le nombre d'intersections entre ce segment et les segments formant le cadre, si le nombre est impair, c'est que t'es dans le cadre, si c'est pair (en fait tu entres puis ressort du cadre k fois) t'es dehors. Il y a juste des cas particuliers si ton segment est aligné à un des cotés du cadre ou passe par un des points formant le cadre. Mais attention, le zoom étendu ne marche pas si tu as des entités non visibles (utiliser vl) et sur les droites (car infinies)
-
AUTOCAD ouvre le même fichier 2 fois sans mettre l\'un d\'eux en lecture seul
bseb67 a répondu à un(e) sujet de zagab dans AutoCAD 2009
Salut zagab, Là c'est vrai que c'est bizarre. Normalement autocad créer un fichier (pour 2008 et 2009 en fait 2) dwl du même nom que le dessin et qui contient l'utilisateur, le pc et la date d'ouverture. As-tu ces fichiers lorsque tu ouvres un plan? Bon ben vu la réponse de maximilien se doit être ca le bug [Edité le 16/6/2008 par bseb67] -
Salut x_all! Moi je suis un fidèle de Ti. Mon dernier achat (date déjà) c'était en 1997 une Ti-86 à 999Frcs à l'époque, mais parents n'étaient pas très chaud, mais je m'en suis servi jusqu'en 2006 (lycée, BTS, fac de math-informatique), Maintenant c'est ma femme qui l'a pour faire les moyennes des gamins (elle est prof). En tant qu'ex bachelier scientifique, je te dirai de prendre une Ti 83+ devrai suffire (+100€). Les casios étaient réservé aux bacheliers économie, et j'ai jamais aimé en utilisé une. Pour les Hp je ne connaissais que 2 copains qui en avaient, donc j'ai pas trop d'expérience la dessus. Ma Ti86 tient 300H en jouant avec, avec des piles rechargeables (donc perte de voltage, car au-lieu de 4*1.5V je n'ai que 4*1.2V soit une pile de moins). Avec mes premières piles (non rechargeables) elle a tenu 520H :jeux (mario, tetris solo et deux joueurs sur deux calto) et calcul. Investi un peu dans un chargeur, des piles rechargeables (8 pour avoir un jeu de rechange) Pour info, je n'ai jamais changer ma pile o lithium de sauvegarde qui est dedans.
-
Salut maximilien! Chez nous on récupère comme fond de plan architecte sur les projets sur lesquels on travaille des fichiers fait par archicad. Et pour être franc, c'est de la vrai m..... :mad: , car on se retrouve avec des blocs non présents dans le dessin (malgré purge, explosion de toutes les entités, effacement de toutes les entités dans le dessin et repurge), ces blocs sont encore là. La seule chose pour ne plus les avoir c'est un wbloc du dessin. Si on pouvait développer tout une suite de fonctions pour nettoyer ces plans, je suis partant pour y participer. a+
-
SAlut Vinz34! J'ai suivi ton lien donné à marcotic, mais la fonction vla-get-filedependencies comporte des défauts: - Si tu ajoutes une xref, mais que tu ne sauvegardes pas ton dessin de suite, l'xref n'apparait pas dans ton message. - Si tu as des Xref déchargées à l'ouverture du dessin, elles ne sont pas pris en compte. Si tu les décharges et ne sauvegarde pas elles apparaitrons dans ton message. Vraiment dommage! :( J'utilisais aussi cette fonction au début (l'été dernier), mais je suis tombé sur des plans ou mes lisps ne faisaient pas ce qu'ils devaient et c'est là que j'ai découvert ce gros problème. C'est pourquoi j'utilise ceci maintenant: ;----------------------------------; ; nom: get_liste_xref ; ; role: renvoie sur forme de liste ; ; les noms des xrefs. Chaque ; ; xref sera un couple de ce ; ; genre: (nom de bloc . ; ; chemin_complet+nom_fichier); ; param: aucun ; ; retour: une liste de paires ; ; pointées ; ; nil => sinon ; ; date: 10/04/2008 ; ; Sébastien BLAES ; ;----------------------------------; (defun get_liste_xref( / res) (setq res '() bl_tmp (tblnext "BLOCK" t)) ; on boucle sur la liste des blocs (while bl_tmp ; un bloc est une référence externes si son 3ème bit vaut 1 ; donc un ET logique avec 4 doit renvoyer 4 (cond ; on test le 3ème bit ((= (boole 1 4 (cdr (assoc 70 bl_tmp))) 4) ; c'est bien une xref (setq res (append res (list (cons (cdr (assoc 2 bl_tmp)) (cdr (assoc 1 bl_tmp)))))) ) ) ; cond ; on passe au bloc suivant (setq bl_tmp (tblnext "BLOCK" nil)) ) ; while res ) ; get_liste_xref
-
Bien-sur, J'ai une 2007, 2008MEP et 2009 installées sur mon poste et ca marche bien, enfin ca marche moyen, mais c'est à cause de notre super norton. Autocad s'installe dans des répertoires différents pour chaque version (année et type) donc y pas de risque, le seul hic c'est que ca prend de la place. Si tu utilise des cui, de préférence utilise des copies avec des noms finissant par la version d'autocad, moi j'ai fait ainsi (utils2007.cui, utils2008MEP.cui et utils2009.cui ....) , comme ca pas de souci si sous une version je met en forme différemment, je ne change pas la forme dans les autres versions. a+
-
Re, ok, mais après avoir regardé le nom des paramètres et les variables autocad, et bien ceux sont les mêmes :cool: , => donc tu peux faire un restaurer, puis des setvar et enfin sauvegarder Il n' y aura que 2 "command" alors. Je ne sais pas si c'est faisable en lisp ou vlisp, la seule chose que j'ai pu constater, c'est que certaines choses ne sont pas du tout faisable en lisp. Mais seulement avec ta petite souris et l'interface autocad a+.
-
Salut zebulon_! Je ne suis pas trop sur, mais si tu rends le style que tu veux modifier courant: (command "-COTSTYLE" "restaurer" nom_cot) puis tu fais (command "dimscale" ech) .... ca a l'air de fonctionner Tu modifies les paramètres du style de cote courant. Exemple: Commande: -COTSTYLE Style de cote courant: ISO-25 Annotatif: Non Remplacement de la cote courante: DIMSCALE 5.0000 Entrez une option de style de cote [ANnotatif/Sauvegrd/Restaurer/Etat/Variables/Appliquer/?] : variables Entrez le nom d'un style de cote, [?] ou : "ISO-25" DIMADEC 0 Emplacements des décimales dans les angles DIMALT Inactif Unités alternatives sélectionnées DIMALTD 3 Nombre de décimales de l'unité alternative DIMALTF 0.0394 Facteur d'échelle de l'unité alternative DIMALTRND 0.0000 Valeur d'arrondissement des unités d'alternance DIMALTTD 3 Changer la précision décimale des tolérances DIMALTTZ 0 Tolérance alternative de suppression du zéro DIMALTU 2 Changer les unités DIMALTZ 0 Unité alternative de suppression du zéro DIMAPOST Préfixe et suffixe pour le texte alternatif DIMARCSYM 0 Symbole de longueur d'arc DIMASZ 2.5000 Dimension de la flèche DIMATFIT 3 Ajustement texte et flèches DIMAUNIT 0 Format des unités angulaires DIMAZIN 0 Suppression du zéro angulaire DIMBLK FerméePleine Cartouche de la flèche DIMBLK1 FerméePleine Cartouche de la première flèche DIMBLK2 FerméePleine Cartouche de la deuxième flèche DIMCEN 2.5000 Dimension de la marque centrale DIMCLRD DUBLOC Couleur de la ligne de cote et de la ligne de repère DIMCLRE DUBLOC Couleur de la ligne d'attache DIMCLRT DUBLOC Couleur du texte de cote DIMDEC 2 Changer la précision décimale des tolérances DIMDLE 0.0000 Prolongement de la ligne de cote DIMDLI 3.7500 Espacement de la ligne de cote DIMDSEP , Séparateur des décimales DIMEXE 1.2500 Prolongement au-dessus de la ligne de cote DIMEXO 0.6250 Décalage de l'origine de la ligne d'attache DIMFRAC 0 Format de fraction DIMFXL 1.0000 Ligne d'attache fixe DIMFXLON Inactif Activer la ligne d'attache fixe DIMGAP 0.6250 Espace entre la ligne de cote et le texte DIMJOGANG 90 Angle de raccourcissement de cote de rayon DIMJUST 0 Justification du texte sur les lignes de cote DIMLDRBLK FerméePleine Nom de bloc des lignes de repère DIMLFAC 1.0000 Facteur d'échelle linéaire DIMLIM Inactif Générer les limites de cote DIMLTEX1 BYBLOCK Ligne d'attache de type 1 DIMLTEX2 BYBLOCK Ligne d'attache de type 2 DIMLTYPE BYBLOCK Type de ligne de cote DIMLUNIT 2 Format d'unité linéaire DIMLWD -2 Epaisseur de ligne repère et épaisseur de ligne de cote DIMLWE -2 Epaisseur de ligne de prolongement DIMPOST Préfixe et suffixe pour le texte de cote DIMRND 0.0000 Valeur arrondie DIMSAH Inactif Séparer les blocs de flèches DIMSCALE 1.0000 Facteur d'échelle général DIMSD1 Inactif Supprimer la 1ère ligne de cote DIMSD2 Inactif Supprimer la 2ème ligne de cote DIMSE1 Inactif Supprimer la première ligne d'attache DIMSE2 Inactif Supprimer la deuxième ligne d'attache DIMSOXD Inactif Supprimer les lignes de cote extérieures DIMTAD 1 Placer le texte au-dessus de la ligne de cote DIMTDEC 2 Précision décimale des tolérances DIMTFAC 1.0000 Tolérance du facteur d'échelle de hauteur de texte DIMTFILL 0 Arrière-plan texte activé DIMTFILLCLR DUBLOC Couleur de l'arrière-plan texte DIMTIH Inactif Le texte à l'intérieur des attaches est horizontal. DIMTIX Inactif Placer le texte à l'intérieur des attaches DIMTM 0.0000 Tolérance négative DIMTMOVE 0 Mouvement du texte DIMTOFL Actif Forcer la ligne à l'intérieur des lignes d'attaches DIMTOH Inactif Texte à l'extérieur horizontal DIMTOL Inactif Cotation de tolérance DIMTOLJ 0 Justification verticale des tolérances DIMTP 0.0000 Tolérance positive DIMTSZ 0.0000 Dimension de la marque DIMTVP 0.0000 Position verticale du texte DIMTXSTY Standard Style de texte DIMTXT 2.5000 Hauteur du texte DIMTZIN 8 Suppression zéro de la tolérance DIMUPT Inactif Texte positionné par l'utilisateur DIMZIN 8 Suppression zéro
-
Stocker un ENAME dans un atribut
bseb67 a répondu à un(e) sujet de pingoo666 dans Pour aller plus loin en LISP
Salut! L'oid ou le handel ne changent que dans un seul cas (pour l'instant que je connaisse): - wbloc sur le dessin. Pour une application, je stocke en xdata le handel, mais maintenant il faut que je cherche à traiter le cas si on lance un wbloc sur le dessin. Car autocad recréer chaque entité, donc détruit les groupes, les filtres de calques, les cochonneries qui trainent (mais pas toutes) et donc les handent sont modifiés. Comme l'a dit Gile, le handent est plus pratique, car c'est une chaine de caractères ce qui définit justement un attribut. -
Salut! Directement je ne pense pas, j'ai essayé en testant avec entlast, mais cela ne marche pas non plus, car les entités sont modifiées, mais pas recrées. A part faire le find toi même.
-
Si je cherche à faire un lisp, de toute façon je pense qu'il me servira aussi un jour Dès que je dois faire des manip régulières, je cherche à faire un lisp pour automatiser la chose ce principe d'automatiser je l'ai depuis une dizaine d'années, sous excel avec les macros, puis en langage c et maintenant en lisp sous autocad. Entre midi et deux je n'ai pas trop le temps, je ferai ca ce week-end chez moi, mais je dois réinstaller autocad avant, car j'ai du remettre à plat mon pc en formatant et en réinstallant xp la semaine dernière.
-
Alors la, je ne sais pas, a part peu être faire un lisp qui demande la sélection d'objets et te le mets tous visibles dans chaque état existant. mais là je n'ai pas encore traité ce sujet. Si t'a autocad en version complète, je veux bien chercher comment faire.
-
Salut! => c'est tout à fait ca !!! :) Dire qu'il fallait juste que je lise l'aide de getpoint :cool: En tout cas merci. (gile)=> je ne connaissais pas grvecs, mais pour ce qui est de la création et gestion de la ligne c'est bon, j'avais déjà tout fait. En plus tu m'avais filé une info (variable pickstyle). Si je voulais mettre la ligne élastique ce n'est que pour faciliter la saisie des points pour les lignes.
-
Salut! Je cherches à simuler la commande ligne, enfin surtout la ligne qui apparait lorsque l'on donnée le point de départ qui va du point de départ au curseur de la souris. J'ai fait une fonction récursive qui demande un point avec getpoint pour donner le point final de la ligne, je trace la ligne et relance la fonction avec comme point de départ le point final donné avant. en simplifiant cela ressemble à cela (defun dessine( p_start / p_end) (setq p_end (getpoint)) (command "_line" p_start p_end "") (dessine p_end) ) (defun c:d( / pt ) (dessine (get_point)) ) merci.
-
Salut Bred! Alors là, je ne peux pas vraiment te répondre, car je ne dessine pas vraiment beaucoup. Mais il y a quelqu'un qui fait pas mal de 3D sur une version MEP 2008, de plus je lui ai installé autocad classique en full version 2009 pour qu'il l'essaye en dessin classique et en 3D. Donc je lui demanderai de faire des tests. par contre, utilises-tu autofluid? Car sous la 2009, autofluid ne fonctionne pas correctement. On arrive à dessiner de la gaine et encore pas toujours. Mais les autre lots ne fonctionnent pas. De plus j'ai mis à jour notre version en passant de la 4.14 à 4.15 (dernier patch disponible sur le site de texacad). mais cela n'a rien changé :(. Au fait, merci pour ta réponse sur le VB ;)
-
Salut barbichette, Lors de la création de mon premier bloc avec des états de visibilité (il y a 5 mois à peine), j'ai eu un peu de mal à comprendre. MAis si tu veux qu'un élément soit visible quel que soit l'état il faut le rendre visible pour tous les états. Le plus simple c'est de cliquer sur "mode de visibilité" afin d'avoir tous les éléments des différents états, puis tu cliques sur afficher. Tu changes d'état de visibilité, tu re-sélectionne ton élément et tu refait afficher. Et ainsi de suite sur chaque état.
-
Salut nazemrap, Merci d'avoir répondu. Euh, oui pour la 2 c'est bien les boite de dialogue. Dcl => réflex de lispeur. Si je demande des infos c'est pour avoir une idée si passer en VB serai intéressant pour certains programmes. MAis je n'ai pas envie de me lancer dans le VB s'il n'y a pas d'attrait par rapport au lisp. A la base, je suis développeur en C et C++, mais le lisp me plait un peu mieux maintenant que le C. Le seule gros défaut c'est la limitation à un processus, maintenant que l'on utilise des multicoeurs le lisp devient limiter dans le temps en terme de traitement de données. J'attends que d'autre VBeur (je ne sais pas comment on vous appelle) me donnent des infos.
-
Salut, Etant lispeur, je souhaiterai avoir quelques infos sur certains points sur le VB sous autocad. Et de ce fait je m'adresse à vous le pros du VB. 1) Si je déclare des variables en lisp exemple : (setq TEST 325), peut-on récupérer la variable TEST en VB? 2) Pour les dcl, je trouve que l'on assez limité du coté graphisme, qu'en est-il du coté du VB? si vous avez des exemples en captures d'écran je suis preneur. 3) Autre point faible du lisp: on ne peut utiliser les coeurs multiples. En est-il de même en VB? car je souhaiterai gagner un peu de temps en traitement et pouvoir utiliser les ressources machines. En vous remerciant d'avance, bonne journée encore.
-
De rien, comme dit plus haut, ce n'est pas le fruit de mon travail, mais de recherche sur le net et différents programmes de p2p lorsque j'ai commencé le lisp. Par contre, t'as beaucoup de compte sur cadxp? => oliverts et olivertsss => en mettant des s ca peut aller loin. :cool: a+
-
Salut olivertsss, Je crois que j'ai ce que tu cherches, le lisp n'est pas de moi ;------------------------------------------------------------------------------ ; ; PROGRAMME AUTOLisp : DELAUNAY.LSP ; ; ; OBJET : Maillage 3dFACE suivant la méthode de DELAUNAY ; ; Vincent LUX ; ; DATE : 06/06/03 ; VERSION : 10/06/03 ; ;------------------------------------------------------------------------------ (defun 3to2 (PT3D) (list (car PT3D) (cadr PT3D)) ) (defun do_delaunay () (setq P1 (cdr (assoc 10 (entget (ssname ss (- I 1)))))) (setq P2 (cdr (assoc 10 (entget (ssname ss (- J 1)))))) (setq P3 (cdr (assoc 10 (entget (ssname ss (- K 1)))))) (setq X1 (car P1)) (setq Y1 (cadr P1)) (setq X2 (car P2)) (setq Y2 (cadr P2)) (setq X3 (car P3)) (setq Y3 (cadr P3)) ;; détermination du centre du cercle passant par P1 P2 et P3 et son rayon (setq PE (list (/ (+ X1 X3) 2) (/ (+ Y1 Y3) 2))) (setq PF (list (/ (+ X2 X3) 2) (/ (+ Y2 Y3) 2))) (setq PG (polar PE (+ (angle P1 P3) (/ PI 2)) 1.00)) (setq PH (polar PF (+ (angle P2 P3) (/ PI 2)) 1.00)) (setq PC (inters PE PG PF PH nil)) (if PC (progn (setq X0 (car PC)) (setq Y0 (cadr PC)) (setq R (distance PC (3to2 P1))) (setq L 1) (setq FLAG 1) (while (and (<= L SSL) FLAG) ; je regarde s'il y a un point sélectionné à l'intérieur du cercle (if (and (/= L I) (/= L J) (/= L K)) ; je ne prends pas les points P1 P2 et P3 (progn (setq PX (3to2 (cdr (assoc 10 (entget (ssname ss (- L 1))))))) (if (< (distance PC PX) R) ; si la distance PC PX < R alors PX est dans le cercle et P1 P2 P3 n'est pas un triangle Delaunay (setq FLAG nil) ) ) ) (setq L (+ L 1)) ) (if FLAG (command "_3dface" P1 P2 P3 "" "") ; c'est un triangle de Delaunay ) ) (prompt "\n3 points alignés") ) ) (defun c:delaunay () (command "_undo" "_m") (setq OLD_CMD (getvar "cmdecho")) (setvar "cmdecho" 0) (setq OS (getvar "osmode")) (setvar "osmode" 0) (print "Sélectionner un semis de points") (setq ss (ssget '((0 . "POINT")) )) (setq SSL (sslength SS)) (if (>= SSL 3) (progn (setq I 1) (While (<= I (- SSL 2)) (setq J (+ I 1)) (while (<= J (- SSL 1)) (setq K (+ J 1)) (while (<= K SSL) (do_delaunay) (setq K (+ K 1)) ) (setq J (+ J 1)) ) (setq I (+ I 1)) ) ) (alert "Il faut au moins 3 points") ) ; fin si (setvar "cmdecho" OLD_CMD) (setvar "osmode" OS) (princ) )
