Aller au contenu

Luna

Membres
  • Compteur de contenus

    1 113
  • Inscription

  • Dernière visite

  • Jours gagnés

    42

Tout ce qui a été posté par Luna

  1. @Olivier Eckmann je vois que sa logique est similaire à la mienne xD Après chacun(e) l'exprime à sa manière :3 En revanche, quel est le langage de programmation ? Et comment puis-je le tester ? En tous cas, cela semble parfaitement adapté à ma recherche donc je vais creuser un peu plus. @Fraid le soucis c'est que je n'ai pas de liste de points, pour cela, je dois la générer ! Créer une polyligne à partir d'une liste de points et simple mais générer cette liste est complexe :3 @(gile) oki je vais essayer de creuser un peu plus mais j'avoue que le C# et le F# je ne connais pas du tout donc je vais essayer de farfouiller un peu sur TheSwamp pour voir si je le trouve. Il semblerait que @Olivier Eckmann et toi parliez à peu près de la même chose (si je ne dis pas de bêtises). Bisous, Luna
  2. Coucou, Merci pour ta rapidité ! Bon du coup il va falloir que je finisse par regarder ces objets "régions", car j'en entends souvent parlé, mais je n'ai jamais eut à les utiliser jusque-là :S Je vais me renseigner sur le sujet en tout cas, merci bien ! Bisous, Luna
  3. Coucou, Pour commencer, je ne recherche aucunement des programmes tout fait, tout propre chat ne m'intéresse pas :3 Mon but est simplement de trouver une logique permettant de répondre à un problème afin que je puisse par la suite transposer en programme. Donc pour faire relativement simple, il existe bon nombre de programmes (LeeMac, TheSwamp, etc) permettant de générer un contour sur un jeu de sélection d'objets linéaires sécants (des images valent mieux que des mots donc voici une démonstration du programme de LeeMac). Les conditions à respecter pour que ce programme fonctionne c'est : - Les objets sont compatibles avec la commande "_BOUNDARY" (ou "CONTOUR") - Les objets se croisent donc sont coplanaires et possèdent des points d'intersections entre-eux J'avais déjà discuté de ce programme avec @didier mais je n'ai jamais vraiment eu le temps de me pencher plus en avant sur le sujet (le soucis, c'est que l'idée est toujours dans ma tête, d'où mon problème ^^). Le but étant d'avoir un principe similaire à une exception près parmi les conditions ci-dessus : les objets ne possèdent pas de points d'intersections entre-eux... Pour le contexte, je travaille dans un BE d'implantation de centrales photovoltaïques et donc on travaille constamment avec des modules et des structures qui sont espacés les uns des autres (les écarts ne sont pas fixes donc on ne peut pas fixer une valeur pour les recherches), cependant ces éléments sont très souvent regroupés via des zonages divers et variés (emprise PV, répartitions des puissances, types de modules, architecture élec', etc). Donc structurellement parlant, ces éléments sont distincts les uns des autres (pas de superposition ou autre) mais ils sont tous liés selon une propriété précise générant des zonages plus ou moins complexes. Le soucis, c'est que les itérations au sein d'un même projet sont nombreuses, donc ces zonages sont souvent modifiés et cela prend donc du temps. Mon idée est donc de pouvoir générer un contour à partir d'un jeu de sélection qui soit suffisamment précis pour englober l'ensembles des objets sélectionnés sans englober d'autres objets non concernés... Le programme devrait pouvoir fonctionner avec des objets linéaires (pour commencer disons simplement lignes et polylignes) puis s'étendre avec des blocs (mais si c'est possible de le faire avec des objets linéaires, cela ne posera pas de soucis de faire la même chose avec des blocs puisqu'il suffira de générer un contour précis au sein d'une définition de bloc pour ensuite utiliser ce contour dans la génération du contour en EO). Pour donner un exemple, je joins un fichier .dwg afin d'illustrer la chose. Dans ma logique, j'avais pensé à une analyse longue et fastidieuse qui s'apparente à la technique du drap. Le but étant de générer un contour global du jeu de sélection (par exemple (LM:ssboundingbox) qui permet de s'assurer que l'ensemble des objets sont présent dans ce rectangle). On définit un point M tel que M appartient à la polyline ABCD (fermée) et aux droites Dh et Dv, avec ABCD le contour du jeu de sélection, Dh la droite horizontale passant par M et Dv la droite verticale passant par M (selon la position du point M sur ABCD). Les droites Dh et Dv vont générer des points d'intersection avec les objets présents dans la surface ABCD, que l'on nommera M' tels que M' soit la projection horizontale ou verticale du point M sur les objets composants le jeu de sélection initial. On obtient donc une liste de points d'intersection pour chaque point M dont on peut récupérer facilement la borne inférieure et la borne supérieure donc on a pour tout points M, une liste de 2 points correspondant à la borne inférieure et supérieure (ou 1 point si la borne inférieure et supérieure sont confondue). En affectant un pas pour générer une liste de point M, on obtient tout un ensemble de couples de points correspondant à l'emprise réelle des objets (sous forme de dessin la forme est proche du zonage attendu, mais sous forme de liste, les points ne sont pas ordonnés correctement, à moins de ne choisir uniquement le point d'intersection le plus proche du point M (car (vl-sort M'-list '(lambda (e1 e2) (< (distance M e1) (distance M e2))))) mais auquel cas il faudra parcourir 100% du périmètre de la boundingbox, et non 50%). Si on affecte un lien entre le point et l'objet issu de cette intersection, il suffira ensuite de récupérer pour chaque projection le sommet réel des objets "coupés" le plus proche de la projection pour limiter le nombre d'objets (et limiter également un contour trop serré) et également éliminer les sommets situés à une distance beaucoup trop importante par rapport à ses voisins (cf. fichier .dwg). Je me rends compte que j'ai de vrais problèmes de concision dans mes explications moi...Donc pour ceux qui ont compris, j'aimerais savoir comment peut-on aborder un problème comme celui-ci sans avoir besoin de calculer les points d'intersection projetés de 2 milliard de points pour simplement générer un contour précis à un jeu de sélection...Car même si sur le papier, la technique du drap fonctionne, cela demande beaucoup de ressources et de temps, ce qui n'est pas le but non plus ! >n< Donc je me dis qu'il existe probablement un théorème mathématique ou une logique permettant de gagner du temps sur les calculs, mais pour un sujet comme celui-ci, ma logique propre ne me permet pas de réfléchir autrement qu'en analytique... Bref, merci pour les âmes charitables qui prendront non seulement le temps de me lire, mais également de me répondre ! (voyez chat comme...un challenge, sauf que je n'ai pas de solution toute faite :3) Bisous, Luna SSBoundingLine.dwg
  4. Coucou, Ce sujet est très intéressant (et tombe à pic car je commençais justement à étudier d'un peu plus près les opérations bit à bit et l'écriture binaire. Notamment avec cette gestion du code DXF 420 concernant les couleurs RGB. Je trouve très intéressant l'explication de la variable OSMODE sur l'utilisation des fonctions (logior) et (logand) pour ne pas se soucier de la présence d'un accrochage ou non. Lorsque j'avais étudier la question, j'avais optée pour la solution de décomposer la valeur décimale avec les valeurs 2^n mais en passant par l'écriture binaire, cela fait sens donc merci ! En parlant de code DXF j'avais une question (gile), j'ai remarqué que la transparence elle aussi faisait appel à une valeur décimale directement issue d'une opération bit à bit, et il me semble que tu as brièvement expliqué dans un post que cette valeur décimale correspondait à une valeur comprise entre les bits 24 et 31. J'aimerais comprendre un peu mieux pour quelles raison AutoCAD a besoin de fonctionner avec ces valeurs de bits précises au lieu d'utiliser soit la valeur décimale réelle ou bien des bits inférieurs comme de 0 à 7 ? Je comprends (à peu près) que pour la couleur RGB, cela permet de contenir l'information des 3 couleurs dans une unique valeur numérique et dont le traitement est simple en opération bit à bit, mais si la couleur RGB va du bit 0 au bits 23, pourquoi la transparence (qui n'a rien à voir avec le code DXF de la couleur) devrait commencer au bit 24 ? Chat me perturbe un peu car je n'arrive pas à comprendre la raison de ceci :3 (defun Transp>Dec (n) (lsh (lsh n 32) -32) ) (defun Dec>Transp (n) (lsh n 32) ) Du coup si je ne dis pas de bêtises, on devrait pouvoir obtenir les valeurs de transparence ainsi, nan ? Et ensuite, si je me base sur mes maigres connaissances, on peut trouver la valeur d'un nombre en base 10 avec la formule : bn x B^n + bn x B^(n-1) + ... + b1 x B^1 + b0 x B^0 Avec bn la valeur du bit à la position n et B la base (en binaire B=2). Donc par exemple en base 2, le nombre 1010 en binaire vaut : 1 x 2^3 + 0 x 2^2 + 1 x 2^1 + 0 x 2^0 = 8 + 0 + 2 + 0 = 10 Cependant, si je comprend bien, sur l'écriture des nombres entiers en 32 bits, cette règle s'applique lorsque son premier bit vaut 0 mais lorsqu'il vaut 1, doit-on faire un NOT de cette règle (donc que 0 vaut 1 et 1 vaut 0 pour effectuer ce calcul) ? Auquel cas, il faudrait inverser la valeur de chaque bit si le premier vaut 1 si l'on souhaite la convertir en base 10 ? Je débute encore donc désolée si mes explications sont foireuses, incomplètes voire erronées >w< Bisous, Luna
  5. Coucou, Denis, la fonction (explore-DXF) est une fonction que j'ai écrite moi même car j'ai souvent eut besoin de fouiller mes listes DXF pour comprendre leur fonctionnement et jusqu'où je devais creuser pour récupérer l'information que je recherche. Si tu la cherches, je l'ai postée sur CADxp à cette adresse : Explore-DXF (le seul défaut -qu'il faudrait que je corrige - c'est que l'on ne peut pas accéder aux données étendues car j'effectue l'(entget) dans ma fonction et non dans l'argument mais c'est facile à modifier :3 ) Ce qu'il faut comprendre avec les données étendues c'est qu'elles sont dépendantes d'une "application" (certaines applications existent déjà dans AutoCAD mais il est également possible d'en créer via la fonction (regapp), didier en parle sur son site). Ces données ne sont pas visibles à moins de spécifier le second argument de la fonction (entget) comme le dit (gile) avec '("*"). Ce second argument permet de spécifier le(s) nom(s) des applications que l'on souhaite pour afficher les données étendues spécifiques à un objet, donc avec cette liste-ci on peut récupérer les données étendues de chaque applications liées à cet objet (cf. l'aide AutoCAD pour (entget) :3). Toutes les données étendues sont contenues dans une liste pointée par le code DXF -3. En faisant le (cdr) de cette paire pointée, la liste obtenue est composées à son tour de paires pointées ayant le nom de l'application comme key, et les données étendues comme values. Donc dans ton exemple "(-3 ("AcAecLayerStandard" (1000 . "") (1000 . "Mobilier intérieur et urbain"))))" l'application porte le nom "AcAecLayerStandard" et possède plusieurs valeurs chacunes portant ici le code 1000 1000 ASCII string (up to 255 bytes long) in extended data. La gestion de données étendues n'est pas la meilleure manière de commencer pour apprendre l'utilisation des (entmake). Sur le net et avec l'aide d'AutoCAD, tu trouveras les codes DXF essentiels en fonction des objets, mais à savoir que les codes 0 et 100 sont primordiaux, le reste dépends du type d'objet et on peut le découvrir en testant :3 Bisous, Luna
  6. Coucou @Fraid, Il y a une chose que je n'arrive pas bien à comprendre sur la valeur des caractères... Si on fait un rapide check j'ai : Ecriture décimale = (ascii "é") -> 233 Ecriture binaire = (itob 233) -> ("1110 1001" (1 1 1 0 1 0 0 1)) Ecriture héxadécimale = "1110" -> "E" et "1001" -> "9" Soit plus rapidement, (base 16 (ascii "é")) -> "E9" Or ici l'encodage veut "é" -> "%C3%A9%" donc ma question c'est à quelle base cet encodage fait-il référence pour passer de "E9" en "C3A9" ? Bisous, Luna
  7. Bon ben, je vais avoir du travail pour étudier tout chat et comprendre la logique parce que ya pas à dire, c'est propre ! C'est une leçon très intéressante quoi qu'il en soit et qui démontre parfaitement l'importance de la logique appliquée par le développeur pour arriver à ses fins. Les routes sont nombreuses pour arriver à ses fins mais une bonne connaissance du chemin permet d'emprunter des raccourcis facilitant une utilisation généralisée (mais pouvant créer des nœuds au cerveau parfois !). J'avais justement essayé un développement similaire au début mais je me suis ratée sur la génération des clés de recherche, donc après quelques nœuds au cerveau, j'ai préférer me rabattre sur une logique plus...analytique mais avec cela, j'aurais de quoi apprendre à mieux les utiliser car cela peut servir en de nombreuses occasions ! Donc merci pour ce challenge et pour vos réponses à tous ! Bisous, Luna
  8. @VDH-Bruno au top ! Les programmes de @VDH-Bruno et @Fraid loin devant sur l'utilisation de la récursivité, là où les boucles (while) et (foreach) semblent légèrement plus longue à l'exécution ! A voir avec la version tant attendu de maître (giles) :3 Bisous, Luna
  9. Bon bah ma version ignoble : (defun mergepts (pt-list fuzz fun / brn b i lst interlist get-brn l pt tmp0 tmp1 tmp2 lst0 lst1 lst2) (defun interlist (lst / tmp) (foreach x (car lst) (if (not (member nil (mapcar '(lambda (n) (member x n)) lst))) (setq tmp (cons x tmp)) ) ) (reverse tmp) ) (defun get-brn (pt lst / ) (if (member pt (car lst)) (car lst) (if (cdr lst) (get-brn pt (cdr lst)) (princ) ) ) ) (setq brn (vl-sort (apply 'append pt-list) '<) b (if (< (abs (rem (car brn) fuzz)) (/ fuzz 2.0)) (* fuzz (+ (if (minusp (car brn)) -0.5 0.5) (fix (/ (car brn) fuzz)))) (* fuzz (+ (if (minusp (car brn)) -1.5 1.5) (fix (/ (car brn) fuzz)))) ) ) (foreach c fun (set (read (strcat "lst" (itoa c))) '()) ) (while (<= b (last brn)) (foreach c fun (set (read (strcat "tmp" (itoa c))) (vl-remove-if '(lambda (pt) (or (> b (nth c pt)) (<= (+ b fuzz) (nth c pt)) ) ) pt-list ) ) (if (vl-symbol-value (read (strcat "tmp" (itoa c)))) (set (read (strcat "lst" (itoa c))) (append (list (vl-symbol-value (read (strcat "tmp" (itoa c))))) (vl-symbol-value (read (strcat "lst" (itoa c)))) ) ) ) ) (setq b (+ b fuzz)) ) (cond ((= (length fun) 1) (vl-symbol-value (read (strcat "lst" (itoa (car fun))))) ) ((> (length fun) 1) (while pt-list (setq pt (car pt-list) l (interlist (mapcar '(lambda (n) (get-brn pt (vl-symbol-value (read (strcat "lst" (itoa n))))) ) fun ) ) lst (cons l lst) ) (foreach pt l (setq pt-list (vl-remove pt pt-list)) ) ) (reverse lst) ) (t (princ)) ) ) Je n'ai pas vraiment essayé de la simplifier au maximum malheureusement (pas trop le temps, et une migraine pointe le bout de son museau). Juste pour info, la variable fun permet de définir le mode de calcul de la fonction. Il se présente sous la forme de liste et correspond à la position nth d'un élément dans la liste de points. Donc dans le cas d'une liste de points 3D, on peut avoir : -> 0 = X -> 1 = Y -> 2 = Z Ce qui permet donc d'avoir un retour pour grouper selon : -> X soit fun = '(0) -> Y soit fun = '(1) -> Z soit fun = '(2) -> X et Y soit fun = '(0 1) -> X et Z soit fun = '(0 2) -> Y et Z soit fun = '(1 2) -> X, Y et Z soit fun = '(0 1 2) Mais du coup, beaucoup de boucles, beaucoup de simplification d'écriture et j'aurais dû ré-itérer l'utilisation de la récursivité mais bon...je n'aurais pas le temps avant ce soir >w< Voili voilou ♥ PS : petite question à la con, mais dans le cas d'une déclaration de variables au nom variable (set (read (strcat var (itoa (setq i (1+ i)))))), existe-il un moyen quelconque de déclarer les variables localement pour ne pas traîner des variables inutiles de manière globale ? Bisous, Luna
  10. justement, c'est pas tout à fait la même chose ^^"
  11. Coucou, Tu as également la possibilité de créer ton propre fichier de personnalisation .cuix et ainsi de créer une barre d'outils (déplaçable, ancrable, etc) au lieu de la barre d'accès rapide. Cela permet d'ordonner ton espace de travail comme tu le souhaites et tu peux y mettre toutes les commandes que tu souhaites (natives, LISP, etc) Bisous, Luna
  12. Yayyyyy !!! J'ai une solution...Uuuuhh ignoble malheureusement mais in fine chat fonctionne (ou du moins chat fonctionne avec l'exemple :3) Mais très clairement en terme de lisibilité et de rapidité, bah je suis dernière 😭 Résultats du BenchMark (de Michael Puckett) : Bon du coup, cette fois-ci je le conserve encore caché "pour ne pas décourager les autres" 😜 (par contre cela fonctionne de manière générale pour répondre à la demande aussi bien avec un tri en X, Y, Z, X/Y, Y/Z et X/Y/Z ♥) Bisous, Luna
  13. Petite erreur de syntaxe sur car si on définit un écart de 10, on aurait plutôt [-14.3, -4.3[, [-4.3, 5.7[, [5.7, 15.7[ ... Bon aller j'y retourne en essayant de répondre au challenge de manière plus générale (probablement plus longue aussi) T_T Bisous, Luna
  14. Coucou, Je me souviens avoir eu le même soucis (avec le même bloc pour des hachures d'isolant) et je n'ai malheureusement pas su trouver de combine pour faire en en sorte que le réseau s'adapte à la taille du motif. Après à l'époque je n'avais pas tout essayé donc bon... Je sais que les contraintes paramétriques peuvent supporter des expressions mais malheureusement on ne peut pas utiliser les contraintes linéaires pour générer une action de réseau... L'espacement entre colonnes n'accepte que des valeurs numériques donc je ne pense pas qu'il y ait moyen de générer une action de réseau dont l'espacement s'adapte à une longueur / facteur d'échelle des objets impliqués... C'est d'ailleurs pourquoi j'avais abandonnée donc je pense en effet que tu n'as pas d'autres choix que de passer par des visibilités.. Bisous, Luna
  15. Si l'énoncé n'est pas clair, rien ne vas plus ! En effet l'exemple ici présenté peut être lu de plusieurs manières différentes : - On définit le bornage à partir de la valeur minimal de la liste (ici -14.3) permettant ainsi de créer les bornages [-14.3 , -4.3[, [-4.3 , 5.7[ et [5.7 , 15.7[ - On définit un bornage centrée sur 0 et d'un pas d'unités 10 permettant ainsi de créer les bornages [-15.0 , -5.0[, [-5.0 , 5.0[ et [5.0 , 15.0[ Ainsi avec l'exemple donné, impossible en soit de différencier les deux avec l'énoncé actuel. Mais sur des listes différentes, les résultats seront non fonctionnels. Bon bah dans ce cas, on retourne à nos claviers ! Concernant le groupement en X et Y, en quoi cela consiste précisément ? Faut-il que les X et Y respectent la même règle (ce qui risque donc de créer de nombreuses sous-listes d'un unique point) ou bien c'est d'avoir le choix entre le groupement des X et le groupement des Y ? En d'autres termes, le résultat attendu pour l'exemple en groupement X et Y doit correspondre à cela ? Bisous, Luna
  16. Coucou @Cadmin, J'ai remarqué que parfois le menu des forums avait un bug d'affichage (le bouton "More" n'apparaît pas et la liste des forums se fait sur 2 lignes au lieu d'une seule)...Cela ne pose pas de soucis en soit (mise à part à la lecture :3) mais je remonte juste l'info :) Bisous, Luna
  17. Euh... Si je comprends bien le but de la demande c'est d'avoir une programme qui permet de faire : Donc d'avoir une liste des anciens calques, la liste des nouveaux calques et de remplacer les anciens calques par les nouveaux ? Si c'est bien de cela, le plus simple serait de passer par un fichier .csv ou .xls afin de rentrer les tables d'équivalence mais j'avais déjà écrit un programme comme celui-ci et je me suis rendu compte d'un défaut évident à ce soucis : ce programme n'est absolument pas en mesure de s'adapter correctement si un calque ne fait pas parti de la liste des anciens calques ou si son nom diffère légèrement...C'est pourquoi j'avais abandonné son utilisation. En revanche si le but est de remplacer un unique calque et de renommer le nom du calque, alors pas besoin de LISP, le gestionnaire de calque est suffisant, sinon la commande native RENOMMER est pas mal. Autrement si le but est de remplacer l'ancien calque dans un nouveau calque contenant déjà des objets, il y a la commande FUSCALQUE. Donc dans le cas n°1, c'est un programme très limité qui ne répondra probablement pas correctement à ta demande sur le long terme, et dans les autres, je pense que les commandes natives permettent d'y répondre (ou alors je n'ai pas compris ta demande...) Bisous, Luna
  18. Coucou, Grâce à la nouvelle structure du site, je viens de découvrir ce forum :3 Ce n'est pas très opti' mais voici ma première proposition au challenge : (defun mergepts (pt-list fuzz / mn i lst grp) (defun grouppts (pt-list fuzz / lst) (setq lst (list (vl-remove-if '(lambda (pt) (< (+ mn fuzz) (car pt))) pt-list) (vl-remove-if-not '(lambda (pt) (< (+ mn fuzz) (car pt))) pt-list) ) ) ) (setq mn (apply 'min (mapcar 'car pt-list)) i 0 ) (while pt-list (setq grp (grouppts pt-list (* (setq i (1+ i)) fuzz)) lst (cons (car grp) lst) pt-list (cadr grp) ) ) (reverse lst) ) Bisous, Luna
  19. Je pense que l'anglais pourrait également t'aider énormément pour la compréhension des langages. C'est comme pour toute chose, il est inutile de se bourrer le crâne de force en apprenant ses leçons tous les jours ! La première étape c'est la compréhension, la logique de la chose. Une fois qu'on comprend, l'apprentissage se fait presque automatiquement. Le langage LISP est très proche d'un langage algorithmique et donc c'est de la logique pure et dure. Chaque fonction, chaque nom de fonction, les arguments à déclarer, l'ordre de déclaration des arguments, ... tout chat à un sens logique qui est parfois beaucoup plus simple à saisir si l'on n'a pas cette barrière de la langue, car que se soit en LISP, en C#, en VBA, en HTML, ... ils se baseront tous sur la langue universelle : l'anglais. Bref, je pense que lorsqu'on aime, on ne compte pas, donc si cela peut te permettre de t'aider dans la compréhension de fonctionnement d'un langage (et ainsi te permettre de coder des programmes plus complexes), je pense que l'anglais est une base plus que nécessaire pour commencer :3 Pour ce qui est du LISP, une courbe de progression ne sera jamais exponentielle, elle est comparable à une courbe logarithmique : elle finit par s'aplanir peu à peu, mais en aucuns cas cela veut dire que l'on ne progresse plus :3 Les seules différences qu'il peut y avoir entre plusieurs personnes c'est le temps que l'on passe pour passer les paliers et la manière d'y parvenir. Entre une personne qui fera plein de petits programmes tout simples mais basés sur la compréhension d'une fonction en cherchant à aller toujours un peu plus loin et une personne qui décide de s'attaquer au Mont Everest sans jamais avoir appris à marcher, seulement l'une d'entres elles parviendra au sommet ! Un exercice tout simple que je peux te conseiller (chat m'a beaucoup appris), c'est de choisir une commande native d'AutoCAD et essayer de faire la même chose par toi-même et une fois terminé (avec un résultat identique), tu peux alors essayer de te demander : comment l'améliorer, quelle fonctionnalité manque-t-il à cette commande que je pourrais ajouter ? Il faut commencer petit, bien évidemment mais au moins, cela permet d'avoir un but précis car on connait le résultat final, sans pour autant avoir la solution ❤️w❤️ et tu peux rapidement t'intéresser à beaucoup de sujets différents ! Dessiner une simple polyligne te fera te demander par exemple : comment fonctionne les arcs ? Quel est son code DXF ? Qu'est-ce qu'une bulge ? Comment la calcule-t-on ? ... Bref tout chat te feras te poser des milliers de questions (et bien souvent certaines réponses ne se trouveront qu'en anglais, la boucle est bouclée 😄) et qui seront un nouveau challenge chaque jour à résoudre :3 Bref, je ne sais pas si j'ai été claire, et désolée d'avance pour le roman mais je pense que l'abandon d'un langage vers un autre n'est que le début de la fin...Il n'y a pas d'autres limites intellectuelles que celles que l'on se fixe ! Bisous, Luna
  20. Hihi ❤️ Bon pour faire assez simple, ces options permettent de filtrer les messages que tu veux voir apparaître dans l'activité du forum. Dans la page par défaut de "All Activity", tu vois la totalité des activités du forum, donc des messages que tu as lus ou non, des messages qui t'intéresse ou non, etc Par exemple si tu restes sur la page "Unread Content", elle n'affichera que les messages que tu n'as pas encore lu (donc si tu attends une réponse de quelqu'un ou que tu ne veux pas noyer l'information "neuve" dans l'ensemble des messages, c'est un bon début. Ensuite il y a la possibilité de Follow (vois cela comme un abonnement au flux) un forum, un sujet, une personne et donc en filtrant les activités sur les sujets Follow, tu peux par exemple filtrer les messages qui apparaîtront dans un forum qui ne te concerne pas :3 Par exemple si tu t'abonnes au forum "LISP", avec le filtre sur les sujets Follow, seul les messages présents dans le forum "LISP" seront visibles dans la page des activités. Bref, là où, avant la recherche se faisait sur tout le site et avait de gros problèmes pour retrouver un sujet en particulier, désormais la recherche est beaucoup plus fluide est simple d'utilisation :3 (je commence à me rendre compte que je suis en train de me passionner pour un site, je suis vraiment grave moi >_<) j'aurais fait ce que j'ai pu pour t'aider (ainsi que les autres), mais le site est encore nouveau alors sa prise en main se fera avec le temps ! Bisous, Luna
  21. @didier ce dont parle Aleck, c'est justement que le menu "Activité" renvoie vers une page simplifiée, alors que si tu développe l'onglet Activité pour accéder à "My Activity's Stream" ou "Unread Content" ou "Content I Started" car tu as des filtres de recherches !!! Depuis "Unread Content" : Et tu peux également sauvegarder tes paramètres et/ou en créer d'autres pour mieux filtrer les activités du forum en fonction de tes propres activités ! PS : J'ai également remarqué que l'on a un raccourci vers nos Stream Custom directement en haut à droite du site (sous le profil), comme par exemple "unread follow" (situé à gauche de "Mark all site as read") Bisous, Luna
  22. Le système de recherche est beaucoup mieux maintenant, si tu vas dans la partie "Activity > My Activity's Stream" tu as des options de stream (que l'on peut sauvegarder pour aller plus vite). Donc il te suffit de choisir ceci par exemple : Show me : Any tag Content type : All content Read Status : Unread only Ownership : Content I have posted in Following : (as you want) Time period : Any time Sorting : Newest first Et tu peux également choisir l'option dans les "Notification Settings" tu peux dérouler la liste des Follow Contents et cocher : "Automatically follow new content I post" et "Automatically follow content I reply to" Bisous, Luna
  23. @Aleck_Ultimate désormais si l'on edit un message déjà publié, il se remettra à la fin de la discussion (comme un nouveau message) donc on ne peut plus passer à côté ! :3 Et si un message est publié durant notre rédaction, on reçoit une notification en bas de page permettant d'afficher les nouveaux messages ! (Rooooh je n'avais pas vu toutes ces emotes !!! 😍 🥰) Bisous, Luna
  24. Si la PJ est un document .dwg ou autre pour aider la compréhension du problème, en théorie cela ne pose pas de soucis s'il fini par disparaître avec le temps car il ne s'agit pas d'une solution. Pour les programmes, il est toujours possible (dans la limite du nombre de caractères de poster la solution sous forme de texte et non PJ une fois le poste trop ancien. Le soucis se posera en revanche pour les médias par exemple vidéos d'explications (ce que font (gile) ou _zebulon il me semble) ou des photos explicatives du problème. Dans ce cas, c'est problématique >n< Maybe un espace de stockage commun pour la conservation de certains éléments dit "essentiels" à la compréhension/solution d'un problème ? Bisous, Luna
  25. @CTZen Vouih, En allant dans "My attachments" depuis mon profil, j'ai ma limite de stockage à 7Mo et 4 fichiers que j'ai partagé sur le forum prennent un peu de place donc si l'on joint une PJ à un post, le fichier sera stocké sur notre profil donc si on n'a plus de place, il faudra supprimer des PJ sur certains post. En revanche si je comprends bien, si l'on poste à plusieurs reprises un même fichier, celui-ci ne sera compté qu'une seule fois dans notre espace de stockage ? Bisous, Luna
×
×
  • 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é