Aller au contenu

+ et - cotation ordonnée


ludo07

Messages recommandés

Bonjour.

Je fais appel a vos competences les lispeurs.

Depuis des années j'utilise les cotes ordonnées puis a chaque je l'édite pour ajouter le préfixe - ou +.

Alors oui je sais il y a la possibiliter des faire 2 style de cotations avec soit le prefixe - ou +.

Mais je me dit que cela peut etre possible par un petit programme lisp?

 

Une ame charitable pourrait eventuellement se pencher sur ce programme

Merki

Lien vers le commentaire
Partager sur d’autres sites

hello

j'ai une solution à 2 balles qui amrche bien : c'est lédition des cotes quand tu les crées

j'utilise pour ça le lisp suivant

(defun c:ni (/ p1)
(while
       (setq p1 (getpoint "\nCote niveau: "))
   (command "_DIMORDINATE" p1 pause)
 (command "_ddedit" "_l" "")
)
 (princ)
)

tu n'as qu'a taper la commander ni (comme niveau) et tu crées tes cotes puis tu les édites

ça peut t'aider...

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

(defun  c:Altcot (/ i ss ent dxoj dxf13 dxf70)
 (prompt"\nChoisissez des objets ou <tout> :")
(and (setq i    0 
            ss (cond 
                 ((ssget '((0 . "DIMENSION") (100 . "AcDbOrdinateDimension")))) 
                 ((ssget "x" '((0 . "DIMENSION") (100 . "AcDbOrdinateDimension")))) 
               ) 
      )    (while (setq ent (ssname ss i))
     (setq i     (1+ i)
    dxoj  (entget ent)
    dxf70 (cdr(assoc 70 dxoj))
    dxf13 (assoc 13 dxoj)
    )
     (if(minusp(if(zerop(boole 1 64 dxf70))(caddr dxf13)(cadr dxf13)))
(entmod (setq dxoj (subst (cons 1 "-<>") (assoc 1 dxoj) dxoj )))
(entmod (setq dxoj (subst (cons 1 "+<>") (assoc 1 dxoj) dxoj )))
)
     )
   (princ)
   )
 )

 

Une petite routine inspirée d'une plus récente ( B) ).

Lancer ALTCOT et pardonnez le "" qu'on ne voit que sur la ligne supérieure dans la fenêtre de commande.

Modifié par Tramber
Ajout du + !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour Tramber,

 

Sympa l’emploie de la fonction boole faudrait vraiment que je m’y intéresse plus à à l'avenir, sinon pour :

(prompt"\nChoisissez des objets ou <tout> :")
 (and
   (setq i  0
         ss (ssget '((0 . "DIMENSION")(100 . "AcDbOrdinateDimension")))
         ss (ssget "x" '((0 . "DIMENSION")(100 . "AcDbOrdinateDimension")))
         )

 

Tu ne souhaitais pas plutôt faire un truc dans le genre :

(and (setq i	0
     ss	(cond
	  ((ssget '((0 . "DIMENSION") (100 . "AcDbOrdinateDimension"))))
	  ((ssget "x" '((0 . "DIMENSION") (100 . "AcDbOrdinateDimension"))))
	)
      )

 

Ps : Bizarrement sur une version 2007 ton filtre sur les cotes ordonnées ne fonctionne pas, il prend tous les cotes, désolé j’ai pas trop le temps pour me pencher sur le problème..

 

Amicalement Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Essaie avec ceci:

 

(defun c:signord ( / acdoc filter ss i dim code10 code13 dimtext )
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
   filter '( (0 . "DIMENSION") (-4 . "&=")(70 . 6) ))
 (if (cadr (ssgetfirst))
   (setq ss (ssget "_I" filter))
   (progn
     (prompt "\nSélectionnez les cotes à modifier ou <entrée pour toutes> : ")
     (or
       (setq ss (ssget filter))
       (setq ss (ssget "_X" filter))
     )
   )
 )
 (if ss
   (progn
     (vla-startundomark acdoc)
     (setq i 0)
     (repeat (sslength ss)
       (setq dim (entget (ssname ss i))
         code13 (assoc 13 dim)
         code10 (assoc 10 dim)
         dimtext "")
       (if (/= 0 (cdr (assoc 42 dim)))
         (progn
           (if (zerop (boole 1 64 (cdr (assoc 70 dim))))
             (if (< (caddr code13) (caddr code10))
               (setq dimtext "-<>")
               (setq dimtext "+<>")
             )
             (if (< (cadr code13) (cadr code10))
               (setq dimtext "-<>")
               (setq dimtext "+<>")
             )
           )
         )
       )
       (entmod (subst (cons 1 dimtext) (assoc 1 dim) dim))
       (setq i (1+ i))
     );repeat
     (setq ss nil)
     (vla-endundomark acdoc)
   );progn
 )
 (princ)
)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Il ne prend pas en compte le SCU courant et ça me semble normal, car les cotes ordonnées ont leur propre point de référence (qui correspond généralement au point d'origine du SCU courant au moment de leur création).

C'est donc ce point là que mon lisp prend en compte. ;)

 

Si tu sélectionnes une cote ordonnée, tu verras une poignée correspondant à son point de référence.

Tu n'as qu'à la déplacer si elle n'est pas au bon endroit, puis à relancer le lisp.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je pense que pour ce que tu souhaites c.a.d. ajouter la modification du point de référence aux cotes ordonnées, il vaut mieux le faire dans une routine spécialisée, plutôt que de modifier la version de Bryce qui est très bien.

 

En repartant de ses lignes de codes, il est très facile de substituer les actuelles coordonnées du point de référence (code DXF 10) par des nouvelles coordonnées utilisateur :

 

;; Modifie le point de référence des cotes ordonnées
(defun c:baseord (/ acdoc filter ss i base lst)
 (vl-load-com)
 (setq	acdoc  (vla-get-ActiveDocument (vlax-get-acad-object))
filter '((0 . "DIMENSION") (-4 . "&=") (70 . 6))
 )
 (if (cadr (ssgetfirst))
   (setq ss (ssget "_I" filter))
   (progn
     (prompt
"\nSélectionnez les cotes à modifier ou <entrée pour toutes> : "
     )
     (or
(setq ss (ssget filter))
(setq ss (ssget "_X" filter))
     )
   )
 )
 (vla-startundomark acdoc)
 (if (and ss
   (setq base
	  (getpoint
	    "Spécifiez le nouveau point de référence pour les cotes séléctionnées: "
	  )
   )
     )
   (repeat (setq i (sslength ss))
     (entmod
(subst (cons 10 base)
       (assoc 10 (setq lst (entget (ssname ss (setq i (1- i))))))
       lst
)
     )
   )					;repeat    
 )
 (vla-endundomark acdoc)
 (princ)
)

 

De plus comme dans son code Bryce a pris soin d’autoriser la sélection par grippe, il est très facile d’envelopper les 2 commandes dans une troisième bien qu’elles soient définie avec C:

 

;; Modifie le point de base et ajoute (ou met à jour) un préfixe +/- sur les cotes ordonnées sélectionnées
(defun c:ludord ()
 (cond ((cadr (ssgetfirst)) (c:baseord) (c:signord))
(T (c:baseord) (sssetfirst nil (ssget "_P")) (c:signord) (command)))
 (princ)
)

 

Voilà à tester en théorie cela devrait pas trop mal fonctionner..

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous et plus particulièrement à Bryce.

 

Ton programme correspond exactement à ce que je souhaitais. Sauf que je l'utilisé de la mauvaise façon.

 

Quand j'ai fais mes 2 premiers essais, dans le SCU général j'ai fait quelques cotes ordonnées. Puis j'ai lancé SIGNORD les + ou - se sont bien mis devant chaque cotations selectionnées.

Puis aprés j'ai créé un nouvel SCU, et bêtement j'ai relancé SIGNORD puis j'ai sélectionné quelques cotations déjà créée et j'ai été surpris que le signe devant resté inchangé. J'en ais donc déduit que ton programme utilisé que le SCU général et pas le SCU courant.

Mon dieu quelle térrible erreur que je faisais là!!!!!!!!!

 

Surtout que quand j'utilise des cotes ordonnées je me mets dabord dans un SCU courant puis aprés je cote en ordonné. Donc aprés j'utiliserais ton trés bon programme SIGNORD.

 

Merci à bryce et désolé pour vous avoir relancé.

 

Merki A+

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é