-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Dans ce vieux SUJET Un code dont la partie finale pourrait peut être t'intéresser. Il permet d'inverser les objets sélectionnés par un simple click. A mettre au goût du jour... pour ton besoin. Sorti du contexte du code, en considérant "ss1" comme la sélection originale de départ (setq l_ent (if ss1 (ssnamex ss1)) js_all (ssget "_X") ) (foreach n l_ent (if (eq (type (cadr n)) 'ENAME) (setq ss2 (ssdel (cadr n) js_all)))) (if (and ss1 ss2 (= 0 (getvar "CMDACTIVE"))) (progn (princ "\n pour inverser la sélection; /[Espace]/Click+droit pour finir!.") (while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25)) (sssetfirst nil ss1) (cond ((eq (car key) 3) (setq tmp ss1 ss1 ss2 ss2 tmp) ) ) ) ) )
-
Bonjour Karask, Normalement j'ai testé cette routine sous 2005 et Windows XP Pro. Donc comme tu es sous la même version, tu devrais arriver à la faire fonctionner. T'assurer en 1er lieu que le fichier que "trinod.lsp" et "triangle.exe" soient accessibles, c'est à dire placés dans un dossier de recherche d'Autocad. Il faut impérativement que tu ais des "POINT" en 3D (pas d'insertion de bloc), un liste sur un de ceux-ci doit te retourner un objet point avec ses coordonnées 3D. Des points contenus dans un Xref ne feront pas l'affaire. Si tout cela est réuni, la routine de demandera de sélectionner les points à traiter, puis les 3Dpoly (optionnel) qui sont susceptible de servir de ligne pour appuyer les côtés des 3dfaces (lignes de rupture de pentes) La routine s'occupe de générer et de soumettre les fichiers nécessaires à TRIANGLE pour produire les (.nod, .pol, .ele etc...) et à la fin de la procédure, elle les supprime. NB: Je déconseille l'option de générer les solides. Ou du moins si elle ne fonctionne pas refaire l'essai soit avec des 3dfaces, soit avec une pMaille. J'espère que tu t'en sortira, car autrement il faudra que tu attende la fin de mes congés, ou que tu trouves une autre solution.
-
Un p\'tit challenge d\'été !?
bonuscad a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Bravo pour ta résolution dans les segments courbes, je n'y étais pas encore parvenu. Pour l'instant je te laisse jouer seul, car je déconnecte un peu pour mes congés... Mais je ne laisse pas tomber, je regarderais ça plus tard, il y aura peut être d'ici là d'autres propositions intéressantes. NB: Ta première proposition modifié n'accepte pas la validation de (1/3) depuis la souris (division par zéro), seulement au clavier par un "Entrée". Un détail .... ;) -
Erreurs dans les pages de CadXp
bonuscad a répondu à un(e) sujet de bonuscad dans CADxp, comment ça marche?
Heu je veux bien croire, ce que tu dis, mais j'ai ce style d'erreur que sur CadXp, pas sur d'autre forum Php Mais bon cela fonctionne quand même Voir http://img457.imageshack.us/img457/8379/errorcadxpjm0.png Shot at 2007-07-20 copie des erreurs: urchinTracker is not defined http://www.cadxp.com/modules.php?op=modload&name=XForum&file=post.edit&fid=5&tid=16168&pid=64557 Line 33 doc has no properties http://www.cadxp.com/modules.php?op=modload&name=XForum&file=post.edit&fid=5&tid=16168&pid=64557 Line 122 event is not defined http://www.cadxp.com/modules.php?op=modload&name=XForum&file=post.edit&fid=5&tid=16168&pid=64557 Line 87[Edité le 20/7/2007 par bonuscad] par exemple sur Cadxp.info , ton nouveau site Anglais, aucune erreur, donc à priori le php n'est pas vraiment la cause... [Edité le 20/7/2007 par bonuscad] -
J'ai installé "FireBug" (addon pour firefox), et j'ai plein d'erreurs d'erreurs décelées sous les pages de CadXp (jusqu'à 6 erreurs suivant les pages) Est ce que ceci n'entraine pas un ralentissement de l'affichage des pages, qui il faut le dire n'est pas toujours des plus rapide... :mad2:
-
Ben a part faire ceci, je ne vois pas! :calim: (while (grread nil 4 1))
-
Texte dans textmult non visible Autocad 2000
bonuscad a répondu à un(e) sujet de l² dans AutoCAD 2000 à 2002
Essayes dans "Propriétés d'affichage", onglet "Apparence", bouton "Effets..." et essayes en cochant/décochant l'option: "Utiliser la méthode suivante pour lisser les bords des polices écran:" NB: Si tu as un portable ou un écran plat, la méthode "ClearType" améliore beaucoup les contours des polices. En espérant que cela résolve ton problème. -
Texte dans textmult non visible Autocad 2000
bonuscad a répondu à un(e) sujet de l² dans AutoCAD 2000 à 2002
Je sais qu'il y a eu un post à ce sujet, mais impossible de le retrouver... Je crois me souvenir que cela est lié à la configuration de Window et non d'Autocad. Si mes souvenirs sont exacts, je crois que si l'option de lissage des polices est activé, dans la fenêtre d'édition les caractères sont à peine visible. Essayes donc de voir dans les paramètres d'affichage de windows, voir si cela change quelque chose. -
Bonjour, La fonction "rechercher" texte dans le menu édition, permet de rechercher un texte dans le dessin. La boite de dialogue contient un bouton "zoom" qui t'amène sur le texte trouvé dans le dessin.
-
Un truc très ancien que j'avais réalisé, si ça peut te servir comme base... Il est à remanier, par exemple les LWPOLYLINE ne sont pas prises en compte. Les résultats sont à vérifier, je n'ai jamais repris ce code car la commande "FLATTEN" des express répond a ce genre de souhait (defun mdf_10 (lst cod / nw_pt) (setq nw_pt (trans (cdr (assoc cod lst)) (cdar lst) 0)) (subst (cons cod (list (car nw_pt) (cadr nw_pt) 0.0)) (assoc cod lst) lst ) ) (defun mdf_210 (lst / ) (subst '(210 0.0 0.0 1.0) (assoc 210 lst) lst ) ) (defun chg_lst (dx_lst dx_cod / ) (while dx_cod (cond ((eq (car dx_cod) 10) (setq dx_lst (mdf_10 dx_lst 10)) ) ((eq (car dx_cod) 11) (setq dx_lst (mdf_10 dx_lst 11)) ) ((eq (car dx_cod) 12) (setq dx_lst (mdf_10 dx_lst 12)) ) ((eq (car dx_cod) 13) (setq dx_lst (mdf_10 dx_lst 13)) ) ((eq (car dx_cod) 210) (setq dx_lst (mdf_210 dx_lst)) ) ) (setq dx_cod (cdr dx_cod)) ) (entmod dx_lst) ) (defun id_ent (name / ) (setq dxflst (entget name)) (setq dxfnam (cdr (assoc 0 dxflst))) (cond ((eq dxfnam "LINE") (chg_lst dxflst '(10 11 210)) ) ((or (eq dxfnam "POINT") (eq dxfnam "CIRCLE") (eq dxfnam "ARC") (eq dxfnam "ATTDEF") (eq dxfnam "SHAPE") ) (chg_lst dxflst '(10 210)) ) ((eq dxfnam "TEXT") (if (assoc 11 dxflst) (chg_lst dxflst '(10 11 210)) (chg_lst dxflst '(10 210)) ) ) ((or (eq dxfnam "TRACE") (eq dxfnam "SOLID") (eq dxfnam "3DFACE") ) (chg_lst dxflst '(10 11 12 13 210)) ) ((eq dxfnam "POLYLINE") (setq s_lst (entget (entnext (cdar dxflst)))) (while (/= (cdr (assoc 0 s_lst)) "SEQEND") (chg_lst s_lst '(10)) (setq s_lst (entget (entnext (cdar s_lst)))) ) (setq dxflst (subst '(10 0.0 0.0 0.0) (assoc 10 dxflst) dxflst)) (entmod dxflst) (chg_lst dxflst '(210)) (entupd (cdar dxflst)) ) ((eq dxfnam "INSERT") (cond ((and (assoc 66 dxflst) (not (zerop (cdr (assoc 66 dxflst))))) (setq s_lst (entget (entnext (cdar dxflst)))) (while (= (cdr (assoc 0 s_lst)) "ATTRIB") (if (assoc 11 s_lst) (chg_lst s_lst '(10 11 210)) (chg_lst s_lst '(10 210)) ) (setq s_lst (entget (entnext (cdar s_lst)))) ) ) ) (chg_lst dxflst '(10 210)) (entupd (cdar dxflst)) ) ((eq dxfnam "VIEWPORT") (prompt "\nNe peut modifier une entitée fenêtre, valeurs inchangées.") ) ((eq dxfnam "DIMENSION") ) ) ) (defun c:3DTO2D () (setq ind 0) (setq js (ssget)) (repeat (sslength js) (setq n_ent (ssname js ind)) (setq ind (1+ ind)) (if (= ind 32768) (setq ind (float ind)) ) (id_ent n_ent) ) (prin1) )
-
Je confirme, existe bien en V2000 ET fonctionne en 3D malgré que la commande se nomme simplement "_align"
-
Bonjours à tous. Je voulais réaliser un lisp un petit peu "fun", mais qui pourrais être aussi utile. (une sorte de type de ligne, mais invariable) J'ai déjà commencé aujourd'hui et suis arrivé à un certain résultat. Le mieux est de l'essayer pour vous rendre compte de ce que je veux faire. (appliquez le sur un rectangle) J'en profite donc pour lancer un challenge (d'été), afin de l'améliorer et avoir un résultat correct pour toutes les LwPolylignes (arc). Au départ je voulais pouvoir l'appliquer à tout les objets curvilignes, mais ça complique pas mal les choses. Je pense que la partie (entmake) n'as pas besoin d'être reprise (sous réserve...) C'est plutôt la liste l_42, que je réserve pour la suite pour essayer de mettre le motif courbé. Celui-ci est pour l'instant traitée en segment droit. Le motif pourra être changé, on peut envisager un traitement de motif différent (losange, croix, insertion de segment non épais...) Mais déjà pour la mise au point, on peut garder ce motif. Donc pour ceux que l'idée interresse, les propositions sont attendues...et j'expliquerais les variables employées si vous ne comprenez pas à quoi elles servent. NB: Les points d'appuis originaux doivent êtres conservés. (defun c:lw2motif ( / ent obj_valx dxf_obj pt_first ep_lw d_inc pt_snd nb_vtx count l_pt lg_inc start_ep end_ep delta lg_vtx l_40 l_41 l_42) (vl-load-com) (while (not (setq ent (entsel "\nSelectionner un objet: ")))) (setq obj_vlax (vlax-ename->vla-object (car ent)) dxf_obj (entget (car ent))) (cond ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq pt_first (vlax-curve-getStartPoint obj_vlax)) (initget 71) (setq ep_lw (getdist pt_first "\nEpaisseur du symbole: ")) (initget 71) (setq d_inc (getdist pt_first "\nLongueur du symbole: ")) (setq pt_snd (vlax-curve-getPointAtParam obj_vlax 1) nb_vtx (fix (vlax-curve-getEndParam obj_vlax)) count 0 l_pt (list (cons 10 pt_first)) l_40 (list (cons 40 ep_lw)) l_41 (list (cons 41 0.0)) ; l_42 (list (cons 42 (vlax-invoke obj_vlax 'GetBulge count))) l_42 (list (cons 42 0.0)) lg_inc 0.0 start_ep ep_lw end_ep 0.0 delta 0.0 ) (repeat nb_vtx (setq lg_inc (vlax-curve-getDistAtParam obj_vlax count) lg_vtx (vlax-curve-getDistAtParam obj_vlax (1+ count)) ) (while (< (+ lg_inc d_inc) lg_vtx) (if (< (+ lg_inc d_inc) lg_vtx) (setq start_ep (if (zerop delta) ep_lw end_ep) end_ep 0.0 delta 0.0 ) (setq start_ep ep_lw delta (- lg_vtx lg_inc) end_ep (* (/ ep_lw d_inc) delta) ) ) (setq l_pt (cons (cons 10 (vlax-curve-getPointAtDist obj_vlax (setq lg_inc (+ lg_inc d_inc)))) l_pt) l_40 (cons (cons 40 start_ep) l_40) l_41 (cons (cons 41 end_ep) l_41) ; l_42 (cons (cons 42 (vlax-invoke obj_vlax 'GetBulge count)) l_42) l_42 (cons (cons 42 0.0 )l_42) ) ) (setq count (1+ count) pt_first (vlax-curve-getPointAtParam obj_vlax count) pt_snd (vlax-curve-getPointAtParam obj_vlax (1+ count)) l_pt (cons (cons 10 pt_first) l_pt) l_40 (cons (cons 40 start_ep) l_40) l_41 (cons (cons 41 end_ep) l_41) ; l_42 (cons (cons 42 (vlax-invoke obj_vlax 'GetBulge count)) l_42) l_42 (cons (cons 42 0.0 )l_42) ) ) (setq l_pt (reverse l_pt) l_40 (reverse l_40) l_41 (reverse l_41) l_42 (reverse l_42) ) (entmake (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (assoc 8 dxf_obj) (if (assoc 62 dxf_obj) (assoc 62 dxf_obj) (cons 62 256)) (if (assoc 6 dxf_obj) (assoc 6 dxf_obj) (cons 6 "BYLAYER")) (if (assoc 370 dxf_obj) (assoc 370 dxf_obj) (cons 370 -1)) (cons 100 "AcDbPolyline") (cons 90 (length l_pt)) (cons 70 (if (zerop (boole 1 (rem (cdr (assoc 70 dxf_obj)) 128) 1)) (boole 1 (cdr (assoc 70 dxf_obj)) 128) (1+ (boole 1 (cdr (assoc 70 dxf_obj)) 128)) ) ) (cons 38 (if (assoc 38 dxf_obj) (cdr (assoc 38 dxf_obj)) 0.0)) (cons 39 (if (assoc 39 dxf_obj) (cdr (assoc 39 dxf_obj)) 0.0)) ) (apply 'append (mapcar '(lambda (x10 x40 x41 x42) (append (list x10 x40 x41 x42)) ) l_pt l_40 l_41 l_42 ) ) (list (assoc 210 dxf_obj)) ) ) ) (T (princ "\nN'est pas une polyligne optimisée!") ) ) (princ) )
-
Je dirais déjà d'inactiver les calques inutiles pour la recherche du contour. Quand les objets sont nombreux, il vaut mieux faire une présélection grossière des objets susceptible de constituer ton contour avant de choisir ton point interne, par défaut ce sont tout les objet présent à l'écran qui sont pris en considération. Cela évite à autocad "d'éplucher" tout les objets pour constituer un nouveau contour (ce qui peut être long et gourmand en ressource). Bien cibler le zoom aussi pour englober toute la surface a hachurer. Et enfin, si tu as des coordonnées élevées (style X= 125645.36 Y=954369.48), fais un scu origine dans le milieu de ta zone avant de hachurer (ça donnera plus de précision pour le calcul du contour) et évitera un message du style "le point est hors du contour". Malgré tout ces conseils, il se peut que tu ais encore du mal à faire tes zone de hachure :(
-
J\'écris mon premier lisp : à l\'aide !!!
bonuscad a répondu à un(e) sujet de brunomu dans AutoCAD 2004
Il s'utilise avec les fonction (get....) getpoint getcorner getkword getdist etc.... SAUF (getstring) En fait il arme un bit de controle (qui peuvent s'additionner), ici 1 interdit une entrée vide/nulle. Ainsi si l'utilisateur fait une erreur de saisie (une validation sans fournir le point), l'entrée est répétée jusqu'à qu'elle soit valide. Si je n'avais pas fais ceci, une entré nulle aurait affectée la variable par exemple p1 à nil et bien sur la suite de la procédure aurait avorté car un (car p1) aurait été invalide. (initget) est a renouveler a chaque utilisation de (get....), mais dans l'aide autolisp tu auras plus d'info. D'autre part, remarque aussi que j'ai utilisé l'option "_none" ("aucun") pour être sur que le point calculé ne s'accroche par inadvertance à un objet, ce qui aurait faussé le résultat si un accroche objet avait été actif. On aurait pu aussi utiliser la variable "OSMODE". -
J\'écris mon premier lisp : à l\'aide !!!
bonuscad a répondu à un(e) sujet de brunomu dans AutoCAD 2004
Ce n'est pas plutôt ceci que tu voudrais réaliser: (defun c:uz ( / p1 alt) (initget 1) (setq p1 (getpoint "\nPOINT DE REFERENCE ? : ")) (initget 1) (setq alt (getreal "n\n\ALTIMETRIE EN Z ?")) (command "_.ucs" "_new" "_origin" "_none" (list (car p1) (- (cadr p1) alt) (caddr p1))) (prin1) ) -
Peut être que beaucoup d'entre vous le connaisse, mais moi je viens de le découvrir. Hé bien, je suis "bluffé", malgré sa présentation rustique, il est incroyable, il lit tout et n'importe quoi, très complet en quelque sorte (et il ne prends qu'une trentaine de Mo installé) Du coup j'ai viré tout mes lecteurs exotiques et leur codecs (tout aussi exotiques) associés et ne me sert essentiellement que de lui. Je l'ai installé sur différentes machines et il a fonctionné à chaque fois. Cela va d'une machine ancienne avec chipset graphique intégré (Celeron avec Win Me) sur laquelle je n'arrivais rien à lire, jusqu'à une super bécanne (monté en RAID avec XP pro) Je l'ai même installé sur des machine en n'ayant pas les droits administrateur, et cela fonctionne. Cerise sur le gâteau si votre FAI est Free ou Neuf, (même en dégroupé partiel), vous aurez même les chaines de télévision (sauf TF1 et M6) par adsl en qualité tout à fait correct (bouffe a peu près 350Ko de bande passante), on peut en avoir aussi quelques TV et RADIO par défaut sans être chez ces FAI (beaucoup de chaine étrangère et des fois assez pixélisé) Bref, si ça vous tente de le découvrir, c'est ici -> VideoLan PS: L'interface peut être skinable, on peut même reprendre des Skin de WinAmp (pour les accrocs du skin)
-
Bug de concentricité lors d\'un zoom?
bonuscad a répondu à un(e) sujet de Goldorak dans AutoCAD 2007
Je ne sais pas si c'est encore d'actualité sous 2007, mais il y a aussi la variable "WHIPARC" Personnellement je laisse la valeur par défaut (0), car je sais que de la passer à (1) est très consommateur de mémoire graphique et atténue les performances graphiques. Mais elle évite (atténue) ce phénomène de décalage lors des zooms -
Je dirais que pour faire une TRONCATURE et non un arrondi, ta méthode est la bonne, je n'en connais pas d'autre en lisp. Le seul truc que tu peux faire est de définir une fonction par ex: (defun troncat (val nbr-dec / ) (cond ((and (numberp val) (numberp nbr-dec)) (print) (* (fix (* val nbr-dec)) (/ 1 nbr-dec)) ) (T (princ "\nArguments doivent être des nombres\n") nil ) ) ) Et dans ton code utiliser par exemple (setq valeur_tronque (troncat (getdist) 1E04))
-
Non, non tu ne fais rien de spécial, Si le lisp est chargé en mémoire, tu fais ces commandes directement en ligne de commande AVANT de lancer le lisp qui pose problème. Si dans la même session tu veux arrêter le traçage d'une fonction tu fais (untrace nom_de_la_fonction) En fait cela sert surtout pour la mise au point de lisp, comme ici ;) Pour un debug plus efficace (vu que l'editeur vlisp n'est pas disponible sous LT), il peut être intéressant de mettre les variable en remarque. Exemple (defun ma_fonction (arg1 arg2 arg3 .... / var1 var2 var3 ....) à modifier temporairement en: (defun ma_fonction (arg1 arg2 arg3 .... / ) ;;; var1 var2 var3 ....) En faisant ceci tu pourra interroger les variables en ligne de commande en faisant: !var1 Ceci te retournera la valeur de var1 si la valeur retournée est nil , il y a de forte chance pour que le programme ce soit crashé avant son calcul, donc il plus facile d'identifier l'endroit dans le code ou cela pêche... Voilà pour un succin cours de débugage de façon manuel, je ne sais pas si LT-Extender offre des outils qui aident à faire ceci ?!?!
-
En version pleine, il y a 2 type de fenêtre: La 1ère, le type classique (valable sous version pleine et LT) qui est de type rectangulaire. La 2ème qui est de type polygonale (non disponible sous LT) qui est de forme quelconque (constitué de 3 a n segments droit). Pour la 1ère, tu ne peux changer que les dimensions (de manière homogène) de largeur hauteur, même avec les grips. Pour la 2ème, les sommets sont manipulables indépendamment les uns des autres. Il est possible de récupérer les secondes sous une version LT à partir d'un dessin créer sous une version pleine par un copier-coller. Faire une recherche sur le forum, le sujet à été déjà traité. Il est même possible que RebCao est fourni des gabarits de ce type de fichier.
-
Tu as une parenthèse en trop à l'avant dernière ligne (setvar "osmode" os_courant) ) et pour finir proprement sans écho tu peux rajouter un (prin1) après ta ligne (alert "blabla")
-
Pour changer de fenêtre, surtout quand elles sont imbriquées, utilise "CTRL+R"
-
Ben j'ai pu trop d'idée pour identifier le problème. Il te faut utiliser la fonction (trace) pour les sous-routines et faire un pas à pas pour la fonction principale pour essayer de trouver le bug (trace def_bub_pl) (trace buble_pts) (trace make_fence) et tu lance la fonction evider. Si toutes les (trace) effectuées se passent bien c'est que le bug est dans la fonction principale. Bien sur, si tu veux donner suite, car là ça demande un peu plus de temps.... pour identifier le bug
-
Je connais pas LT-Extender, mais d'après ce qu'il a pu ce dire dans le forum, c'est qu'il ne connait pas les fonction (vl-, vla- et vlax-) Or dans ce lisp j'utilise juste la fonction (vl-remove-if Pourrais tu essayer cette ligne de code en test sur une LWPOLYLINE Si elle ne possède pas d'arc, tu devrais avoir en retour une liste de zéro (0.0 0.0 0.0 ....) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) (entget (car (entsel))))) Si ça ne fonctionne pas il faudra réécrire cette fonction en lisp pur (Gille la peut être déjà fait pour cette fonction)
-
Je n'ai pas affirmé qu'il était incompatible, j'ai juste fait une supposition... Un truc que je n'ai pas pensé à dire et que pour que la 1ere ligne fonctionne (arxload "...arx") il FAUT que l'arx à charger soit dans un dossier de recherche connu d'autocad. Donc soit déplacer l'arx dans le dossier voulu, ou rajouter un nouveau dossier de recherche. Désolé pour l'oubli...
