Aller au contenu

[Résolu] Point topographique covadis 2D->3D


stugeol

Messages recommandés

Bonjour,

Je ne dispose pas de covadis, et chaque fois que je récup^ère des plans topographiques, j'ai toujours des blocs Tcpoint, avec un atribut Alt mais le bloc est inséré à une altitude Nulle.

Je suis à la recherche d'une routine (Lisp et ou VBA) qui puisse attribuer la valeur de l'atribut Alt au Z d'insertion du bloc Tcpoint. des recherches sur le site me donne des liens qui ne sont plus actifs. Pourriez vous m'aider.

Cordialement...

 

PS : un exemple de réponse...

Posté 30 juillet 2008 - 08:08

 

Tu as mal cherché...

 

Regarde la réponse de (gile) dans cette discussion

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Bon dans mes recherche je suis tombé sur un lisp de gille :

(defun c:bloc-alt (/ ins att)

 

(vl-load-com)

 

(and

 

(setq name (getstring T "\nEntrez le nom du bloc: "))

 

(setq tag (getstring "\nEntrez l'étiquette de l'attribut: "))

 

(ssget "_X" (list '(0 . "INSERT") (cons 2 name)))

 

(vlax-for b (vla-get-ActiveSelectionSet

 

(vla-get-ActiveDocument

 

(vlax-get-acad-object)

 

)

 

)

 

(setq ins (vlax-get b 'InsertionPoint)

 

att (vlax-invoke b 'getAttributes)

 

)

 

(foreach a att

 

(if (and (= (vla-get-TagString a) (strcase tag))

 

(numberp (setq alt (read (vla-get-TextString a))))

 

)

 

(vla-Move

 

b

 

(vlax-3d-point '(0 0 0))

 

(vlax-3d-point (list 0 0 alt))

 

)

 

)

 

)

 

)

 

)

 

(princ)

 

)

 

Le problème que je rencontre c'est que les point qui on un Z insertion egale a l'attribut Alt sont déplacer en Z de la valeurs de l'altitude.

Est-il possible d'ajouter un test et de ne déplacer que les points qui ont une altitude d'insertion nulle, ou les points qui on une altitude d'insertion différente du matricule Alt et de les déplacer en Z de :

si Z insertion <0

déplacer de -Z insertion + Alt

si Z insertion >=0

déplacer de valeur absolue (Z insertion - Alt)

 

Je vous remercie par avance de votre aide.

Cordialement.

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Voici ma proposition :

je mets le point en altitude de la valeur de l'attribut

je n'ai pas fait de test dans le cas d'attribut non numérique

 

(defun c:tcpointz  (/ jeusel n ent altval pospt tempo)

 (setq	jeusel (ssget (list (cons 0 "INSERT")
		    (cons 2 "TCPOINT")
		    )))
 (setq n 0)
 (repeat (sslength jeusel)
   (setq ent (ssname jeusel n))
   (if	(= "ALT" (cdr (assoc 2 (entget (entnext (entnext ent))))))
     (progn
(setq altval (cdr
	       (cons 1 (cdr (assoc 1 (entget (entnext (entnext ent)))))))
      pospt  (cdr (assoc 10 (entget ent)))
      tempo  (subst (cons 10 (list (car pospt) (cadr pospt) (atof altval)))
		    (cons 10 pospt)
		    (entget ent)
		    )
      )
(entmod tempo)
(entupd ent)
(setq n (+ 1 n))
)
     )
   )
 )

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Je te remercie, la routine fonctionne à merveille. Et elle est trés rapide (15 000 points traités en quelques seconde...).

Il va falloire que je prenne le temps de surfer sur le net pour me mettre au Lisp, afin de comprendre les routines Lisp, et de pouvoire en créer selon les besoins.

Encore un grand merci... :)

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Bonjour stugeol,

 

Il va falloire que je prenne le temps de surfer sur le net pour me mettre au Lisp, afin de comprendre les routines Lisp, et de pouvoire en créer selon les besoins.

Tu verras ce n’est pas si compliqué à condition de ne pas chercher à brûler les étapes, l’apprentissage du LISP ce n’est pas une course de vitesse, le principal c’est d’y trouver son intérêt et de comprendre pour devenir autonome.

 

Bon sinon histoire de ne pas laisser un problème (ou question) sans solutions avec le code que tu as posté..

 

Est-il possible d'ajouter un test et de ne déplacer que les points qui ont une altitude d'insertion nulle, ou les points qui on une altitude d'insertion différente du matricule Alt et de les déplacer en Z de :

si Z insertion <0

déplacer de -Z insertion + Alt

si Z insertion >=0

déplacer de valeur absolue (Z insertion - Alt)

En programmation ce que tu expose peut très bien s’écrire très simplement (sans test) de la façon suivante :

Z = Alt - Z insertion (soit un déplacement relatif)

 

Pour intégrer cela dans le code que tu as posté il suffit de substituer ces lignes :

(vla-Move
 b
 (vlax-3d-point '(0 0 0))
 (vlax-3d-point (list 0 0 alt))
)

 

Par

(vla-Move
 b
 (vlax-3d-point (list 0 0 (caddr ins)))
 (vlax-3d-point (list 0 0 alt))
)

 

 

Pour personnaliser encore le code que tu as posté et l’adapter à ton cas tu peux également également substituer ces lignes de codes :

(setq name (getstring T "\nEntrez le nom du bloc: "))
(setq tag (getstring "\nEntrez l'étiquette de l'attribut: "))

 

Par les suivantes pour un peu plus de convivialité à moindre coût (Car dans ton cas ce ne sont plus des inconnues mais des constantes):

(setq	name "TCPOINT")
(setq	tag  "ALT")

 

 

Le code définitif à tester..

(defun c:bloc-alt (/ ins att name tag)
 (vl-load-com)
 (and
   (setq name "TCPOINT")
   (setq tag "ALT")
   (ssget "_X" (list '(0 . "INSERT") (cons 2 name)))
   (vlax-for b	(vla-get-ActiveSelectionSet
	  (vla-get-ActiveDocument (vlax-get-acad-object))
	)
     (setq ins	(vlax-get b 'InsertionPoint)
    att	(vlax-invoke b 'getAttributes)
     )
     (foreach a att
(if (and (= (vla-get-TagString a) (strcase tag))
	 (numberp (setq alt (read (vla-get-TextString a))))
    )
  (vla-Move b
	    (vlax-3d-point (list 0 0 (caddr ins)))
	    (vlax-3d-point (list 0 0 alt))
  )
)
     )
   )
 )
 (princ)
)

 

A+ sur le forum LISP..

Modifié par VDH-Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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é