Aller au contenu

applicatif pour geometre ?


Fraid

Messages recommandés

(defun C:Tript ( / )

(setq j_sel (ssget "_x" ' ((0 . "POINT"))))

(setq n 0)

(repeat (sslength j_sel)

(setq ent (ssname j_sel n))

(setq pt_ins (cdr (assoc 10 (entget ent))))

(setq c1 (list (+ (car pt_ins) 0.05) (+ (cadr pt_ins) 0.1) (caddr pt_ins)))

(setq c2 (list (+ (car pt_ins) 0.05) (+ (cadr pt_ins) 0.1) (caddr pt_ins)))

(setq js (ssget '(c1 c2) '((0 . "TEXT"))))

(cond

(js

(setq cod (read (cdr (assoc 1 (entget (ssname js 0))))))

(command "_.-layer" "_new" (itoa cod) "" "")

(command "_.change" (ssget "_c" c1 (list (car pt_ins) (cadr pt_ins) (caddr pt_ins))) "" "_properties" "_layer" (itoa cod) "")

)

)

(setq n (+ 1 n))

)

)

 

Lien vers le commentaire
Partager sur d’autres sites

 

Bonsoir

 

Une petite question "stupide" ...

 

Tu as reçu un DWG AutoCAD avec des milliers de points et des textes proches ?

(Le tout sur de multiples calques en fonction du code ?)

 

Ou bien tu as UN ou PLUSIEURS fichiers Ascii/Textes avec des coordonnées XYZ

(plus éventuellement) des codes ?

 

Le Decapode "interloqué"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

je me permet de continuer se sujet meme si je devrai le continuer dans le forum destiné au lisp

 

je suis toujours en train de me depatouiller avec le prog de bonuscad

 

en faisant un (princ pt_ins) a l'interieur de la boucle

j'ai pu m'apercevoir qu'il n'y avait pas de chiffre apres la virgule alors qu'il devrais en avoir(dimzin=0)

cela vient il de cette expression?

(setq pt_ins (cdr (assoc 10 (entget ent))))

 

je ne vois pas a quoi correspond le nombre 10 apres assoc (qui est vraiment mal documenter dans l'aide)

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Le nombre 10 correspond au code dxf 10 de la liste renvoyée par entget (10 est en général le code du point de départ des entités : point d'insertion d'un bloc, centre d'un cercle, premier point d'uneligne ...)

 

La fonction (assoc ...) permet de récupérer un membre d'une "liste associative" (de dotted pairs (paires pointées) dans les listes renvoyées par (entget)). Le premier terme de chaque membre de cette liste agit comme un index pour la fonction (assoc).

 

exemple :

 

(setq lst '((0 . "circle") (10 20.0 30.0 0.0) (40 . 50.0)))

 

ensuite :

 

(assoc 0 lst) retourne (0 . "circle")

(cdr (assoc 10 lst)) retourne (20.0 30.0 0.0)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

merci gile pour ton eclaicissement

 

mais pourquoi je me retrouve avec des valeurs arrondies????

 

j'ai besoin de garder mes position de points exacte

 

sinon j'ai chercher la liste des codes dxf des listes renvoyée par entget

je n'ai trouvé que quelques exemples mais pas une liste exaustive :exclam:

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

Effectivement, le mec qui t'as refilé le fichier abuse.

sauf si tu lui as vendu des haricots qui veulent pas cuire,

je ne vois pas la raison de faire une telle crasse.

les géomètres ne sortent pas grandis de ce genre de situation.

 

Donc récapitulons,

la valeur du code est connue

la situation du point est connue par rapport au point d'insertion du texte "code"

 

tu fais un calque du nom de code que tu veux scanner

tu le rends COURANT

si le point d'insertion des codes est "bas gauche" :

 

c'est simple mais ça fonctionne :

(setq jeu (ssget "x" '((0 . "TEXT"))))

(setq lon (sslength jeu)

valcode (getstring "\nValeur du code ?\n")

consx -0.5

consy -0.1

n 0)

(repeat lon

(setq ent (ssname jeu n))

(if (= (cdr(assoc 1 (entget ent))) valcode)

(progn

(setq pt1 (cdr(assoc 10 (entget ent))))

(setq pt2 (list ( + consx (car pt1))(+ consy (cadr pt1))))

(command "point" pt2)

)

)

(setq n ( + 1 n))

)

 

NB: tu peux changer les constantes

 

que la peste soit sur les barbares

qui pourrissent leurs fichiers

pour que le soleil ne brille que chez eux

 

amicalement

Lien vers le commentaire
Partager sur d’autres sites

Une nouvelle proposition, (celle ci ne tiens plus compte de ton histoire d'erreur d'altidude sur une fourchette de code inférieur à 1000)

Lors de l'utilisation un paramètrage va avoir lieu sur la 1ere boucle pour définir la position de ton code puis numéro et enfin l'altidude par rapport à ton point. Ceci fait, chaque point sera (normalement) transferé dans le calque portant le nom du code (nombre entier) avec son code et son altitude.

 

Les chevauchements des écritures ne devraient pas poser de problème.

J'espère qu'elle va t'apporter la réponse attendue sans avoir besoin d'être remanié ou ajusté.

 

(defun tri_sel (sel l en p_o / n tri_sel e_text dxf_txt pins val)
(setq
	n 0
	tri_sel (ssadd)
	tri_sel (ssadd en tri_sel)
)
(repeat (sslength sel)
	(setq
		e_text (ssname sel n)
		dxf_txt (entget e_text)
		pins (cdr (assoc 10 dxf_txt))
		pins (list (car pins) (cadr pins) 0.0)
		val (cdr (assoc 1 dxf_txt))
	)
	(cond
		((equal (mapcar '- pins p_o) (car l) 0.0001)
			(setq tri_sel (ssadd e_text tri_sel))
		)
		((equal (mapcar '- pins p_o) (cadr l) 0.0001)
			(setq tri_sel (ssadd e_text tri_sel))
		)
		((equal (mapcar '- pins p_o) (caddr l) 0.0001)
			(setq tri_sel (ssadd e_text tri_sel))
			(command "_.-layer" "_new" (itoa (read val)) "")
			(setvar "CLAYER" (itoa (read val)))
		)
	)
	(setq n (1+ n))
)
(command "_.change" tri_sel "" "_properties" "_layer" (getvar "CLAYER") "")
(setvar "CLAYER" "0")
)
(defun C:Tri_pt ( / j_sel lst_ins lst_box n ent pt_ins e_text txt_box pt c1 c2 js)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "_.zoom" "_extent")
(setq j_sel (ssget "_x" ' ((0 . "POINT"))))
(setq lst_ins '() lst_box '())
(cond
	(j_sel
		(setq n 0)
		(repeat (sslength j_sel)
			(setq
				ent (ssname j_sel n)
				pt_ins (cdr (assoc 10 (entget ent)))
				pt_ins (list (car pt_ins) (cadr pt_ins) 0.0)
			)
			(if (zerop n)
				(progn
					(command "_.zoom" "_ce" pt_ins "10.0")
					(princ "\nEtalonnage de position des textes pour code/numéro/texte-z.")
					(foreach msg '("code" "altitude");'("code" "numero" "altitude")
						(initget 1)
						(setq
							e_text (entget (car (nentselp (getpoint pt_ins (strcat "\nChoix tu texte pour la valeur " msg ": ")))))
							txt_box (textbox e_text)
							pt (cdr (assoc 10 e_text))
							pt (list (car pt) (cadr pt) 0.0)
							lst_ins (cons (mapcar '- pt pt_ins) lst_ins)
							lst_box (append (mapcar '(lambda (x) (mapcar '+ (car lst_ins) x)) txt_box) lst_box)
						)
					)
					(command "_.zoom" "_previous")
				)
			)
			(setq c1
				(list
					(+ (car pt_ins) (eval (cons 'min (mapcar 'car lst_box))))
					(+ (cadr pt_ins) (eval (cons 'min (mapcar 'cadr lst_box))))
					0.0
				)
			)
			(setq c2
				(list
					(+ (car pt_ins) (eval (cons 'max (mapcar 'car lst_box))))
					(+ (cadr pt_ins) (eval (cons 'max (mapcar 'cadr lst_box))))
					0.0
				)
			)
			(setq js (ssget "_c" c1 c2 '((0 . "TEXT"))))
			(if js 	(tri_sel js lst_ins ent pt_ins))
			(setq n (+ 1 n))
		)
	)
)
)

 

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é