-
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
-
Salut Gilles, Un oublli de paranthèse s'est glissé dans ton code. (repeat (- (setq n (length lst) 1) devrait être (repeat (- (setq n (length lst)) 1) Sur des blocs je n'ai pas eu de résultats, mais ça ne "plante pas" ;) Tester rapidement sur des "figures bateaux" et ça a fonctionné. :)
-
C'est simplement un jeu de sélection qui est créé. Si tu fais par exemple APRES l'appui sur ton bouton: "Effacer" choix des objet "Précédent", c'est ce jeux de sélection qui sera retourné. Ou tu peut faire la commande d'abord puis au message choix des objets, appuyer sur ton bouton et valider par entrée ta sélection
-
Il ya aussi cette Discussion
-
donc pour du rouge (cons 62 1)
-
Erreur: type d\'argument incorrect
bonuscad a répondu à un(e) sujet de MiniMinus dans Débuter en LISP
L'astuce pour pouvoir obtenir une valeur via (getpoint) (getdist) (getangle).... et de mettre sa boite en boucle pour recharger sa boite avec la valeur mise à jour. exemple: (setq what_next 2) (while (< 1 what_next) (if (not (new_dialog "diamètre" dcl_id)) (exit)) (action_tile "pick_diam" "(done_dialog 2)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) (cond ((= what_next 2) (initget 1) (setq diam (getdist "\ndiametre")) ) ) (unload_dialog dcl_id) (cond ((not (zerop what_next)) ..... On continu Bien sur dans la boite de dialogue (dcl) il te faut un bouton associé à ta saisie graphique en plus de ta case de saisie numérique de diamètre. ici par exemple pick_diam -
Ha! Regarde aussi lea commande "_SHADEMODE" pour te mettre en mode ombrage 2D, en 3D l'aspect des lignes remplies semblent vides.
-
commande _FILL, ou variable FILLMODE
-
Tu pourrais essayer ceci, mais entendons nous bien, pour une couleur forcée verte (code 3) et NON du calque qui serait vert! Ce filtre, suivant ta position, te feras une séléction dans l'EO (onglet "Objet") ou dans l'EP dans ta presentation courante. Si dans une présentation du passe dans l'objet dans une fenêtre, cette sélection se fera dans l'EO. Ceci pour tous les objets de l'espace courant, qu'ils soient dans des calques gelés, inactifs ou verrouillés. (ssget "_X" (list (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons 62 3) ) )
-
En rapport avec le titre du sujet, il y avait eu cette discussion , cela pourra peut être te donner des idées! 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").
-
Je pense que ta variable "INSBASE" est à 0,0,0 dans ton fichier topo, mais doit être à une autre valeur dans ton fichier où tu veux l'inserer. Ce qui expliquerait ton problème!
-
inserer un texte de la boite de dial dans un dessin
bonuscad a répondu à un(e) sujet de couma-co dans Débuter en LISP
Bonjour, Mets simplement en remarques avec ";" (semi-colon) les lignes: ; (print cmpt) ; (princ (strcat unite " de Polyligne avec type de ligne " typ_l)) et rajoute juste à la suite (ou à la place) de ces lignes, les suivantes: (setvar "cmdecho" 1) (command "_.text" pause pause pause (strcat (itoa nbr) " Entité(s) " (cdr (assoc 0 typent)) " avec le type de ligne " typ_l " pour une longueur totale de " (rtos cmpt) unite) ) Je te laisse ajuster le texte à ta convenance s'il ne convient pas ;) -
Si vous utilisez "Total Commander" (Un explorateur de fichiers avec des fonctions puissantes) Un plug-in free téléchargeable à cette ADRESSE vous permettra d'avoir un visualisateur qui pour une utilisation personnelle offre des fonctionnalité déjà très interessantes (gestion des calques; actif/inactif liberer/geler imprimable/non-imprimable) et de bonne qualité. Pour ceux qui connaissent "XnView" à la même adresse des plugins qui d'après mes premiers tests permet d'avoir un apercu rapide (vignette) du contenu des fichiers issus de logiciel de dessins (DWG,DXF,HPGL)
-
Comme dis Gilles (initget 1) Ou si tu veux pouvoir valider une valeur proposée, n'utilise pas initget mais vérifie si l'entrée est nulle et si oui, affecte lui la valeur par défaut. L'exemple deviendrait ((lambda ( / pt rot) (setq pt (getpoint (strcat "\nPoint de départ <" (rtos (car (getvar "lastpoint"))) "," (rtos (cadr (getvar "lastpoint"))) "," (rtos (caddr (getvar "lastpoint"))) ">: "))) (if (null pt) (setq pt (getvar "lastpoint"))) (setq rot (getorient pt (strcat "\nOrientation du texte <" (angtos 0) ">: "))) (if (not rot) (setq rot 0.0)) ; valeur en radian et dans le sens trigo (command "_.text" "_none" pt 2.5 "_none" (polar pt rot 10) "C'est toujours dans le bon sens") )) Tu verras que si tu te met en grades dans le sens horaire et origine nord (topographique) la valeur proposée pour l'angle sera de 100gr
-
Essaye de remettre la variable SDI à 0 (elle doit être actuellemnt à 1)
-
En diesel ! ^C^CUSERS1;$M=$(getvar,CLAYER);_.-layer;_make;Surfaces;;_.-boundary;\;_.-layer;_set;$(getvar,USERS1);;^Z Par contre avec "*" devant ça boucle bien, mais le problème est que s'il l'on fait "Echap" pour sortir de la répétition, on ne se retrouve pas sur le calque d'origine. Normal car on "break" lors de la pause pour contour et la suite est abandonnée
-
En diesel impossible de boucler. Par contre pour une seule saisie c'est possible, et pour le calque on place la valeur de "CLAYER" dans "USERSx" pour la reprendre à la fin et restituer le calque. Donc pour une LT c'est faisable mais cela fera beaucoup de "clic" pour produire le même résultat qu'avec le lisp. Si on peut se servir du lisp, pourquoi s'en priver? C'est quand même plus souple et facile à mettre en place. Mais si un LTsien en a besoin en diesel, qu'il revienne à la charge ;)
-
Généralement on utilise le Diesel pour des versions LT (on peut aussi l'utiliser en version pleine, bien sur) Je vais donc supposer que tu es en version pleine ET que tu veux pouvoir utiliser contour en cliquant un point dans une zone. Ceci pour un nombre de fois indéterminé. Pour faire ceci, seul le lisp peut offrir une alternative pour relancer une commande après contour. Je te fais donc cette proposition (à coller dans ton bouton) ^C^C((lambda ( / actif_lay ) (setq actif_lay (getvar "clayer")) (command "_.-layer" "_make" "Surfaces" "") (command "_.-boundary" (while (not (zerop (getvar "cmdactive"))) (command pause))) (command "_.-layer" "_set" actif_lay ""))) NB: tout ceci sans retour de ligne qui pourrait s'inscruter (bien vérifier)
-
Traduction de VBA en Lisp ( ou de superficie à contenance) ?
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Je pense qu'on pourrait aussi s'aider de la fonction (cvunit), voir le fichier AutoCAD.UNT pour les conversion possible. Vite fait pour l'exemple, certainement à creuser: ((lambda ( / ) (setq l_s '(1 10 101 110 123456 123456789)) (foreach n l_s (print (strcat (itoa n) " m2= " (rtos (cvunit n "centare" "centare")) " ca")) (print (strcat (itoa n) " m2= " (rtos (cvunit n "centare" "are")) " a")) (print (strcat (itoa n) " m2= " (rtos (cvunit n "centare" "hectare")) " ha")) ) (prin1) )) -
En effet c'est la direction de la tangente qui est calculé au point de sélection, d'où l'importance de bien fixé son point de sélection par un accroche forcé. Pour autosnap, je ne savais pas qu'orthomode avait une influence :( Je suis pas un adepte de ce mode car je n'arrive que très rarement à satisfaire mon besoin avec ce mode, il y a toujours quelque chose qui fout en l'air ma manip de tracking.
-
tu copie-colle en ligne de commande (cela ne marche qu'une seule fois vu que c'est une fonction lambda, il faut recoller à chaque fois que tu veux essayer) Pour l'angle, soit tu rentres une valeur, soit tu pointes un point. Je n'ais pas fait de (initget) pour interdir des entrée nulle ou non valide, c'était juste un exemple ;)
-
Salut, Pour éviter d'avoir a me casser la tête avec les angles, j'utilise l'astuce suivante: Au lieu de fournir un angle numérique à la commande je fait pointer par la commande texte une direction par un point calculé en lisp par (polar), cela a l'avantage que la commande texte (ou autre) transcrit d'elle même en valeur convenable par rapport au système utilisé. Le calcul avec polar se fait toujours en radian dans le sens trigo Essayes les quelques lignes suivantes dans n'importe quel système, tu verras, ça baigne. ((lambda (/) (setq pt (getpoint "\nPoint de départ: ")) (setq rot (getorient pt "\nOrientation du texte :")) (command "_.text" "_none" pt 2.5 "_none" (polar pt rot 10) "C'est toujours dans le bon sens") ))
-
Bien qu'AutoDesk ait amélioré la fonction perpendiculaire a partir de (2004/2005?), cette fonction ne répond toujours pas à des besoins de base. Leur solution est certe très jolie (on se balade en dynamique de façon perpendiculaire) mais fixer un point de départ n'est pas si simple sans accrobaties. J'ai donc essayé de faire une fonction (le plus fiable possible) pour élever ces perpendiculaires. Je l'ai testé sur 2000-2002 et 2004. Voilà si ça peut vous aider dans vos contructions géométrique (elle fonctionne sur des ellipses, ce qui n'est pas le cas du mode standard) Conseil: pour les arrondis sélectionnez avec l'accroche objet désiré si vous voulez partir d'un point précis sur l'arc (defun elperr (ch) (cond ((or (eq ch "Function cancelled") (eq ch "Fonction annulée")) nil) ((or (eq ch "quit / exit abort") (eq ch "quitter / sortir abandon")) nil) ((or (eq ch "console break") (eq ch "Interruption de la console")) nil) (T (princ ch)) ) (setvar "cmdecho" 1) (setvar "osmode" old_osmd) (setvar "orthomode" old_orth) (setvar "snapang" old_snp) (setq *error* olderr) (princ) ) (defun elevperp ( / old_osmd old_snp ols_orth olderr ent dxf_210 obj_vlax pt_start param_pt dir_tg p_from) (vl-load-com) (setq old_osmd (getvar "osmode") old_snp (getvar "snapang") old_orth (getvar "orthomode")) (setvar "osmode" 0) (setvar "cmdecho" 0) (setq olderr *error* *error* elperr) (while (or (while (null (setq ent (entsel "\nElever une perpendiculaire à: ")))) (or (not (member (cdr (assoc 0 (entget (car ent)))) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "XLINE" "RAY" "ARC" "CIRCLE" "ELLIPSE") ) ) (if (and (eq (cdr (assoc 0 (entget (car ent)))) "POLYLINE") (assoc 70 (entget (car ent)))) (not (zerop (boole 1 (cdr (assoc 70 (entget (car ent)))) 120))) ) ) (and (assoc 210 (entget (car ent))) (not (equal (trans '(0 0 1) 1 0 T) (cdr (assoc 210 (entget (car ent)))) 1E-12))) ) (if (not (null ent)) (if (and (assoc 210 (entget (car ent))) (not (equal (trans '(0 0 1) 1 0 T) (cdr (assoc 210 (entget (car ent)))) 1E-12))) (princ "L'objet n'est pas parallèle au SCU.") (princ "1 a été filtré.") ) ) ) (cond (ent (setq obj_vlax (vlax-ename->vla-object (car ent))) (setq dxf_210 (cdr (assoc 210 (entget (car ent))))) (if (null dxf_210) (setq dxf_210 '(0.0 0.0 1.0))) (setq pt_start (vlax-curve-getClosestPointToProjection obj_vlax (trans (cadr ent) 1 0) dxf_210 T)) (if (null (setq param_pt (vlax-curve-getParamAtPoint obj_vlax pt_start))) (setq param_pt (vlax-curve-getParamAtPoint obj_vlax (list (car pt_start) (cadr pt_start) (caddr (cdr (assoc 10 (entget (car ent)))))))) ) (cond (param_pt (setq dir_tg (trans (vlax-curve-getFirstDeriv obj_vlax param_pt) 0 1 T)) (if (not (zerop (cadr dir_tg))) (setq dir_tg (- (/ pi 2) (atan (/ (car dir_tg) (cadr dir_tg))))) (setq dir_tg (/ pi 2)) ) (setvar "snapang" dir_tg) (setvar "orthomode" 1) (setvar "osmode" old_osmd) (if (null (setq p_from (getpoint "\nDu point : "))) (setq p_from (trans pt_start 0 1)) ) (setvar "osmode" 0) (initget 9) (setq p_to (getpoint p_from "\nJusqu'au point : ")) (command "_.line" p_from p_to "") ) (T (princ "\nImpossible de déterminer le point sur l'objet")) ) ) ) (setvar "osmode" old_osmd) (setvar "orthomode" old_orth) (setvar "snapang" old_snp) (setvar "cmdecho" 1) (setq *error* olderr) (prin1) ) (defun c:elp () (elevperp) ) (defun c:elevperp () (elevperp) ) (princ "\nElevperp charge tapez ELEVPERP ou ELP pour l'execution") (prin1)
-
Bonjour, Au lieu d'utiliser la commande "_imageattach" qui est un raccourci, utilise plutôt: (command "_.-image" "_attach" .......) PS: Après essai (car cela me parraisait pas possible de faire un cliché vec un BMP) cela fonctionne mais je pense que tu vas être déçu de la qualité du résultat [Edité le 12/6/2006 par bonuscad]
-
Lecrabe, si tu utilise FireFox, regardes ICI
-
Je penses qu'il faut installerun plug-in sous firefox Voir ici: http://plugindoc.mozdev.org/windows.html#Flash C'est un peu le même problème qu'avec les jeux swf proposé par Jalna en pause café.
