DenisHen Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Bonsoir à tous... Avant de faire ce nouveau sujet, j'ai cherché avant dan les forums mais je n'ai pas eu de réponse...Mes mots clefs étaient : LWpolyligneLWpolylignAlignélongsegmentpolyligne....... Rien... Alors, je me suis demandé si je savais encore cliquer ! ! Alors j'ai fouillé l'aide AutoCAD sur le Lisp.... Et j'ai tapé Polyligne... J'ai quasiment tout lu.... Tout ce qui était lisible pour moi...Je suis même tombé sur "Examen détaillé du comportement des réacteurs " Que j'ai trouvé passionant ! ! ! (Surtout que mon sujet devrait s'en servir...) Bon, je m'explique Je cherche à aligner UN texte le long d'un segment de polyligne, exemple, le long d'une Plign (ou LWplign, j'aimerai écrire "Mur porteur". juste en cligant sur un segment... (si je comprend les "réacteurs" le texte restera aligné, même si un des sommet du segment dont il "dépend" est déplacé... Ma question est donc la suivante : Pour avoir le "vecteur" (j'ai pas cherché avec cette clef) d'un segment de polyligne, doit-on utiliser la liste de ses sommets ( avec les XYZ du format DXF (10 x y z)) ? Ou doit-on passer pas d'autre astuces... Je vais fouiller les forum pour plus de renseignement sur les réacteurs... Je croix avoir déjà lu un truc là-dessus de Tramber ou Patric_35... Merci pour vos réponses... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Pour avoir les coordonnées des sommets d'une Lwpolyline, je crois que maintenant tu sais où trouver. Attention toutefois, les coordonnées retournées sont définies dans le SCO, pour les avoir dans le SCG faire : ;; Liste des sommets d'une lwpolyligne (dans le SCG) (defun lwpoly_pts (ent) (mapcar '(lambda (pt) (trans (list (car pt) (cadr pt) (val_dxf 38 ent)) ent 0) ) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent) ) ) ) ) Le vecteur de pt1 à pt2 : (mapcar '- pt2 pt1) Pour le vecteur normé (de 1 unité) et des utilisations possible des vecteurs vois ici Pour les réacteurs, je ne peux pas t'aider, je ne me suis pas encore penché sur la question. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité Patrick Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Bonsoir à tous... Avant de faire ce nouveau sujet, j'ai cherché avant dan les forums mais je n'ai pas eu de réponse...Mes mots clefs étaient : LWpolyligneLWpolylignAlignélongsegmentpolyligne.......Rien... Alors, je me suis demandé si je savais encore cliquer ! ! La recherche sur "LWpolyligne" renvoie plus d'une centaine de résultats.
DenisHen Posté(e) le 16 juin 2006 Auteur Posté(e) le 16 juin 2006 Bon, n'hésite pas sur les commentaire... ;; Liste des sommets d'une lwpolyligne (dans le SCG)---Ok, ça, je sais... (defun lwpoly_pts (ent)---Ca aussi... (mapcar---Ca applique une fonction non pas sur un "symbole" mais sur une liste... '(lambda (pt)---"fonction" temporaire.... (trans (list (car pt) (cadr pt) (val_dxf 38 ent)) ent 0)---trans = Translation---(car pt) premier élément de la liste pt---(cadr pt) tous les éléments de la liste sauf l'entête---(val_dxf 38 ent) Là, je ne vois pas--- ent SCO ---0 SCG Les deux derniers, c'est un peu du pif... je l'avoue... (mapcar'cdr(vl-remove-if-not---enlève si pas déjà fait ? '(lambda (x) (= (car x) 10))(entget ent)donnée ent de l'entité ( :-o Alors ? Sur 20, j'ai combien ? Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 16 juin 2006 Auteur Posté(e) le 16 juin 2006 Patrick, je viens à l'instant de le refaire en copiant/collant "LWpolyligne" Forum : Lisp et Visual Lisp.... J'ai eu ceci :http://www.cadxp.com/modules.php?op=modload&name=XForum&file=search C'est une page sans réponses... Je me plante où ? PS : j'ai FireFox... Mais mes autres recherches sont généralement fructueuses... Pour la clef "réacteur" j'ai eu 3 réponses...(toujours dans Lisp et Visual Lisp) Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Invité Patrick Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Il y a effectivement un problème, c'est que le forum "Lisp et visual LISP" avait été scindé il y a quelques mois en plusieurs sous-forums. Le forum "Lisp et visual LISP" ne contient que deux messages. La liste déroulante de choix du forum à rechercher ne propose que ce forum. J'essaierai de corriger cela dès que possible. En attendant, la centaine de résultats que j'indiquais résultait d'une recherche sur tous les forums, et pour l'instant, il faut procéder en recherchant sur tous les forums.
DenisHen Posté(e) le 16 juin 2006 Auteur Posté(e) le 16 juin 2006 Mille merci Patrick... J'y cours... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Invité Patrick Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Le problème a été corrigé, vous pouvez maintenant sélectionner les sous forums pour y rechercher des mots-clés.
(gile) Posté(e) le 16 juin 2006 Posté(e) le 16 juin 2006 Je ne vais pas te noter ;) Les erreurs : (cadr pt) tous les éléments de la liste sauf l'entête (car lst) -> premier élément (là tu as juste) (cdr lst) -> la liste privée du premier élément (cadr lst) équivaut à (car (cdr lst)) soit le premier élément de la liste privée du premier élément, donc le deuxième élément de la liste. De la même façon (caddr lst) est le troisième élément de la liste. Ceci pour les plus courament utilisé (car pt) -> X, (cadr pt) -> Y, (caddr pt) ->Z Ont peut faire d'autres combinaisons jusquà quatre niveaux d'imbrication, c'est expliqué dans l'aide aux dévellopeurs -> AutoLISP Developer's Guide -> Using the AutoLISP Language -> AutoLISP Basics -> AutoLISP Expressions -> List Handling -> Point Lists.Ces fonctions sont très utiles le LISP (LISt Processing) ets un langage de manipulation de listes. (val_dxf 38 ent) Là, je ne vois pas Normal, l'erreur vient de moi, j'ai copié/collé sans relire val_dxf et un (defun ...) perso, j'aurais dû écrire (cdr (assoc 38 (entget ent))) le code de groupe 38 des lwpolylines est celui de l'élévation de l'objet. Des précisions : (mapcar---Ca applique une fonction non pas sur un "symbole" mais sur une liste... mapcar, je te l'ai déjà expliqué, mais il faut bien retenir que mapcar retourne une liste. dans cett petite routine la listée retournée par (mapcar 'cdr ...) est l'argument pour (mapcar '(lambda ... ) ...) (trans (list (car pt) (cadr pt) (val_dxf 38 ent)) ent 0)---trans = Translation Translation va bien, pour son sens en français et sa traduction (justement) de l'anglais. la point pt (auquel on a précisé l'élévation) est translaté/traduit du SCO au SCG. (vl-remove-if-not---enlève si pas déjà fait ? Retourne la liste sans les éléments qui ne retournent pas T à la fonction, dans ce cas le (lambda ...) avec vl-remove-if-not, vl-remove-if, vl-every, vl-some la fonction (predicate function) doit être une fonction qui retourne T ou nil. Donc dans ce cas, enlève de la liste entget tous les élément (liste ou paires pointées) dont le premier élément n'est pas 10. La lista retournée par (vl-remove-if-not ...) est l'argument pour (mapcar 'cdr ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 17 juin 2006 Auteur Posté(e) le 17 juin 2006 Merci Gile.... J'ai copier ta routine "dxf_lst" depuis un autre forum et l'utilise pour étudier les Code DXF des entités... Et en gros... Les code DXF résument... Enfin contiennent toutes les propriétés d'une entité, c'est ça ? Si on veut changer l'entité de calque (Code 8) ou si on veut ajouter une constante à un texte (code 1).... On peut passer par çà pour intéroger ses attribues ? Par contre, dxf_lst sur une LWpolyligne de 39 sommets m'a donné : Choix de l'objet: (-1 . ) (0 . "POLYLINE") (330 . ) (5 . "1870") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "FB1 Routes(Bordure)") (100 . "AcDb2dPolyline") (66 . 1) (10 0.0 0.0 0.0) (70 . 130) (40 . 0.0) (41 . 0.0) (210 0.0 0.0 1.0) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0) Commande: C'est parce qu'elle est lissée ? Merci... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
bonuscad Posté(e) le 17 juin 2006 Posté(e) le 17 juin 2006 En rapport avec le titre du sujet, il y avait eu cette discussion , cela pourra peut être te donner des idées! Par contre, dxf_lst sur une LWpolyligne de 39 sommets m'a donné : (0 . "POLYLINE") Ce n'est pas une LWpolyligne, ici tu as obtenu que la définition d'entête d'une polyligne ancienne ou 3D. Pour avoir les sommets, il te faut parcourir les entités suivantes (0 . "VERTEX") avec (entnext) jusqu'à l'entité (0 . "SEQEND"). Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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