Pages: 1
- Sujet précédent - [MAP/CIVIL]Répéter le texte d'une OD le long d'une polyligne optimisée - Sujet suivant
#1 Wed 05 October 2011 12:03
- bruno v.
- Participant actif
- Date d'inscription: 22 Mar 2010
- Messages: 89
[MAP/CIVIL]Répéter le texte d'une OD le long d'une polyligne optimisée
Bonjour,
J'avais besoin de cet outil, donc je l'ai écrit.
Si vous pensez en avoir besoin aussi voici le code.
Code:
(vl-load-com) (defun c:OD2Label_Side ( / js obj ename htx AcDoc Space nw_style lst_tabl_def lst_def desc_od str pt deriv rtx nw_obj) (princ "\nSélectionnez une polyligne.") (while (null (setq js (ssget "_+.:E:S" (list '(0 . "LWPOLYLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) ) (princ "\nCe n'est pas un objet valable pour cette fonction!") ) (setq obj (ssname js 0) ename (vlax-ename->vla-object obj) ) (cond ((ade_odgettables obj) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (cond ((null (tblsearch "LAYER" "Label")) (vlax-put (vla-add (vla-get-layers AcDoc) "Label") 'color 96) ) ) (cond ((null (tblsearch "STYLE" "Romand-Label")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand-Label")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list "romand.shx" 0.0 (/ (* 15.0 pi) 180) 1.0 0.0) ) ) ) (setq lst_tabl_def (mapcar 'ade_odtabledefn (ade_odgettables obj))) (foreach n lst_tabl_def (foreach el n (if (listp (cdr el)) (foreach sel (cdr el) (foreach msel sel (if (eq (car msel) "ColName") (setq lst_def (cons (strcase (cdr msel)) lst_def)) ) ) ) ) ) ) (print lst_def) (while (not (member (setq desc_od (strcase (getstring T "\nDescription de la donnée d'objet: "))) lst_def)) (princ "\nCette description n'est pas présente dans la table") ) (setq str (ade_odgetfield obj (car(ade_odgettables obj)) desc_od 0)) (while (setq pt (getpoint "\nPoint?: ")) (setq pt (vlax-curve-getClosestPointTo ename (trans pt 1 0)) deriv (vlax-curve-getFirstDeriv ename (vlax-curve-GetParamAtPoint ename pt)) rtx (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR"))) ) (if (or (> rtx (* pi 0.5)) (< rtx (- (* pi 0.5)))) (setq rtx (+ rtx pi))) (setq nw_obj (vla-addMtext Space (vlax-3d-point (setq pt (polar pt (+ rtx (* pi 0.5)) (getvar "TEXTSIZE")))) 0.0 str ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list 5 (getvar "TEXTSIZE") 5 pt "Romand-Label" "Label" rtx) ) ) ) (T (princ "\nPas de données d'objet attachées")) ) (prin1) )
J'avais besoin que pour des LWPolyline, libre à vous d'étendre à d'autres objets curviligne valides en modifiant le filtre ssget:
"*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE"....
Hors ligne
#2 Sat 08 October 2011 20:31
- Patrice
- JeSuisCharlie
- Date d'inscription: 16 Sep 2005
- Messages: 4779
Re: [MAP/CIVIL]Répéter le texte d'une OD le long d'une polyligne optimisée
Hello Bruno
Merci pour ta routine que je viens de tester sur un vieux MAP 2004 et qui marche Nickel-Chrome !
Le style de texte n'est "pas terrible" mais ce n'est pas un probleme ...
A propos de routine en Lisp/VLisp pour les OD de MAP/CIVIL, je te propose un CDC/CCTP
si bien sur tu as le temps ... je pense que cela est VITAL des que l'on a des ODs dans MAP/CIVIL !?
On n'a aucun moyen simple (sauf en passant par des requetes sur le groupe dessins, c penible) dans MAP/CIVIL pour tout simplement selectionner les objets ayant une certaine table OD avec un certain de contenu de champ OD ...
Donc apres une selection AutoCAD classique ...
Question 1 : Nom de la table OD a traiter ?
Cela permettra DEJA d'eliminer les objets selectionnes mais non concernes !
Question 2 : Nom du champ OD a traiter ?
Attention aux 3 types de champ : Caractere, Entier, Reel (Quant a POINT, je ne l'ai jamais utilise !)
Question 3 : Operateur < <= > >= = <> ?
Question 4 : Valeur/Contenu ?
Execution et Selection depuis la selection initiale QUE des objets qui respecte les parametres !
Par exemple :
- Trouver les objets dont le champ IDENTIFIANT = AB0001 (ou DIFFERENT)
- Trouver les objets dont le champ DIAMETRE <= 200 (ou > ou etc)
- Trouver les objets dont le champ PRIX >= 1234.50 (ou <= ou < ou > ou etc)
etc etc
Cela serait une grande aide pour TOUS les utlisateurs de MAP et CIVIL ...
GeoBye, Pat
(Autodesk Expert Elite Team)
Hors ligne
Pages: 1
- Sujet précédent - [MAP/CIVIL]Répéter le texte d'une OD le long d'une polyligne optimisée - Sujet suivant