Aller au contenu

alexbrabo

Membres
  • Compteur de contenus

    6
  • Inscription

  • Dernière visite

Profile Information

  • Gender
    Male
  • Location
    Strasbourg

alexbrabo's Achievements

Newbie

Newbie (1/14)

0

Réputation sur la communauté

  1. Bonsoir Gilles ! Merci pour ton aide et ta réponse très précise! Je vais du coup tourner l'application un peu différemment car nous n'avons pas de module BRX sur nos licences BricsCAD Classic. Je vais tout de suite faire une demande d'Upgrade à la version Pro , et en attendant j'ajuste mon code en fermant la fenêtre ... !
  2. Bonsoir à tous ! Je suis en train de fabriquer une application pour permettre de corriger la charte graphique d'un plan donné, sur la base d'une liste de calques standardisés (une fonction proche de la mise au norme d'AutoCAD mais en beaucoup plus souple ). L'objectif est qu'en fonction d'un calque "layer" (non normé) sélectionné dans une listbox , on quitte provisoirement la DCL pour que l'utilisateur consulte le contenu du calque, éventuellement supprime certains éléments ou les change de calque manuellement, avant de retourner sur la DCL pour traiter d'autres calques (ou faire d'autre actions sur ce calque : le supprimer, le fusionner ...). Je coince sur le retour à la DCL une fois que mon utilisateur a fait toutes les manip sur les éléments. Je souhaiterai revenir à la DCL en appuyant sur la touche BACKSPACE (voir boucle while). Mais le code que j'ai écrit ne fonctionne pas correctement (il faut cliquer en même temps qu'on appuie sur BACKSPACE ... et encore cela ne marche pas tout le temps) Quelle syntaxe pourrais-je utiliser ? Voyez-vous un moyen plus élégant pour revenir à la DCL ? Merci d'avance pour votre aide ! (setq ss (ssget "_X" (list (cons 8 layer)))) (setvar "LAYLOCKFADECTL" 90) (command "-CALQUE" "L" layer "") (command "_LAYISO" (ssname ss 0) "") (while (/= -128 (acet-sys-keystate 8)) (command pause) );while (command "_LAYUNISO")
  3. Chapeau Gile et zebulon ! Gile, ta fonction récursive est particulièrement bluffante ... je ne suis pas encore rôdé à ce type de fonction ... J'avais aussi travaillé un peu et j'arrivais à quelque chose comme ça, non récursif : (setq l '((A B) (D E) (F G) (B C) (G H) (B D))) (setq lsortie '()) (foreach paire l (setq ltemp paire) (mapcar (lambda (x) (cond ((member (car x) paire) (setq ltemp (append (list (cadr x)) ltemp))) ((member (cadr x) paire) (setq ltemp (append (list (car x)) ltemp))) (T nil) );cond );lambda (vl-remove paire l) ) (setq ltemp (vl-sort ltemp '(lambda (s1 s2) (< (vl-symbol-name s1) (vl-symbol-name s2))))) (setq lsortie (cons ltemp lsortie)) );foreach Cela me donnait une fois les doublons supprimés : '((A B C D E) (F G H) (B D E) (A B C D))) Il ne restait plus qu'à prendre pour chaque liste la plus longue des listes qui ont des atom communs et le tour était joué Mais bon c'est moins clean ... Merci pour votre aide ! Je retourne à la suite de l'appli :)
  4. Salut Gile, Merci pour ta proposition mais cela ne correspond pas à ce ce que je cherche à faire car les numéros ne se suivent pas forcément sur les plans. Chaque paire de la liste ci-dessous désigne des locaux qui sont proches entre eux (pour chaque paire). ((A B) (B C) (B D) (D E) (F G)) A proche de B B proche de C B proche de D D proche de E F proche de G Donc A, B, C, D et E sont "proches" entre eux. F et G sont proches entre eux mais pas de A, B, C, D et E Donc je cherche à avoir dans ce cas d’exemple deux listes qui regroupent les locaux proches de cette façon : ((A B C D E)(F G))
  5. Bonjour _zebumlon et didier Oui avec le recul je comprends que mon message est plutôt complexe. Simplifions : J'ai une liste en entrée de type : ((A B ) (B C) (B D) (D E) (F G)) La première paire veut dire que A et B sont voisins ... etc Je veux pouvoir avoir des listes d'objets voisins entre eux. Pour cet exemple ca donnerai : ((A B C D E)(F G)) Didier, j'ai déjà créé la requête graphique pour obtenir cette liste avec détection de collision. Ma question concerne la manipulation de cette liste de paires que j'obtiens par la manip précédente. Merci pour votre aide !
  6. Bonsoir à tous, Je travaille actuellement sur une application permettant d'automatiser l'impression d'extraits de plans de bâtiment, simplement en donnant les numéros des locaux comme arguments. Ça se présente plutôt bien mais je bloque sur une problématique, à savoir le regroupement de locaux. L'objectif est que, si des locaux désignés sont à proximités entre eux, alors on ne fait qu'une seule impression à l'échelle adaptée plutôt que d'imprimer chaque local indépendamment. J'ai donc travaillé ça graphiquement pour identifier les locaux qui sont proches, et j'arrive donc à une liste lstlocauxvoisins qui ressemble à ça: (setq lstlocauxvoisins '(("J/02/110" "J/02/111") ("J/02/109" "J/02/110") ("J/02/108" "J/02/109") ("B/02/107" "J/02/108") ("A/02/003" "A/02/002"))) Les paires correspondent à des locaux proches entre eux. Je cherche à trouver une solution pour obtenir une liste de locaux sous la forme ((liste 1) (liste 2))... ou chaque liste contient les locaux groupés de proches en proches (attention les lettres et chiffres des codes locaux ne permettent pas de les regrouper géographiquement) J'ai tenté plusieurs approches dont une en utilisant la fonction common de gile, mais je sèche ... et je pense que m'égare un peu et qu'il y a peut-être plus simple à faire. Ci-dessous le bout de code esquissé ... tourné déjà dans tous les sens :blink: Avez-vous une idée sur la façon de traiter ça ? Merci d'avance pour votre aide ! (defun common (l1 l2) (if l1 (if (member (car l1) l2) (cons (car l1) (common (cdr l1) l2)) (common (cdr l1) l2) ) ) ) (setq ind -1) (foreach paire lstlocauxvoisins (setq ind (+ ind 1)) (mapcar (lambda (x) (if (common paire x) (...) );if );lambda (vl-remove paire lstlocauxvoisins) ) );foreach
×
×
  • 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é