kalos
Membres-
Compteur de contenus
38 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par kalos
-
ma question est simple: compter les blocs (par le nom ou pas) selon un contour polyligne que je pourrai selectionner (et non tracé au fur et à mesure). est ce qu'il y a une commande autocad existante? un script, un lisp? vu que je dois le faire assez souvent, ca pourrait prendre 2sec au lieu de 5min.
-
Bonjour, j'ai une erreure: attout.lsp correctement chargé(s) Commande: ; erreur: no function definition: ACET-AUTOLOAD2 Bien à vous,
-
bon c'est pas grave mais la bidouille a bien fonctionné et j'avai juste besoin de mettre le poitn d'insertion XY en liste c'est à dire pntXY (defun c:attrot () (setq sset (ssget "X" '((0 . "INSERT") (8 . "moncalqueabloc")))) (if sset (progn (setq i 0 l (sslength sset) ) (while (< i l) (setq name (ssname sset i) loop T) (while loop (setq name (entnext name) entDef (entget name) ) (if (and (= (cdr (assoc 0 entDef)) "ATTRIB") (= (cdr (assoc 2 entDef)) "ROTATION")) (setq rot_att (atof (cdr (assoc 1 entDef))) loop nil) ) (if (= (cdr (assoc 0 entDef)) "SEQEND") (setq loop nil)) ) (setq pnt (cdr (assoc 10 entDef))) (setq pntX (atof (vl-princ-to-string (rtos (car pnt) 2 4)))) (setq pntX (+ pntX 0.8704)) ;bidouille decalage X (setq pntY (atof (vl-princ-to-string (rtos (cadr pnt) 2 4)))) (setq pntY (+ pntY 7.444)) ;bidouille decalage Y (setq pntXY (list pntX pntY)) ;création point d'insertion (command "_.ROTATE" name "" pntXY rot_att) (setq i (1+ i)) ) (prompt "\nRotation des blocs terminés.") ) ) (princ) )
-
à chaque fois que je dois faire une recherche c fastidieux puisque je dois le faire en sens inverse, je voulai trouver une autre maniere s'il y a.
-
ca me donne la meme chose. mais bon j'arrive à bidouiller pour retrouver le bon résultat. J'ai mon pntX et pntY, sous quelle forme je dois intégrer ces coordonnées dans pnt? c'est à dire pntX,pntY dans mon exemple. comment concatener des réels (pntX pntY) avec un caractere (",") ca me serait bien utile pour d'autres choses d'ailleurs quand on me demande une position X,Y (ici pas besoin de Z) (command "_.ROTATE" name "" pnt rot_att) merci d'avance, si ce point ci est enfin résolu, ca me sauverait la vie!
-
bon, je me suis pas pris la tete, j'ai pris la différence du X et Y et je m'en sers comme point d'insertion par la suite pour effectuer mes rotations. (setq pntX (atof (vl-princ-to-string (rtos (car pnt) 2 4)))) (setq pntX (+ pntX 0.8704)) (setq pntY (atof (vl-princ-to-string (rtos (cadr pnt) 2 4)))) (setq pntY (+ pntY 7.444)) (prompt (strcat "point d'insertion_" (rtos i) " : " (rtos pntX) "," (rtos pntY) ",0\n"))
-
Merci pour ta réponse. du coup avec: (prompt (strcat "point d'insertion_" (rtos i) " : " (vl-princ-to-string (rtos (car pnt) 2 4)) "," (vl-princ-to-string (rtos (cadr pnt) 2 4)) ",0\n")) j'obtiens: point d'insertion_0 : 305394.3731,2253291.992,0 on est loin des 305495.2435 2253299.4364 0.0 dans l'éditeur de bloc j'ai bien mon objet à 0,0,0 assoc 10 récupere bien les positions X,Y de géométrie du bloc? dans mon cas pas du tout. je dois redéfinir le point d'insertion de mon bloc! comment dois je faire sans perdre les données de mon bloc et sa position?
-
j'ai besoin pour un programme de récupérer le point d'insertion du bloc (setq pnt (cdr (assoc 10 entDef))) cela me renvoit pour pnt: (305494.0 2.25329e+006 0.0) alors que la coordonnée du bloc est: (305495.2435 2253299.4364 0.0) cela ne correspond pas! ou à peu de choses prés, je ne comprends pas...
-
la commande ATTECRAN et ATTMODE me permet en effet d'activer la visibilité de ceux-ci, je connaissai ces commandes mais elles ne permettent pas de faire une recherche et de zoomer sur le bloc en question.
-
comment chercher un attribut qui est en mode invisible? la fonction _find ne permettant pas de zoomer sur les attributs invisible trouvés, une astuce? à moins de faire un lisp me permettant de rendre visible/invisible ces attributs, je ne vois pas comment chercher ces attributs simplement. Merci à vous et Bon week-end à tous!
-
GRIPS et GRIPOBJLIMIT ne changent rien. J'ai enfin trouvé ce qui n'allait pas, au lieu de (ssget ":E"), j'ai utilisé (ssget "_I"), le cumul marche bien et me redonne la selection correctement. I Implied selection (objects selected while PICKFIRST is in effect). plus besoin de (sssetfirst nil sset)
-
oui ça je l'avais compris, je sais que "sset" est une variable local et que en dehors de la fonction, c'est inutile. que j'utilise: (sssetfirst nil (ssget "_P")) ou (sssetfirst nil sset) dans ma fonction cela revient au même, je n'ai pas les poignées. en tous cas elles ne sont pas visibles, que dois je faire pour que le gripset J'ai constaté que le regen me les ressuscites mais c'est un peu lourd comme manipulation. pourquoi mes grip handles sont off ? mon pickset (sset) est défini.
-
oui ca fonctionne apparemment! Toutefois les poignées ne sont visibles qu'aprés avoir retirer/ajouter un bloc de la selection.
-
j'ai du mal à comprendre la subtilité du lisp encore...je sais que mon jeu de selection se trouve dans SSET, ce que je ne comprends pas c'est pourquoi ma routine lisp ne me redonne pas la main sur le jeu de selection. Je ne comprends pas ce que tu veux dire par refaire une boucle, pourquoi faire?
-
Ca me renvoie cela en ligne de commande mais ne fait rien, je voudrai un trucs du genre (command select "p") mais ca ne me donne pas la main. ou peux on m'expliquer autrement.
-
je précise que le probleme ne pose pas avec (ssget "_P") sélection précédente
-
comment récupérer le jeu de selection sur lequel on a travaillé dans un lisp? exemple: (defun c:attsum (/ sset sum i l name entDef) (setq sset (ssget ":E") ; Everything in Aperture sum 0 ) (if sset (progn (setq i 0 l (sslength sset) ) (while (< i l) (setq name (ssname sset i) loop T ) ;; Boucle sur les attributs (while loop (setq name (entnext name) entDef (entget name) ) (if (and (= (cdr (assoc 0 entDef)) "ATTRIB") (= (cdr (assoc 2 entDef)) "VALEUR BLOC") ) ;; On a trouvé l'attribut d'étiquette VALEUR BLOC (setq sum (+ sum (atof (cdr (assoc 1 entDef)))) loop nil ) ) (if (= (cdr (assoc 0 entDef)) "SEQEND") (setq loop nil) ) ; Fin de séquence, on termine la boucle ) ;; Passe à l'insertion de bloc suivante (setq i (1+ i)) ) (prompt (strcat "Somme : " (rtos sum))) ) ) (princ) ) le lisp marche bien sauf que j'aimerai récupérer la selection de départ et la commande autocad 'select p' ne me redonne pas la main pour passer d'autres commandes.
-
Ma question est la suivante: J'effectue une petite routine lisp sur des blocs selectionnés auparavant. comment récupérer le jeu de sélection précédent sachant que le 'select P' ne peux me redonner la main en ligne de commande? Je ne sais pas comment revenir à la situation de départ c'est à dire avec mes blocs sélectionnés pour pouvoir en ajouter/supprimer par derriere des blocs et repasser la moulinette. Merci d'avance, KaLoS
-
bon, ceci étant dit, je vais me contenter des accrochages nodal le reste que je ne veux accrocher étant des polylignes c'est la solution la plus simple pour moi. mon interet est en effet de passer par les points d'insertions des objets.
-
je ne sais pas si la question existe et la réponse est peux être très simple, elle est la suivante: comment ne s'accrocher qu'à certains calques tout en les gardant visibles. est il possible de filtrer les calques aux accrochages? est il possible de filtrer les polylignes? Merci d'avance.
-
je pense qu'un simple gestattb suffirait pour changer le nom de l'étiquette, on ne perds pas les valeurs!
-
je pensai que ca aurait été plus simple...
-
ceci pourrait m'aider: (defun c:BlockRot ( / SelSet Counter EntName Obj ) (princ "Command: Rotate selected Blocks 180 degrees " ) (if (setq SelSet (ssget '((0 . "INSERT" ))) ) (progn (setq Counter 0 ) (vl-load-com) (while (setq EntName (ssname SelSet Counter )) (setq Obj (vlax-ename->vla-Object EntName ) ) (vlax-put-property Obj "Rotation" (+ (vlax-get Obj "Rotation" ) pi ) ) (vlax-release-Object Obj ) (setq Counter (1+ Counter ) ) ) ) (princ ". . no Block selected ! " ) ) (princ) )
-
ah non je ne veux pas modifier l'attribut mais la propriété rotation avec la valeur qu est dans l'attribut
-
quel est l'équivalent de trans pour faire une rotation? ce code 50 est entré à quel niveau? voici ma maquette qui ne marche pas puisque adapter à partir de MPT est ce que strcase (* (/ pi 180) Eti_rotation) fonctionne? Merci. (defun c:Attrot(/ bl js n rotation Nom_bloc Eti_rotation) (setq js (ssget "_p")) (setq Nom_bloc "Nom_bloc" Eti_rotation "ROTATION" pi "3,1415926535897932384626433832795" ) (if js (progn (setq n 0) (while (ssname js n) (setq bl (entget (ssname js n))) (if (and (eq (cdr (assoc 0 bl)) "INSERT") (eq (strcase (cdr (assoc 2 bl))) (strcase Nom_bloc))) (if (cdr (assoc 66 bl)) (progn (setq rotation (trans (cdr (assoc 50 bl)) (cdr (assoc -1 bl)) 1)) (while (not (eq (cdr (assoc 0 bl)) "SEQEND")) (if (eq (cdr (assoc 0 bl)) "ATTRIB") (cond ((eq (strcase (cdr (assoc 2 bl))) (strcase (* (/ pi 180) Eti_rotation)) (setq bl (subst (cons 1 (rtos (car rotation))) (assoc 1 bl) bl)) (entmod bl) (entupd (cdr (assoc -1 bl))) ) ) ) (setq bl (entget (entnext (cdr (assoc -1 bl))))) ) ) ) ) (setq n (1+ n)) ) ) ) (princ) )
