Aller au contenu

Cotation avec point de base "mémorisé"


nicolas2

Messages recommandés

Bonjour à tous.

Je voudrai créer un style de côte me permettant de désigner (mémoriser ?), une fois pour toute, un point de base et ne désigner par la suite que le second point, sans revenir cliquer le point de base.

http://img706.imageshack.us/img706/4543/elvation.jpg

1- Je désigne une fois le point à "mémoriser"

2- Je clique sur la croix (300mm + haut) => écriture +300

3- Je clique sur la croix (600m + haut) => écriture +600

4- .....

Merci à tous pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Dans le genre il y avait ce lisp (je ne sais pas si il fonctionne encore... :mellow: )

Merci à son auteur :) .

; ------------------------------------
;
;                                                           %
;    NIVEAU.LSP                                            %% %%
;                                                         %%%%%%%
;    Copyright (C) 1999-2002 by Damien GOEL              %%%%%%
;                                                        %%%%%%
;    Créé le 15 mai 1999 par Damien GOEL                  %%%%%%%
;    modif le 09 mars 2004 par Damien GOEL                 %% %%
;    Pour autocad 2004
;
;
;    DESCRIPTION:
;
;    insert un niveau avec l'altitude par defaut d'apres le SCU
;    
;
;    UTILISATION:
;
;    conserver le nom du createur, ainsi que m'envoyer un petit mail
;    damien.goel@isuisse.com
;    Ne pas hesiter a la personnaliser
;
;
; ---------- REMISE A ZERO ----------

(defun myerror (s)                    ; Si une erreur se produit
 (if (/= s "Function cancelled")
   (princ (strcat "\nErreur: " s))   ; afficher l'erreur
 )
 (setvar "dimzin" dz)                ; restoration de la variable DIMZIN
 (setvar "attdia" atda)

 (setq *error* olderr)
 (princ)
)


; ---------- PROGRAMME PRINCIPALE ----------
(defun c:NIVEAU (/ quest1 dz ent ent_carac ent_carac2 alt 
                             no_ent ent_attrib val ptins atda)
  (setq olderr  *error*
       *error* myerror)

 ; ----- INFORMATION -----

  (princ "\n\t-----  niveau.lsp - juin 2004 - par Damien GOEL - vers. 2004.01  -----")

 ; ----- QUESTION -----

  (setq dz (getvar "dimzin"))
                 ;sauvegarde de la variable DIMZIN
  (setq atda (getvar "attdia"))
                 ;sauvegarde de la variable CMDECHO
  (setq lts (getvar "ltscale"))
                 ;sauvegarde de la variable LTSCALE

  (setvar "dimzin" 0)
                 ;affectation de 0 a la varaible DIMZIN
  (setvar "attdia" 0)
                 ;affectation de 0 a la varaible CMDECHO
  (setq ent (entsel "\n<Choix objet> / retour pour inserer: "))

 ; ----- EDITION NIVEAU -----

  (if (/= ent nil)
     (progn
       (setq ent_carac (entget (car ent)))
                 ;Recuperation du point y
       (setq ent_carac2 (trans (cdr (assoc 10 ent_carac)) 0 1))
                 ;Transformation du pt y dans le SCU
       (setq alt (rtos (/ (cadr ent_carac2) 100) 2 2))
                 ;ajout de deux 00 apres les vigrules
(setq no_ent (cdr (assoc -1 ent_carac)))
                 ;recuperation de ID de l'entite
(setq ent_attrib (entget (entnext no_ent)))
                 ;selection de ID du texte attribut
(setq val (cdr (assoc 1 ent_attrib)))
                 ;recuperation du texte de l'entite
(setq ent_attrib (subst (cons 1 alt) (assoc 1 ent_attrib) ent_attrib))
                 ;replacement du texte existant pas la variable alt
(entmod ent_attrib)
                 ;affectation a la variable du texte
     (entupd no_ent)
                 ;regenaration de l'entite
     )
   )

 ; ----- INSERTION NIVEAU-----

  (if (= ent nil)
     (progn
       (initget 1)
       (setq ptins (getpoint "\nSelectioner le point d'insertion"))
                 ;selection du point d'insertion
       (setq alt (rtos (/ (cadr ptins) 100) 2 2))
                 ;recuperation du niveau
       (setq legende (getstring T "\nQuel est la legende du niveau: "))
                 ;information sur le titre de la legende
       (command "_-INSERT" "niveau-coupe" ptins lts lts "0" alt legende)
                 ;insertion du bloc au point ptins avec la variable alt
     )
  )
  (setvar "dimzin" dz)
  (setvar "attdia" atda)
                 ;reafectaion de la sauvegarde de la varable DIMZIN 00
  (princ)
                 ;ne rien afficher
)

; --------------- AFFICHAGE AU MOMENT DU CHARGEMENT --------------


(princ "\n\tC:niveau chargé. Taper NIVEAU pour lancer la commande.")
(princ)


; --------------- FIN --------------

Seuls nous allons vite, ensemble nous allons plus loin...

CPU Intel 3,5Go / Nvidia RTX-3090

AutoCad (Architecture) 2022 - Lumion PRO

BMW R-1200-RT, c'est moche, oui... je sais...

 

www.neda.ch

Lien vers le commentaire
Partager sur d’autres sites

Ah, il manque ces deux fichiers annexes pour que ça fonctionne: ;)

et là

 

Voilà, à tester...

 

Je viens de tester, le dwg en annexe suffit en fait ! Et ça fonctionne encore parfaitement.

Seuls nous allons vite, ensemble nous allons plus loin...

CPU Intel 3,5Go / Nvidia RTX-3090

AutoCad (Architecture) 2022 - Lumion PRO

BMW R-1200-RT, c'est moche, oui... je sais...

 

www.neda.ch

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je me suis essayé à un petit exercice qui répondra peut être à la demande.

Le but est d'utiliser les lignes de rappel avec un champ dynamique.

L'ordonnée inscrite se fera par rapport à l'ordonnée de l'origine du SCU en cours.

 

Donc il suffit de faire par exemple "SCU" "Origine" pour placer la référence puis d'utiliser le lisp qui suit pour inscrire les cotes par rapport au seuil.

Vous vous êtes trompez de seuil! Il suffit de recaler le seuil avec SCU Origine puis mettre à jour les champs des lignes de rappel concernées.

 

(defun c:niv_field ( / AcDoc Space pt_pos obj pt_field htx rtx rtx0)
 (vl-load-com)
 (setq
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (= 1 (getvar "CVPORT"))
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
 )
 (initget 8)
 (while (setq pt_pos (getpoint "\nPlacez un point de niveau à coter: "))
   (cond
     ((null (tblsearch "LAYER" "Etiquette niveau"))
       (vla-add (vla-get-layers AcDoc) "Etiquette niveau")
     )
   )
   (vla-addPoint Space (vlax-3d-point (setq pt_pos (trans pt_pos 1 0))))
   (setq obj (vlax-ename->vla-object (entlast)))
   (vlax-put obj 'Layer "Etiquette niveau")
   (initget 9)
   (setq pt_field (trans (getpoint (trans pt_pos 0 1) "\nEmplacement du texte?: ") 1 0))
   (cond
     ((and (not htx) (not rtx))
       (initget 6)
       (setq htx (getdist (trans pt_field 0 1) (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: ")))
       (if htx (setvar "TEXTSIZE" htx))
       (if (not (setq rtx (getorient (trans pt_field 0 1) "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0))
     )
   )
   (setq rtx0 (+ (angle '(0 0 0) (getvar "UCSXDIR")) rtx))
   (mapcar
     '(lambda (lx)
       (apply
         '(lambda (ins_point value_field att_point txt_height dwg_dir name_style name_layer txt_rot / nw_obj)
           (setq nw_obj
             (vla-addMtext Space
               (vlax-3d-point ins_point)
               0.0
               (strcat
                 "{\\fArial|b0|i0|c0|p34;"
                 "%<\\AcExpr (%<\\AcObjProp.16.2 Object(%<\\_ObjId "
                 (itoa (vla-get-ObjectID obj))
                 value_field
                 "-%<\\AcVar ucsorg \\f \"%lu2%pt2\">%) \\f \"%lu2%ps[+ ,]\">%}"
               )
             )
           )
           (mapcar
             '(lambda (pr val)
               (vlax-put nw_obj pr val)
             )
             (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation)
             (list att_point txt_height dwg_dir ins_point name_style name_layer txt_rot)
           )
         )
         lx
       )
     )
     (list
       (list
         (mapcar '+ pt_field
           (list
             (- (* (getvar "TEXTSIZE") (cos rtx0)) (* (- (* (getvar "TEXTSIZE") 0.5)) (sin rtx0)))
             (+ (* (getvar "TEXTSIZE") (sin rtx0)) (* (- (* (getvar "TEXTSIZE") 0.5)) (cos rtx0)))
             0.0
           )
         )
         ">%).Coordinates \\f \"%lu2%pt2\">%"
         1
         (getvar "TEXTSIZE")
         5
         (getvar "TEXTSTYLE")
         "Etiquette niveau"
         rtx
       )
     )
   )
   (vlax-invoke Space 'addLeader
     (append pt_pos pt_field)
     (vlax-ename->vla-object (entlast))
     acLineWithArrow
   )
   (vlax-put (vlax-ename->vla-object (entlast)) 'Layer "Etiquette niveau")
   (vlax-put (vlax-ename->vla-object (entlast)) 'ArrowheadSize (getvar "TEXTSIZE"))
   (initget 8)
 )
 (prin1)
)

 

NB:Si vous voulez figer les textes (qu'ils ne soient plus dépendant de l'origine du SCU lors de prochaine session), il suffit d'exploser les textes de rappel pour qu'ils gardent définitivement leur valeur)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

hello

je connais un super programme qui...

non je déconne

moi pour ce genre de travail j'utilises les COTES SUPERPOSEES

Tu définis ton point 0,0,0 en déplaçant ton SCU sur ton origine et ensuite tu n'as qu'a tracer des cotes...

t'as un petit lisp sur le sujet suivant :

http://cadxp.com/index.php?/topic/34161-et-cotation-ordonnee/page__p__185104__hl__cotation__fromsearch__1#entry185104

Bon week end.

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Bonuscad, ton truc est sympa mais il gagnerait à utiliser les lignes de repère multiple au lieu des lignes de rappels.

Et il se rapproche de ma remarque concernant les nouvelles étiquettes Covadis (ICI), mais cela me conviendrait plus si à la place du SCU courant, on pouvez saisir ou sélectionner un plan de comparaison.

 

A plus.

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

  • 12 ans après...

Ayant eu besoin de revenir sur ce thème, j'ai retravaillé une routine pour faire des cotation de niveaux.

Celle ci fonctionne avec deux blocs: un servant de référence et l'autre pour la cotation.

Fournir le point de référence
Fournir un angle pour le bloc
Fournir une échelle d'insertion globale pour le bloc
Fournir un facteur de conversion pour la mesure effectuée (par exemple si le dessin est en centimètre, un facteur de 0,01 donnera la mesure en mètres)
Et un suffixe facultatif (comme dans l'exemple ci-dessus, on peut mettre 'm' pour corréler.)

Ensuite, nous fournissons autant de points à évaluer que nous le souhaitons.
Peut normalement fonctionner dans n'importe quel SCU.

Si vous souhaitez compléter une cote de niveau sur un point de référence déjà réalisée, choisissez simplement l'option [Sélection] lors de la demande du niveau de référence et choisissez la cote de référence "0.00" pour paramétrer la cote liée à cette référence (Il peut y avoir plusieurs niveaux de référence dans le dessin )
Celui-ci récupère l'angle du bloc, l'échelle du bloc, le SCU du bloc mais pas le facteur de conversion ni le suffixe : ce qui permet de faire par exemple des dimensions en centimètres et en mètres à partir d'un même point de référence.

Si le calage du point de référence ou un point coté n'est pas bien bien placé, pas besoin de l'effacer et recommencer, déplacer simplement ceux-ci et faites un REGEN pour mettre à jour les champs.

 

 

level_pt.lsp

Modifié par bonuscad
Précision fixé à 2 décimales, ajout du signe +/-
  • Like 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é