Rechercher dans la communauté
Affichage des résultats pour « challenge » dans sujets.
502 résultats trouvés
-
challenge 11 \"certainement pour confirmé\"
(gile) a répondu à un(e) sujet de lovecraft dans Débuter en LISP
Ça ne se bouscule toujours pas. La question est plus large qu'un "challenge" comme ceux fait pécédemment auxquels on répondait par une (ou quelques) routines. Il s'agirait là de répondre avec une petite application. Je vais essayer de débroussailler un peu (de la manière dont j'ai abordé la question) pour essayer de dégager ce qui pourrait relever d'un (ou de plusieurs) "challenge". Pour répondre à la demande, il faudrait : 1 - Récupérer des données entrées par l'utilisateur : les 2 calques sur lesquels sont les faces 3d et le point. 2 - Sélectionner les faces 3d à la verticale du point. 3 - Calculer les points d'intersections entre la verticale du point et les faces 3d qui sont à sa verticale (du moins leurs altitudes). 4 - Retourner le résultat. Les points 1 et 4 relèvent plutot de choix personnels (esthétique, pratique, convivialité...) d'interface, dans lequels interviennent assez peu, à mon avis, la rapidité d'exécution du code : les actions faites par l'utilisateur seront toujours plus longue que l'interprétation du code. Le point 2 est plus intéressant d'un point de vue "challenge". Comment faire une sélection qui contienne à coup sur les faces 3d concernées et qui, d'un autre côté, ne contienne pas trop d'entités ce qui aurait pour conséquence d'augmenter considérablement le temps d'exécution (puis qu'il faut retrouver parmi ces objets ceux qui sont effectivement à la verticale du point). Comme on est dans le forum "Débuter en LISP" et que j'ai déjà donné une réponse je vais essayer d'expliquer le choix que j'ai fait, ce qui n'empêche pas de donner d'autres solutions sur ce point. En procédant par élimination, entsel nentsel ou nentselp ne permettent pas de sélectionner une face 3d en affichage filaire 2d si le point est à l'intérieur de celle ci. Il en est de même pour ssget avec un seul point. Dans toutes les options possibles avec ssget certaines permettent de faire un jeu de sélection sans intervention de l'utilisateur (excepté le point précédemment acquis) : "_X" (toutes les entités du dessin) ou "_A" (toutes les entités sur des calques dégelés) créerait des jeu de sélection très important (dans le dessin fournit par Lovecraft : 1680 faces 3d sur le calque MNT_NIVEAUFINI, 1970 sur MNT_TN_VILLY) "_W" (fenêtre) et "_WP" (fenêtre polygonale) nécessitent que les objets soient entièrement à l'intérieur de la fenêtre, il serait envisageable de faire une fenêtre de sélection correspondant à la fenêtre de dessin active (moins d'entités que précédemment si on est pas en zoom étendu). Si les faces reherchées sont dans la vue courante, elles seront sélectionnées. "_C" (capture), "_CP" (capture polygonale) et "_F" (trajet) permettent de sélectionner à coup sur les faces 3d recherchés si le point spécifié est un des points de la fenêtre ou du trajet et que celui ci croise une des arrêtes des faces recherchées. Mon choix s'est porté sur trajet, plus simple à utiliser. J'ai un premier point pour mon trajet : le point spécifié, j'en construit un autre de manière à être sûr que le trajet sera entièrement contenu dans la fvue affichée. La variable système VIEWSIZE indique la hauteur de la vue en unité de dessin, en ajoutant cette valeur à la coordonnée Y de mon point je suis certain que mon trajet sera entièrement contenu dans la vue. Donc qu'il coupera les arrêtes des faces 3d recherchées (à condition, bien sur, qu'elles soient aussi à l'intérieur de la vue). De plus, dans le jeu de sélection créé avec l'option trajet les objets sont dans l'ordre dans lequel ils ont été sélectionnés (là partir du premier point du trajet). La fonction ssget autorisant les filtres de sélection, je fait 2 jeux en filtrant les face 3d sur le premier calque et les faces 3d sur le second, ce qui facilite le traitement par la suite. Reste donc, le point 3 : le traitement de ce jeu de sélection pour en ressortir les altitudes des point d'intersection de la verticale du point avec une faces 3d de chacun des calques. Et là, à mon avis, il y a moyen de "challenger". ;) -
C'est magnifique merci, et donc du coup si je veux répéter ce script sur d'autres escaliers qui auront des calques en plus (marches par exemple) ou en moins (pas de garde corps d'étage) il faut que je m'oriente vers diesel et excel... J'y connais pas grand chose dans tout ça, mon utilisation d'excel est très basique (quelques formules) et j'ai une toute petite doc sur le diesel trouvé sur le site de Christian... mais voilà un challenge intéressant! (bon, ça risque de me prendre 4 ans tout seul donc je risque de revenir vers vous souvent...) merci!
-
Non, c'était juste un challenge, d'ailleurs, mes souvenirs de l'algorythme Delaunay étaient très vagues quand j'ai lancé ce challenge.... La preuve : j'ai écrit la routine selon l'algorythme décrit en début de challenge, çà donne çà : http://xs216.xs.to/xs216/07225/Image6.jpg Pas terrible hein ? J'ai d'abord cru à une erreur de programmation et puis je suis allé vérifier l'algorythme sur Internet et c'est un peu plus complexe qu'annoncé au début la même liste de points devrait donner ceci http://xs216.xs.to/xs216/07225/Image7.jpg mais çà m'a piqué au vif et j'y reviendrai avec la routine et des explications
-
Ça n'est pas grave, Evgeniy, le challenge n'était pas si bon : trop facile pour ceux, comme toi, qui connaissaient la solution, et peut-être vraiment difficile pour certains. That don't matter, Evgeniy, the challenge wasn't so good; too easy for those, as you, who knew the solution, and may be really difficult for some others. Quelques explications. L'idée m'est venu en répondant à une demande sur un forum Autodesk, et je pensaiss que ça pouvait être un moyen pour aborder les manipulations de codes binaires avec les opérateurs logique. La fonction Boole est une fonction générale pour faire des opérations booléennes sur les bits (code binaires). Elle admet comme arguments plusieurs entiers dont le premier définit l'opérateur et les suivants sont les codes binaires sur lesquels se font les opérations. Les opérations Booléennes standard, AND, OR, XOR et NOR ont comme opérateur respectivement 1, 7, 6 et 8. Pour plus d'explications sur la fonction Boole (et aussi logand, logior et ~) voir dans l'aide aux développeurs ou ici. La solution de ce challenge résidait donc dans l'utilisation de l'opérateur XOR (ou exclusif, ou bien), qui permet d'éviter les tests logiques pour savoir si un bit est actif ou non. (Boole 6 n m) retourne la somme des codes binaire qui sont exclusivement dans n ou dans m. Exemple : (Boole 6 1 0) -> 1 (Boole 6 1 1) -> 0 Donc pour une variable comme ORTHOMODE, faire : (setvar "ORTHOMODE" (Boole 6 1 (getvar "ORTHOMODE"))) mtrra orthomode à 1 s'il était à 0 et inversement. De la même façon on peut activer/désactiver plusieurs accochages aux objets : (setvar "OSMODE" (Boole 6 6 (getvar "OSMODE"))) effectuera une basule sur les codes 2 et 4 (milieu et centre). On peut faire une routine dont les arguments sont le nom de la variable et la somme des codes binaire sur lesquels effectuer la bascule. (defun bascule (var bin) (setvar var (Boole 6 (getvar var) bin)) )
-
Merci pour l'importance que vous avez apporté a ma demande. en ce qui me concerne j'ai qqes notions en lisp et en VBA donc en cherchant un peu voir beaucoup j'arrive à comprendre ce que vous faites , un p'tit bémol, je ne connais rien en Vlisp (je suis entrain d'aborder le sujet) Et pour reprendre la reponse de gile, je comprends bien qu'il s'agisse d'un challenge concernant les plus aguéri.Mais l'idée d'un challenge pour ce qui début et une merveilleuse idée. Encore merci à vous trois. PS: J'attends que l'un d'entre vous lance un challenge pour les débutants.
-
Get WOW Gold in Many Different Ways PMWorld of Warcraft gold is the standard currency of World of Warcraft. Farming world of warcraft gold WOW gold isn't easy, but you can buy cheap WoW gold, guides, items on sale. We guarantee the World of Warcraft gold, the cheapest WoW gold will be sent to you within 12 hours after your payment was received. WOWGOLDSTUDIO provides World of Warcraft cheap wow gold players with fast transactions, 24/7 customer online service and transactional security wow account guaranteed. The World of Warcraft Gold(WoW Gold) that we provide are farmed in legal. Cheapest Price, Fastest Delivery, Best Service! In any fight where your group is fighting multiple mobs, you’re going to want to have some version of crowd control. For those that play tanking classes the challenge comes not when the fight begins and the mobs are tied up with freezing traps or polymorph, it comes afterward, when the time comes to break said methods of control. Buy WOW gold As Karthis mentions in a recent post on Of Teeth and Claws, breaking runescape gold crowd control successfully is more of an art form than you might think. WOW Gold is a shiny yellow metal, that for some reason everyone seems to WOW gold want. This is just as true in the real world, as it is in the virtual WOW gold of online games. Games such as World of Warcraft. Here, while it is much less shiny then the real thing, it is much more useful custom wedding dress as it is needed to buy pretty well everything. There are many ways to buy WoW Gold, from killing things to finding it, but the easiest way is just to buy it. When you kill a creature in World of Warcraft, it will usually drop an item or some best ladies watches gold for you to pick up. This is beside the usual experience points awarded cheap jerseys for victory in combat. Experience is good as well, as it allows you to level up more quickly, and so become stronger and more easily able to defeat your next combat challenge or quest. Of course, killing is not easy or fast, and so you really need to focus on it to gain a reasonable amount of gold. This may not be what you want, as it is a lot of effort, and so you also need to talk to the non-player characters scattered around the world. They will often give you cheapest wholesale handbags WOW gold, which when completed will reward you with experience and sometimes gold as well. [Edité le 6/5/2011 par sun159159]
-
Bonsoir à toutes et tous, Salut Olivier, OkOk mais tu t'adaptes rapidement du peu que j'ai vu et tu as surtout pris le temps, pour je ne sais quelle raison qui t'honore, de me dépanner, mais avant tout de dépanner cette demoiselle qui joue sa seconde carrière !! En effet, j'ai créé une formation d'adultes en reconversion (pour des raisons diverses et variées, tu te doutes bien,..) pour préparer le diplôme du BTS Géomètre Topographe en une année scolaire (au lieu de deux, imagine le challenge !!). On peut facilement comprendre qu'il joue gros dans cette formation. La plupart sont en couples et ont des enfants, etc bref=== Jouer et le bon verbe, mais le nouveau référentiel du diplôme qui commence dés Septembre de cette année sera plus accès géomatique,..donc, j'm'entraine ;) (Mais je ne veux bien entendu que ce ne soit pas au détriment des étudiants que j'encadre,...) J'enseigne également en formation initiale dans le même lycée, et là aussi, j'ai quelques bons ! Certains recherche des entreprises pour faire des licences pro en apprentissage, t'as ça sous l'coude ? C'est clair ! (J’allais dire, surtout par ces temps qui court ou tout se barre en c . - - - -e !) Et cette année, comme chaque année (c'est vrai que c'est rassurant,:)), certain(e)s se distingue particulièrement dans différents domaines de compétences dont, pour certain(e)s, une très bonne approche du très fameux couple "AutoCAD*/Covadis", devenu aujourd'hui incontournable dans mon/ notre métier (j'allais dire, c'est le minimum requis aujourd'hui),... Pensant avoir "suffisamment" de compétences pour l'enseignement que je dispense sur ces deux logiciels (rappelons que c'est un niveau BTS et non une dernière année d'école d'ingé,...! Bien entendu, rien de péjoratif, juste pour préciser que je ne me prétend pas pour un cador, loin de moi cette prétention mais pense avoir assez de compétences pour ce niveau de formation), je m'intéresse depuis quelques années au monde du SIG dés que le temps me le permet mais j'ai bien l'intention de monter en puissance dans ce domaine, d'autant que c'est l'enseignement que je devrai dispenser demain. C'est clair qu'en autodidacte, c'est tendu ! Très loin de mon monde de départ qui est le Génie civil et tout particulièrement le calcul des structures et ouvrages, pour dire,.. Merci encore,
-
Gestionnaire de la communauté francophone Autodesk
La Lozère a répondu à un sujet dans CAO, généralités
Hello, Félicitation, et bon courage. Gros challenge que de s'attaquer à l’Everest ;) http://fotoforum.fr/photos/2016/04/19.31.jpg -
Gestionnaire de la communauté francophone Autodesk
lecrabe a répondu à un sujet dans CAO, généralités
Hello Patrick Good Luck pour ce nouveau challenge ! A+, lecrabe -
Récupérer l'état du calque d'un bloc dans la fenêtre courante
Invité a posté un sujet dans ObjectARX/DBX, C++, .NET, RealDWG
Petit challenge en C#, j'aimerais récupérer l'état du calque (gelé ou non) d'une référence de bloc dans une fenêtre de présentation. Je connais l'objet BlockReference, je connais l'objet Viewport. Je voudrais donc savoir si le calque sur lequel ce bloc est inséré est gelé ou pas dans la fenêtre Viewport. Si vous pouviez me mettre sur une piste? merci. -
Coucou Allons allons un peu de tenue ! À moins que le challenge soit de me remplacer dans les diatribes anti marketing. Les "vendeurs" ont une solide formation, le test pour les meilleurs est de vendre des glaçons aux Esquimaux et ensuite ils sont embauchés dans le monde informatique. Blague à part, merci de cet échange qui prouve si besoin est que le mieux est toujours l'ennemi du bien. Amicalement
-
Hello Un petit challenge pour le WE ! Regardez bien ce lien : https://knowledge.autodesk.com/customer-service/account-management/software-downloads/previous-versions/find-your-eligibility-for-previous-versions/desktop-subscription-previous-use#Available%20Previous%20Releases%20for%20Desktop%20Subscribers Quel est le COUAC dans cette liste ? Bye, lecrabe
-
Salut Un challenge :D ; Traduire un nombre romain en décimal (defun romdec(nb / pas pos tbl tot tro) (setq tbl (list (cons "I" 1) (cons "IV" 4) (cons "V" 5) (cons "IX" 9) (cons "X" 10) (cons "XL" 40) (cons "L" 50) (cons "XC" 90) (cons "C" 100) (cons "CD" 400) (cons "D" 500) (cons "CM" 900) (cons "M" 1000) ) ) (setq pos 1 pas 2 tot 0 nb (strcase nb)) (while (and (setq txt (substr nb pos pas)) (<= pos (strlen nb)) (> pas 0) ) (if (setq tro (assoc txt tbl)) (setq tot (+ tot (cdr tro)) pos (+ pos pas) pas 2 ) (setq pas (1- pas)) ) ) tot ) ; Traduire un nombre décimal en romain (defun decrom(nb / eng pas pos str tbl) (setq tbl (list (cons "I" 1) (cons "IV" 4) (cons "V" 5) (cons "IX" 9) (cons "X" 10) (cons "XL" 40) (cons "L" 50) (cons "XC" 90) (cons "C" 100) (cons "CD" 400) (cons "D" 500) (cons "CM" 900) (cons "M" 1000) ) ) (setq pas (1- (length tbl)) str "") (while (/= 0 pos) (setq pos (rem nb (cdr (setq eng (nth pas tbl))))) (repeat (/ nb (cdr eng)) (setq str (strcat str (car eng))) ) (setq nb pos pas (1- pas)) ) str ) ;Faire le calcul (defun calrom(nb1 op nb2) (decrom ((eval op) (romdec nb1) (romdec nb2))) ) (calrom "I" '+ "III") --> "IV" (calrom "I" '+ "XV") --> "XVI" (calrom "I" '+ "CXLIX") --> "CL" (calrom "I" '+ "MMMCMXCIX") --> "MMMM" (calrom "III" '* "CXLIX") --> "CDXLVII" Pour le challenge de bseb67 (defun calrom(op nb) (decrom (apply op (mapcar 'romdec nb))) ) (calrom '+ '("VI" "XV" "CXLIX")) --> "CLXX" @+ [Edité le 14/4/2010 par Patrick_35]
-
réponse qui ne regarde et n'engage que moi... les récents progrès d'autocad en 3d ne concurrence pas des outils gratuits disponible (sketchup et blender). pour faire un challenge, il faut une modellisation complexe et un rendu pointu. deux choses qu'on gagnerai a faire sous un autre soft si on doit le faire de manière professionnelle (perso je fait mes rendu sous blender pour sa facilité de gestion des textures et des lumières.. sans parler des caméras faire une visée sous autocad c'est retour vers le futur.) Maintenant, si c'est pour faire une galerie d'image et faire de la pub pour les version post 2007 et leur progrès fascinant dans le monde de la 3d, qu'autodesk corrige les bugs récurrents, qu'il améliore enfin des commandes dont on se sert tous les jours et qui n'ont pas évoluées depuis la version 12 (cricri rappelle souvent l' archaïsme de mesurer diviser... voir ses post élocants en la matière ) je verrai alors si je reprend une souscription et participe au challenge...
-
(résolu) Bascule sur une valeur dans un bouton
VDH-Bruno a répondu à un(e) sujet de x_all dans AutoCAD 2015
Re, La ligne de code précédente, retranche ou ajoute le code binaire 1 à somme des codes binaires, donc si la variable et réglé à 2 on bascule de 2 à 3 et vice-versa. Donc pour basculer de 6 à 7, il faut que la variable soit préalablement définie sur une de ses 2 valeurs. L'expression lisp équivalente à l'expression diesel précédente: (setvar 'OSOPTIONS (boole 6 (getvar 'OSOPTIONS) 1)) (6 réprésentant l'opérateur xor dans le fonction boole). Maintenant si tu souhaites avoir une bascule spécifique sur les valeurs 6 ou 7, en fonction de la présence ou non du code binaire 1, tu peux tester ce qui suit: L'expression Diesel: ^C^COSOPTIONS;$M=$(if,$(<,$(xor,$(getvar,OSOPTIONS),1),$(getvar,OSOPTIONS)),6,7); L'expression Lisp équivalente: (setvar 'OSOPTIONS (if (< (boole 6 (getvar 'OSOPTIONS) 1) (getvar 'OSOPTIONS)) 6 7)) Expression qui peut être simplifié au moyen de la fonction logand: (setvar 'OSOPTIONS (if (zerop (logand (getvar 'OSOPTIONS) 1)) 7 6)) Sachant que tu t'intéresses au Lisp, je t'invite à jeter un œil à cette discussion challenge-bascule cela devrait aider. A+ -
Bonjour, Le retour des challenges super!!! Pour saluer cette initiative ma petite contribution… La première qui vient à l'esprit pour sa concision (à condition d'avoir une bibliothèque de fonction prédéfinie bien fournie), avec massoc et remove_doubles(/distinct), perso j'ai utilisé les fonctions de (gile) ici. (defun asso (l m) (setq m (mapcar 'cons l m)) (mapcar '(lambda (x) (append (list x) (gc:massoc x m))) (gc:distinct l)) ) (@Patrick_35: c'est l'écriture de l'algorithme décrit par stendhal666 sur le forum developpez.com, au passage il me semble qu'il faut ajouter un # devant 'cons pour que ton exemple soit compatible en Clisp ;-). Pour la syntaxe en Clisp http://www.lispworks.com/documentation/HyperSpec/Body/f_mapc_.htm) Sinon pour une proposition de code plus personnel, avec une variante mutuellement récursive pour optimiser le parcours sans avoir recours à la bibliothéque de fonction vl- et n'employer principalement que les fonctions primitives du lisp que sont car, cdr, cons.., (defun asso (l m / g f) (defun f (a acc l m) (cond ((null l) (list (cons a acc))) ((member a l) (g acc l m nil nil)) (T (cons (cons a acc) (f (car l) (list (car m)) (cdr l) (cdr m)))) ) ) (defun g (acc l1 m1 l2 m2) (if (eq a (car l1)) (f a (cons (car m1) acc) (append l2 (cdr l1)) (append m2 (cdr m1))) (g acc (cdr l1) (cdr m1) (cons (car l1) l2) (cons (car m1) m2)) ) ) (f (car l) (list (car m)) (cdr l) (cdr m)) ) Pour le jeu et pour ceux qui considèreraient que j'ai pris des libertés avec l'emploi de member et append, ci-dessous des versions "equivalentes" :-) (defun e-member (e l) (cond ((null l) nil) ((equal e (car l)) l) ;ou eq (T (e-member e (cdr l))) ) ) (defun e-append (l m) (if l (cons (car l) (e-append (cdr l) m)) m ) ) (Ps: Désolé de n'avoir pu participer dans les temps, un rapide coup d'œil sur l'autre challenge me fait penser que ça m'étonnerai que je puisse encore inscrire quelques lignes de code donc toutes mes félicitations aux participants) Amicalement Bruno
-
[Challenge] Suite de Fibonacci
Patrick_35 a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
En un peu plus concis (defun fib (a / b c d e) (setq b 0 c 0 d 0) (while (<= b a) (cond ((zerop B)) ((member b '(1 2)) (setq d 1)) (T (setq e c c d d (+ d e))) ) (setq b (1+ B)) ) (+ c d) ) @+ ps : maintenant, je vais regarder de plus près ta réponse sur l'autre challenge -
Bon, je ne sais pas si (gile) a eu mon mp, donc ma première version du code est disponible ici : http://bseb67.free.fr/cadxp/challenge/30/challenge30.lsp edit: j'ai mis un fichier assez léger avec une profondeur de 65: http://bseb67.free.fr/cadxp/challenge/30/Challenge30-sbs-65.dwg pour le faire, c'est un petit lisp à ma sauce qui créer des blocs bidons avec un certain nombre d'entités (hors blocs) et un certain autre nombre de blocs et ainsi de suite jusqu'à n'avoir qu'un seul bloc. [Edité le 2/12/2009 par bseb67]
-
Salut Un premier exemple qui indique le niveau d'imbrication + les "sous-blocs" du bloc principal. La recherche se fait dans la table des blocs. Il est facile de modifier cette routine afin de sélectionner un bloc pour connaitre ses "sous-blocs". (defun c:lvl(/ doc ele ent lst new nom tot lister nom_bl) (defun nom_bl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (defun lister(ele / new) (or (member (car ele) tab) (setq tab (cons (car ele) tab))) (and (setq new (assoc (car ele) lst)) (lister (cdr new))) (and (setq new (cdr ele)) (lister new)) ) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tot 0 ) (vlax-for bl (vla-get-blocks doc) (or (eq (vla-get-islayout bl) :vlax-true) (eq (vla-get-isxref bl) :vlax-true) (wcmatch (setq nom (nom_bl bl)) "*|*,`**") (vlax-for ent bl (if (eq (vla-get-objectname ent) "AcDbBlockReference") (if (setq ele (assoc nom lst)) (or (member (nom_bl ent) ele) (setq new (append ele (list (nom_bl ent))) lst (subst new ele lst) ) ) (setq lst (cons (list nom (nom_bl ent)) lst)) ) ) ) ) ) (foreach ele lst (princ (strcat "\n\tLe bloc " (car ele))) (lister (cdr ele)) (mapcar '(lambda(x)(princ (strcat " + " x))) tab) (setq tot (max tot (1+ (length tab))) tab nil ) ) (princ (strcat "\n\tNiveau d'imbrication max : " (itoa tot))) (princ) ) Et une autre qui retourne que le niveau d'imbrication (defun lvl(/ doc ele ent lst new nom tot lister nom_bl) (defun nom_bl(bl) (if (vlax-property-available-p bl 'effectivename) (vla-get-effectivename bl) (vla-get-name bl) ) ) (defun lister(ele / new) (or (member (car ele) tab) (setq tab (cons (car ele) tab))) (and (setq new (assoc (car ele) lst)) (lister (cdr new))) (and (setq new (cdr ele)) (lister new)) ) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tot 0 ) (vlax-for bl (vla-get-blocks doc) (or (eq (vla-get-islayout bl) :vlax-true) (eq (vla-get-isxref bl) :vlax-true) (wcmatch (setq nom (nom_bl bl)) "*|*,`**") (vlax-for ent bl (if (eq (vla-get-objectname ent) "AcDbBlockReference") (if (setq ele (assoc nom lst)) (or (member (nom_bl ent) ele) (setq new (append ele (list (nom_bl ent))) lst (subst new ele lst) ) ) (setq lst (cons (list nom (nom_bl ent)) lst)) ) ) ) ) ) (foreach ele lst (lister (cdr ele)) (setq tot (max tot (1+ (length tab))) tab nil ) ) tot ) ElpanovEvgeniy : About Challenge 29, I said list_up1's without double ps : Les blocs anomymes sont écartés. pps : pas le temps de revoir le challenge 29 @+
-
Salut Thierry Alors, je suis assez d'accord avec de que dit notre ami Rhyuk. Et malgré ta technique que j'utilise aussi, il est assez ennuyeux de créer des masques. Pourquoi ne pas faire le même principe que les fenêtres dans les présentation et "dire": -tu dessine ta forme selon ce que tu veux masquer -_sélectionne la fonction masque : (Rectangle, Cercle; Forme): Entrez votre sélection : -Pis tu sélectionne ta forme ou ton cadre. Ami(e)s du Lisp je sens en vous monter ce challenge :) PS: la 255,255,255 fait apparaitre un gris clair lors de l'impression en PDF ou sur papier.
-
Salut, Je craignait que ce challenge n'offre que peu d'intérêt après la première réponse de Tramber qui est très proche de ce j'avais fait (avec vl-every) : (defun position (pat lst / cnt res) (setq cnt 0) (while lst (if (vl-every 'equal pat lst) (if ( (setq res cnt lst nil ) (setq lst nil) ) (setq cnt (1+ cnt) lst (cdr lst) ) ) ) res ) La routine de Tramber est plus concise, mais curieusement un tout petit peu moins rapide (même en supprimant le (vl-position ...) inutile à mon avis). Patrick_35, c'est justement en pensant à faire une sorte de vl-string-search pour les listes que j'ai pensé à ce challenge. Sans utiliser vl-every, j'aurais écrit : (defun position (pat lst / cnt res) (setq cnt 0) (while lst (if (apply '= (cons T (mapcar 'equal pat lst))) (if ( (setq res cnt lst nil ) (setq lst nil) ) (setq cnt (1+ cnt) lst (cdr lst) ) ) ) res )
-
Supprimer automatiquement 1 point tous les X points ?
bonuscad a répondu à un(e) sujet de gillespj dans AutoCAD 2006
Bonjour Voici un challenge concret. Étant susceptible de me rendre service aussi. J'ai commencé à plancher dessus. L'action de cette routine est de linéariser automatiquement les sommets successifs qui sont alignés (colinéaire). L'entité source est conservée, la nouvelle étant dessiné avec les paramètres courants de calque, couleur etc... D'après mes premiers tests cela a l'air correct à un détail près, les derniers segments aligné de la polyligne ne sont pas toujours supprimés. (Ouverture du challenge pour correction, ajout d'une option pour linéariser tous les X sommets...) ;Fonction l-coor2l-pt modifiée d'après une idée originale de Gilles Chanteau (gile) ;----------- (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (caddr lst) 0.0)) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) ;----------- (vl-load-com) (defun c:lxpedit ( / jspl nbr n AcDoc Space ent_name K l_pt a_ref nw_pl) (setq jspl (ssget '((-4 . " (-4 . " (0 . "POLYLINE") (-4 . " (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>") (0 . "LWPOLYLINE") (-4 . "OR>")) ) nbr -1 n 0 ) (cond (jspl (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-StartUndoMark AcDoc) (prompt "\nRecherche des sommets concernés en cours ...\\") (repeat (sslength jspl) (setq ent_name (ssname jspl (setq nbr (1+ nbr))) K T) (setq l_pt (if (eq (vla-get-ObjectName (setq ename (vlax-ename->vla-object ent_name))) "AcDbPolyline") (l-coor2l-pt (vlax-get ename 'Coordinates) nil) (l-coor2l-pt (vlax-get ename 'Coordinates) T) ) ) (while K (cond ((eq n 0) (prompt "\rRecherche des sommets concernés en cours ...|") ) ((eq n 1) (prompt "\rRecherche des sommets concernés en cours .../") ) ((eq n 2) (prompt "\rRecherche des sommets concernés en cours ...-") ) ((eq n 3) (prompt "\rRecherche des sommets concernés en cours ...\\") ) ) (setq n (rem (1+ n) 4) lst_pt (list (setq a (car l_pt))) K nil) (while (cddr l_pt) (if (equal (angle a (cadr l_pt)) (angle a (caddr l_pt)) 1E-8) (progn (while (and (cddr l_pt) (equal (angle a (cadr l_pt)) (angle a (caddr l_pt)) 1E-8)) (setq l_pt (cdr l_pt)) ) (setq lst_pt (cons (setq a (cadr l_pt)) lst_pt) K T) ) (setq lst_pt (cons (setq a (caddr l_pt)) (cons (cadr l_pt) lst_pt)) l_pt (cdr l_pt)) ) (setq l_pt (cdr l_pt) K nil) ) (cond ((> (length lst_pt) 1) (setq a_ref (angle (cadr lst_pt) (car lst_pt))) (if (and (cdr l_pt) (equal a_ref (angle (car l_pt) (cadr l_pt)) 1E-8)) (setq l_pt (append (reverse (cdr lst_pt)) (cdr l_pt)) lst_pt (list (car l_pt))) (setq l_pt (append (reverse lst_pt) l_pt) lst_pt (list (car l_pt))) ) ) ) ) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) (if (member (vla-get-ObjectName ename) '("AcDbPolyline" "AcDb2dPolyline")) (progn (vla-put-Normal nw_pl (vlax-3d-point (vlax-get ename 'Normal))) (vla-put-Elevation nw_pl (vlax-get ename 'Elevation)) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) (vla-put-Closed nw_pl (vlax-get ename 'Closed)) ) (vla-EndUndoMark AcDoc) (vlax-release-object Space) (vlax-release-object AcDoc) (princ (strcat "\n" (itoa (sslength jspl)) " entité(s) soumises à la commande. TERMINE !" ) ) ) (T (princ "\nPas d'entités conformes sélectionnées..!")) ) (prin1) ) NB: Cette routine SUPPRIME tous les segments courbes des polylignes. Code corrigé, TOUS les points colinéaires entre sommets sont supprimés. [Edité le 13/10/2009 par bonuscad] -
Textes et styles annotatifs : retours d'expérience ?
lili2006 a répondu à un(e) sujet de GEGEMATIC dans AutoCAD 2015
Re, Oui, le changement d'échelle des habillages correspond à un basculement du même Nom de fichier d'un répertoire (ex: fichier A01 répertoire 200 vers A01 répertoire 500) Il ne faut pas entendre le mot "échelle" comme sous AutoCAD. Il s'agit ici de bloc dans des proportions différentes en EO pour que le rendu EP selon l’échelle de sortie du plan soit cohérent (C'est pour cela que l'on est même amené à changer de symbolique selon l’échelle, mais vraisemblablement comme dans tous les corps de métiers concernés,...). Au passage, idem pour les espacements (pour les lignes discontinues) et tailles des entités habillant les polylignes. Bref, comme on ferait avec AutoCAD mais de façon plus" fastidieuse", ou tout du moins, moins automatisé (tiens, un bon challenge pour toi Christian,:)) =>Pour les blocs => redéfinition, (Dans mon exemple ci dessus) Pour les habillages polylignes (Diviser/Mesurer avec blocs) => Division différente et taille des blocs différentes -
Salut, Ça pourrait effectivement faire l'objet d'un challenge qui ferait suite au Challenge 12
-
Salut, Voilà 6 jours que Evgeniy a proposé un challenge et toujours pas de réponse (à part mes 2 premières tentatives)... Eut égard à la qualité des routines qu'il a pu donner dans d'autres challenges et aux efforts qu'il fait pour participer à un forum francophone, le pense qu'on devrait faire un effort pour essayer de répondre à ce challenge, d'autant que l'exercice est intéressant et très "ouvert" (beaucoup d'algorithmes et de solutions possible). Je n'ai pas beaucoup de temps ces jours ci, mais voici quand même une troisième méthode. les listes de paires sont "décompilées" (transformées en une liste unique) avant traitement puis "recompilées" ensuite. ;; "décompile" une liste de paires pointées en un liste unique ;; (pairs2lst '((1 . 5) (8 . 10) (16 . 16))) -> (1 2 3 4 5 8 9 10 16) (defun pairs2lst (l / a b r) (foreach p l (setq a (car p) b (cdr p) ) (while ( (setq r (cons a r) a (1+ a) ) ) ) (reverse r) ) ;; "compile" une liste en liste de paires pointées ;;; (lst2pairs '(1 2 3 4 5 8 9 10 16)) -> ((1 . 5) (8 . 10) (16 . 16)) (defun lst2pairs (l / a b r) (setq a (car l) b a l (cdr l) ) (while a (if (= (car l) (1+ b)) (setq b (car l)) (setq r (cons (cons a b) r) a (car l) b a ) ) (setq l (cdr l)) ) (reverse r) ) (defun union (l1 l2) (lst2pairs (vl-sort (append (pairs2lst l1) (pairs2lst l2) ) ' ) ) ) (defun intersection (l1 l2) (lst2pairs (vl-remove-if-not (function (lambda (x) (member x (pairs2lst l2)) ) ) (pairs2lst l1) ) ) ) (defun subtraction (l1 l2) (lst2pairs (vl-remove-if (function (lambda (x) (member x (pairs2lst l2)) ) ) (pairs2lst l1) ) ) )
