fabcad Posté(e) le 7 janvier 2015 Posté(e) le 7 janvier 2015 Bonjour à tous, Ayant ce genre de problème sur beaucoup de textes ou points j'aurai souhaité de l'aide sur la partie traitement. Voici le CDC (merci lecrabe pour l'abréviation) : Sélection d'objets textes ou de points puis faire sur chaque objet texte ou de point Recherche du segment le plus proche ou alors en demander un par clic. Si segment faire le traitement sur l'objet en cours.(Attention pas de nouvel objet : traitement sur l'objet en cours uniquement) Objet suivant. Je joins une copie d'écran pour illustrer le traitement. Fabrice Le Rennais Métropolitain
Patrick_35 Posté(e) le 7 janvier 2015 Posté(e) le 7 janvier 2015 Salut Tu as regardé les lisps de Lee Mac comme DTCurve par exemple ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabcad Posté(e) le 7 janvier 2015 Auteur Posté(e) le 7 janvier 2015 Bonsoir, Merci Patrick_35 pour l'info, je connaissais la routine mais j'ai 1156 textes ou points, d'où ma requête. La routine souhaitée était un peu pour dégrossir le travail. Pour faire la sélection puis la boucle, pas trop de problème c'est plutôt dans la recherche du point d'arrivée où mes connaissances en géométrie sont limitées en Lisp. Merci, Fabrice Le Rennais Métropolitain
fabcad Posté(e) le 20 janvier 2015 Auteur Posté(e) le 20 janvier 2015 Bonsoir a tous, J'ai essayé de faire ma routine mais je n’arrive pas à traiter lorsque il y a des parcelles confondues (parcelle Ilot avec parcelle bâtie. Je joins ma routine ainsi qu’un extrait de DWG zippé pour les pros d'AutoLISP. Merci pour votre aide, Fabrice Le Rennais MétropolitainExtrait.zipmove_justif_num_voies.lsp
bonuscad Posté(e) le 22 janvier 2015 Posté(e) le 22 janvier 2015 Bonjour, Je n'ai pas le temps de dégrossir le code, mais voici la procédure que je ferais si je devais faire cela. * Récupération de polyligne fermées dans le calque parcelle* Dans une boucle, pour chaque polyligne récupérer avec (ade_odgetfield) le champ NDEB.* Avec la valeur de ce champ créer une sélection automatique des textes dans un rectangle de 100X100 (ça devrait suffire) par rapport au centroid de la parcelle Un exemple de fonction simple pour obtenir le centroid ((lambda ( / js n ent pt_centroid lst_pt) (setq js (ssget)) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) pt_centroid (ade_expreval ent ".centroid" "point") lst_pt (cons pt_centroid lst_pt) ) ) ) ) )) * Extraire du jeu de sélection l'entité texte ayant la même valeur que le champ d'OD afin d'avoir son point d'insertion.* Rechercher l'intersection étendue de la ligne virtuelle entre le point d'insertion et le centroid et la polyligne de la parcelle.* Si la distance point d'insertion centroid est plus grande que la distance centroid intersection étendue, déplacer le point. Voici dans les grandes lignes comment je procéderai. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 23 janvier 2015 Posté(e) le 23 janvier 2015 Ayant eu un peu de temps (celui ci se fait rare) Un code succinct pour transcrire la démarche expliquée ci dessus. Au final il te faudra sélectionner les polylignes et si un texte (correspondant à l'OD) est trouvé à l'extérieur, il sera rapatrié automatiquement à l'intérieur.Le code est assez sommaire, il te faudra certainement l'affiner. (defun c:test ( / ) (setq js_pl (ssget '( (0 . "LWPOLYLINE") (67 . 0) (410 . "Model") (8 . "Parcelles") (100 . "AcDbPolyline") (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (210 0.0 0.0 1.0) ) ) ) (cond (js_pl (repeat (setq n (sslength js_pl)) (setq ent (ssname js_pl (setq n (1- n)))) (setq value (ade_odgetfield ent "Parcelle" "NDEB" 0)) (cond ((not (zerop value)) (setq pt_centroid (ade_expreval ent ".centroid" "point") js_text (ssget "_C" (mapcar '- pt_centroid '(100.0 100.0 0.0)) (mapcar '+ pt_centroid '(100.0 100.0 0.0)) (list '(0 . "TEXT") '(67 . 0) '(410 . "Model") '(8 . "Num_voies_Textuels") '(100 . "AcDbText") '(40 . 1.1) (cons 1 (itoa value)) '(41 . 1.0) '(51 . 0.0) '(7 . "Legend") '(71 . 0) '(72 . 1) '(210 0.0 0.0 1.0) '(73 . 2) ) ) ) (cond (js_text (setq ent_text (entget (ssname js_text 0)) pt_ins (cdr (assoc 10 ent_text)) ) (entmake (list '(0 . "LINE") (cons 10 pt_ins) (cons 11 pt_centroid))) (setq pt_int (vlax-invoke (vlax-ename->vla-object (entlast)) 'IntersectWith (vlax-ename->vla-object ent) acExtendNone ) ) (entdel (entlast)) (if pt_int (cond ((> (distance pt_centroid pt_ins) (distance pt_centroid pt_int)) (setq new_pt (polar pt_int (angle pt_ins pt_centroid) 0.75)) (setq ent_text (subst (cons 10 new_pt) (assoc 10 ent_text) ent_text ) ent_text (subst (cons 11 new_pt) (assoc 11 ent_text) ent_text ) ) (entmod ent_text) ) ) ) ) ) ) ) ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
fabcad Posté(e) le 23 janvier 2015 Auteur Posté(e) le 23 janvier 2015 Bonjour, Merci pour l’intérêt et du temps que tu prends pour ce souci d'adresses de voies cadastrales mal placées. Effectivement, prendre les OD est une bonne idée, mais je pense aux personnes qui n'ont pas MAP pour gérer ce problème (je n'ai pas MAP à la maison (snif snif). Tu as bien avancé les choses, car je cherchais à trouver un moyen pour récupérer le point d'intersection avec un segment de polyligne et ta façon de raisonner sur les distances centroide --> Point intersecté --> texte est une bonne solution pour trouver la bonne parcelle, j'ai testé cela hier soir et çà fonctionne. Merci, Pourrais-je vous envoyer mes coordonnées pro par message privé afin d’échanger sur nos travail ? Cordialement, Fabrice Le Rennais Métropolitain
Olivier Eckmann Posté(e) le 23 janvier 2015 Posté(e) le 23 janvier 2015 Bonjour, dans le code, tu récupères les 2 sommets encadrants le point le plus proche pour calculer la direction du segment. Il suffit d'utiliser la fonction GetFirstDeriv au point obtenu par GetClosestPointTo pour connaître le vecteur correspondant à la tangent (dérivée première). A partir des coordonnées tu en déduis par atan Olivier
fabcad Posté(e) le 23 janvier 2015 Auteur Posté(e) le 23 janvier 2015 Bonsoir, Après plusieurs essais, je suis arrivé à mes fins. j'ai posté la routine dans le post ou figure les pièces jointes. Il faudra que je le simplifie afin d'éviter des lignes de code répétées. Merci pour votre aide, Bonne soirée et bon week end. Fabrice Le Rennais Métropolitain
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant