Aller au contenu

cotation NGF


philsogood

Messages recommandés

hello

il y a quelques années de ça "j"'avais fait un lisp pour faire des cotes NGF

le lisp de mémoire (voila des années que je ne l'ai aps utilisé) marchait aps trop mal

bon les grandes lignes c'est toujours OK mais pour le reste ya encore du boulot

la cote s'affiche correctement mais :

je n'ai aps l'insertion de mon bloc flèche

le lisp ne me demande pas l'ajout de préfixe

et ya un autre truc que j'avais pas fait à l'époque et qui pourrait être judicieux : répéter la commande sans avoir besoin de respécifier point_zero et zero, pouvoir enchainer plusieurs cotes à la suite sans relancer la commande

ça fait tellemnt longtemps que je n'ai asp touché le lisp qu'il me faudrait 3 jours pour m'y remettre :(

si une bonne âme passait par là...

 

le code

;; philsogood avec l'aide de rebcao, (gile), VDH-bruno, bryce & much more
(defun c:niv (/) ;(/ *error* oldlayer oldcolor unite echelle oldceltype oldweight oldstyle point_zero zero rot xscu yscu xbase ybase xtxt ytxt  x_fleche_SCG y_fleche_SCG distance_OA teta beta x_fleche_SCU y_fleche_SCU)

 ;; stocker les valeurs initiales dans des variables LOCALES
 (setq oldlayer   (getvar "clayer")
       oldcolor   (getvar "cecolor")
       oldceltype (getvar "celtype")
       oldweight  (getvar "celweight")
       oldstyle   (getvar "dimstyle")
unite      (getvar "insunits")
 )

 ;; Redéfinition LOCALE de *error* au début de la routine
 ;; Restaure les valeurs initiales des variables
 (defun *error* (msg)
   (if msg
     (princ (strcat "\nErreur: " msg))
   )
   (setvar "clayer" oldlayer)
   (setvar "cecolor" oldcolor)
   (setvar "celtype" oldceltype)
   (command "_celweight" oldweight)
   (command "_-dimstyle" "_r" oldstyle)
   (princ)
 )
 ;; prise en compte de l'unité de travail
 (cond ((= unite 4) (setq echelle 1000))   ;unité de travail en mm
       ((= unite 5) (setq echelle 100))    ;unité de travail en cm
       ((= unite 6) (setq echelle 1))      ;unité de travail en m
 ) ;cond
 
 ;; modif des paramètres pour une cotation conforme
 (setvar "clayer" "SOCEH-GC-Neuf-annotation")
 (setvar "cecolor" "bylayer")
 (setvar "celtype" "bylayer")
 (command "_celweight" "-1")
 (command "_-dimstyle" "_r" "COTES")

 (setq point_zero (getpoint "\nIndiquer le point de repère"))
 (initget 1)
 (setq zero (getdist "\nIndiquer l'altimétrie de ce repère (en mètre) : "))

 (command "_ucs"
          "_o"
          (list
            (car point_zero)
            (- (cadr point_zero) (* echelle zero))
          )
 )

 (while T

    (command "_dimordinate" pause "_y" pause)

    (setq x_scu (cadr (assoc 10 (entget (entlast))))  	        ;;coordonnées alti zéro
   y_scu (caddr (assoc 10 (entget (entlast)))) 	        ;;coordonnées alti zéro
   x_basecot (cadr (assoc 13 (entget (entlast)))) 	;;base de la cote
   y_basecot (caddr (assoc 13 (entget (entlast))))	;;base de la cote
   x_txtcot (cadr (assoc 14 (entget (entlast))))  	;;texte de la cote
   y_txtcot (caddr (assoc 14 (entget (entlast))))	;;texte de la cote
   x_fleche_SCG (- x_txtcot x_scu)
   y_fleche_SCG (- y_basecot y_scu)
   distance_OA (sqrt(+ expt(x_fleche_scg 2) expt(y_fleche_scg 2)))
   teta (atan (/ y_fleche_SCG x_fleche_SCG))
   beta (- (angle '(0. 0. 0.) (getvar 'ucsxdir)) teta)  ;; (angle '(0. 0. 0.) (getvar 'ucsxdir)) <<< représente l'angle entre SCG et SCU (en radian)
   x_fleche_SCU (* distance_OA (cos beta))
   y_fleche_SCU (* distance_OA (sin beta))
    ) ;setq

;ajout d'un signe négatif pour des valeurs en dessous de 0.00
   
    (if (< y_basecot y_scu)
    (command "_dimedit" "_n" "- <>" "_l" "")
    ) ;if
   
;édition de la cote (rajout d'un préfixe manuel
   
    (command "_ddedit" "_l" "")
   
;rajout du bloc fleche
   
       (if (> y_txtcot y_basecot)
           (setq ROT "0")
          (setq ROT "180")
        )  ;_ if

(command "_INSERT"
       	"NIVCS"						;nom du bloc (flèche)
   		"_r" ROT					;rotation du bloc si nécessaire
       	(list x_fleche_SCU y_fleche_SCU)                ;coordonnées
	"1"                                             ;echelle bloc X
	"1"                                             ;echelle bloc Y
        )
       
 ) ;while

 ;; Appel de la fonction locale *error* avec nil comme paramètre
 ;; pour restaurer les valeurs initiales des variables
 (*error* nil)

; (princ)
)

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Ce que tu ne dis pas mais dont on se doute c'est que tu veux coter ces valeurs sur une vue en élévation ou en coupe c'est OK ?

Comme ce que fait la commande native "cotation de l'ordonnée" mais tu veux le faire en lisp toujours OK ?

 

Suivant ta réponse je te proposerai quelque chose.

 

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Je ne suis pas sur de comprendre l’esprit de la demande.

 

Mais voilà, pour mes élévation (ou coupes ) j'utilise un bloc avec attribut contenant un champ Ce champ calcul la distance entre 2 valeur y et ajoute la valeur du plan de comparaison. Il fonctionne avec en parallèle avec un bloc contenant un attribut correspondant à l'alti du plan de référence.

Ainsi, à chaque copie du bloc cote de niveau, la valeur se met à jour.

 

Voici le dwg: TELECHARGEMENT

 

Et si on veut avoir un nouveau plan de comparaison, il suffit de copier une cote de niveau et le bloc plan de référence sur le nouveau plan de comparaison.

 

Mais bon pas sur d'avoir tout compris.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

salut,

J'utilise la même méthode que La Lozère,

avec 1 bloc référence, et un autre bloc satellite,

qui a chaque copie pointe vers le bloc référence

dans le boc référence, je met l'altitude et l'échelle.

j'en ai 2 version, une pour l'axe y, et une pour l'axe x (coupe dessinée à la perpendiculaire)

a+

gégé

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

hello

@ didier, t'as tout compris, je mets bien ces cotation ordonnées sur des coupes

@ la lozère, je jete un oeil sur ton truc, ça à l'air sympa dans le genre... j'avais vu un truc de x_all (encore lui!!!!) il y a 5 ans de ça... aurais-je tant de retard que ça?? j'ai zyeuté ça... c'est pas mal, mais j'aimais bien la version avec les cotord... pour une fois que cette fonction sert à qqch!! :P

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

@la lozère et gégé

désole mais ça marche pas votre truc!! :)

enfin pas avec ma méthode de travail

un exemple avec le vue du fichier sur lequel je travaille

les coupes sont sur les cotés

j'ai testé le bloc de la lozère et il aime aps trop les coupes sur le cotés avec un SCU différent!! :)

moi je kiffe mon lisp mais je sais pas le modifier!! :/

GQVX7.png

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, vu comme ça :(rires forts):

Non, sinon comme l'indique gégé, en adaptant le bloc pour qu'il vienne chercher les X à la place des Y, on doit pouvoir faire quelque chose. Mais c'est peut-être moins adapté, j'en conviens.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Autre question que je me pose car Philsogood est toujours aussi avare de renseignements (hihi).

Est-ce qu'il faut écrire des "altitudes" dans une des "coupe/élévation" depuis la vue générale, je m'explique :

Faut-il écrire des valeurs dans la coupe de gauche, alors que cette dernière n'a pas l'axe des X de son SCU de définition parallèle à l'écran et que ces écritures soient parallèles à la coupe

Il va falloir gérer des transformations de coordonnées dans ce cas.

 

Comme toujours je ne suis pas enclin à faire des efforts quand ça risque d'être inutile alors j'attends la confirmation ...

Ce qui me permet de demander aux "questionneurs" de se mettre à la place de ceux qui lisent et souhaitent aider, de préciser les cas particuliers qui changent complètement les données du problème, en l'occurrence il fallait poster l'image dès le premier message à mes yeux.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

je veux pas insister, mais le lisp auquel tu fait référence marche (il faut se placer dans le bon SCU, lancer le lisp avec un bloc de ref et au moins un bloc de niveau à mettre à jour et ça renseigne les altimétries).Le principe est le même que pour les champs on calcule la différence en Y suivant le SCU. Donc tu monte ta coupe et place un bloc ref sur une ligne de base connue, tu place des blocs NIV sur les points à coter. Le filtre de sélection fait que tu lances le bousin et tu fait une fenêtre qui englobe toute la coupe ou la ref et les niveaux sont placés et roule ma poule..c'est toujours là

http://joch04.free.fr/achtml/lisps-bloc-dyn.htm

après c'est vrai que je ne gère pas les préfixes suffixe et compagnie, mais avec des attributs supplémentaire on doit pouvoir s'en passer

Lien vers le commentaire
Partager sur d’autres sites

@didierque ce cache t il derrière ton "test" ? tu utilises _dimordinate?

J'aime pas top cette fonction car vivant à la montagne ça me fait placer mes projets à 600m du dessin si je doit coter en NGF...et puis quand on cote les coupes, on utilise généralement un symbole avec les flèches que je n'arrive pas à faire avec ce type de cotation.

Mais je suis curieux du... "test" ?ça ressemble pas au cotes coordonnées

 

 

Lien vers le commentaire
Partager sur d’autres sites

hello

comme indique plus haut je "tourne" mon EO suivant les coupes que je souhaite coter

je ne cote qu'une coupe à la fois

ce qui me surprend c'est qu'aux dernières nouvelles (il y a 5 ans) ce lips marchait parfaitement bien!!

++

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

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é