| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Текст вдоль полилинии или сплайна (по кривой)

Текст вдоль полилинии или сплайна (по кривой)

Ответ
Поиск в этой теме
Непрочитано 13.03.2007, 06:38
Текст вдоль полилинии или сплайна (по кривой)
Denioska
 
Геолог
 
Иркутск
Регистрация: 24.08.2006
Сообщений: 27

Доброго времени суток! Возникла такая задача - расположить текст по кривой линии (Например название реки на карте). Corel сам предлагает расположить текст по кривой при наведении курсора "текст" на линию.
Как делать текст по окружности - это в Акаде понятно, а как расположить его по заданной линии нет. Или Акад вообще такого не позволяет делать. В Helpe ничего такого не нашел. Может лисп какой есть?
И второй вопрос - как привязать текст "Цифру" к линии, чтобы его можно было перемещать вдоль линии ("как по рельсам"). Нужно для проставления меток на изолинии.
Заранее благодарен.
Просмотров: 37072
 
Непрочитано 23.05.2018, 16:09
1 | #21
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Простейшая программа для выравнивания вертикального текста вдоль профиля. Желательно профиль иметь в виде сплайна или полилинии, сглаженной сплайном.
Код:
[Выделить все]
(defun C:PRT ( / echo osm tm vtm txt tvs xl vxl intp ip mip)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq tm (car (entsel "\nУкажите профиль: ")))
(setq vtm (vlax-ename->vla-object tm))
(setq txt T)
(while txt
(setq txt (car (entsel "\nУкажите текст: ")))
(if txt
    (progn
    (setq tvs (cdr (assoc 10 (entget txt))))
    (vl-cmdf "_XLINE" "_V" tvs "")
    (setq xl (entlast))
    (setq vxl (vlax-ename->vla-object xl))
    (setq intp (vla-IntersectWith vtm vxl acExtendNone))
    (setq ip (vlax-safearray->list (vlax-variant-value intp)))
    (setq mip (list (nth 0 ip) (+ (nth 1 ip) 250) (nth 2 ip)))
    (vl-cmdf "_MOVE" txt "" tvs mip)
    (entdel xl)
    ) ; progn
) ; if
) ; while
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)
Setvar вне форума  
 
Непрочитано 23.05.2018, 19:24
#22
trir


 
Регистрация: 18.12.2010
Сообщений: 4,822


Цитата:
А если достаточно уровня "склепано на коленке" - то можно написать и лисп в несколько строк.
это только кажется что можно, а на самом деле там одно за другое цепляется - и вот уже надо половину функционала Civil'а реализовать, ну и нафига стараться?
trir вне форума  
 
Непрочитано 24.05.2018, 03:58
#23
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Цитата:
Сообщение от trir Посмотреть сообщение
проще использовать Civil 3D
Как? Вообще профиль был сделан в Civil3D в том то и проблема что что метки рабочих отметок он подписывает в один ряд над профилем. А по ГОСТу они должны быть вдоль линии профиля (правда отрицательные еще должны быть под линией а положительные над, но упустим этот факт). Поэтому и приходится вручную их двигать. В принципе конечно можно оставить и как есть, не думаю что для эксперта это важно, однако так как сделано по ГОСТу чертеж читать легче особенно когда большие перепады рельефа. Я конечно не исключаю того что в Civil как-то можно настроить метку чтобы она выравнивалась по профилю но в интернете я такого способа не находил. Я знаю что существует приложение C3D Extensions которая подписывает рабочие отметки в виде текста по ГОСТу, но она не всегда правильно работает. Например была у меня проблема что все рабочие отметки подписывались не в тех местах. Как я понял это было связано с рублиным пикетом на трассе. После рубленного пикета отметки расставлялись не с тем шагом, были со смещением. Кстати об этой проблеме я писал автору программы. Но вопрос не в этом.
Т.к. профиль в любом случаи дорабатывается в ACADе в итоге проще рабочие отметки сдвинуть вручную. Но т.к. это простая и однотипная работа я подумал что существует подобный лисп поэтому и обратился сюда, вдруг кто знает. Готов выслушать и другие варианты решения.

Setvar, Большое спасибо. Это то что нужно.
Единственное, а можно ли как-то сделать чтобы выбор текста был не по одному а можно было выбрать рамкой выделения целую группу?
Правильно ли я понимаю что цифра 250 отвечает за отступ текста от линии по которой происходит выравнивание?
Код:
[Выделить все]
(setq mip (list (nth 0 ip) (+ (nth 1 ip) 250) (nth 2 ip)))
CHESNOK вне форума  
 
Непрочитано 24.05.2018, 07:18
#24
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


1. Групповой выбор можно сделать, но попозже.
2. Правильно понимаешь. Можно ввести запрос на отступ текста от профиля, но здесь важно выравнивание текста. В моем примере предполагается, что текст выравнен "влево" относительно точки вставки.
Setvar вне форума  
 
Непрочитано 24.05.2018, 09:36
#25
trir


 
Регистрация: 18.12.2010
Сообщений: 4,822


Цитата:
Я конечно не исключаю того что в Civil как-то можно настроить метку чтобы она выравнивалась по профилю но в интернете я такого способа не находил.
я сел и за пять минут нашёл - "Группа меток пикетов продольного профиля" в метках профиля

Последний раз редактировалось trir, 24.05.2018 в 10:12.
trir вне форума  
 
Непрочитано 24.05.2018, 10:45
#26
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Цитата:
Сообщение от Setvar Посмотреть сообщение
1. Групповой выбор можно сделать, но попозже.
2. Правильно понимаешь. Можно ввести запрос на отступ текста от профиля, но здесь важно выравнивание текста. В моем примере предполагается, что текст выравнен "влево" относительно точки вставки.
1. Буду признателен если вы сможете добавить эту возможность.
2. Вводить данный запрос думаю нет необходимости просто у меня текст улетал далеко вверх (видимо я в другом масштабе работаю) поэтому я сначала не понял что происходит. Я в лиспе сам задал отступ какой мне нужно, изменять думаю все равно его не придется. Просто написании лиспов ни чего не понимаю поэтому решил спросить.

Цитата:
Сообщение от trir Посмотреть сообщение
я сел и за пять минут нашёл - "Группа меток пикетов продольного профиля" в метках профиля
ссылочку можете добавить, пожалуйста? Я пока не понимаю что вы нашли.
CHESNOK вне форума  
 
Непрочитано 24.05.2018, 10:53
#27
trir


 
Регистрация: 18.12.2010
Сообщений: 4,822


Цитата:
ссылочку можете добавить, пожалуйста? Я пока не понимаю что вы нашли.
http://help.autodesk.com/view/CIV3D/...2-44ABF04BB1C1
trir вне форума  
 
Непрочитано 24.05.2018, 12:14
#28
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Цитата:
Сообщение от trir Посмотреть сообщение
Не вижу где там описано как сделать так чтобы метки рабочих отметок профиля выравнивались по линии проетного продольного профиля как требует ГОСТ 21.701-2013 пункт 7.4
Вопрос был в выравнивании подписей рабочих отметок по оси Y относительно линии проектного профиля, а не в том как получить эти отметки на профиле.
CHESNOK вне форума  
 
Непрочитано 24.05.2018, 12:23
#29
trir


 
Регистрация: 18.12.2010
Сообщений: 4,822


Выбираешь "Стиль метки профиля" = "Основные пикеты" и метки раставляются по пикетам по линнии поверхности
trir вне форума  
 
Непрочитано 24.05.2018, 15:31
#30
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Цитата:
Сообщение от trir Посмотреть сообщение
Выбираешь "Стиль метки профиля" = "Основные пикеты" и метки раставляются по пикетам по линнии поверхности
Давайте по порядку. Правильно ли я вас понимаю? Я выделяю "профиль компоновки" нажимаю правую клавишу мыши >"Редактировать метки..." Правильно? Дале делаю то что показано на скрине.
Однако для создания рабочей отметки в списке свойств не существует нужного параметра. Как создать такую метку? Может конечно существует какое-то выражение для создания данного свойства но мне оно не известно.
Рабочая отметка - это разность между отметкой проектного профиля и отметкой существующего профиля поверхности. (красная минус черная).
Значение пикета или значение отметки таким способом я могу расставить, но рабочую отметку (разность красного и черного профиля) не могу. Ну или не понимаю как
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_1.jpg
Просмотров: 55
Размер:	217.4 Кб
ID:	202667  

Последний раз редактировалось CHESNOK, 24.05.2018 в 15:37.
CHESNOK вне форума  
 
Непрочитано 24.05.2018, 16:34
1 | #31
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Вариант программы со стандартным выбором текстовых объектов, включая рамку, секрамку и т.д.
Код:
[Выделить все]
(defun C:PRT ( / echo osm tm vtm sst lensst txt tvs xl vxl intp ip mip)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq tm (car (entsel "\nУкажите профиль: ")))
(if (and tm (or (= (cdr (assoc 0 (entget tm))) "POLYLINE")
                (= (cdr (assoc 0 (entget tm))) "LWPOLYLINE")
                (= (cdr (assoc 0 (entget tm))) "SPLINE"))
    ) ; and
    (progn
    (setq vtm (vlax-ename->vla-object tm))
    (princ "\nВыберите текстовые объекты: ")
    (setq sst (ssget (list (cons 0 "TEXT"))))
    (if sst
        (progn
        (setq lensst (sslength sst) n 0)
        (repeat lensst
            (setq txt (ssname sst n))
            (setq tvs (cdr (assoc 10 (entget txt))))
            (vl-cmdf "_XLINE" "_V" tvs "")
            (setq xl (entlast))
            (setq vxl (vlax-ename->vla-object xl))
            (setq intp (vla-IntersectWith vtm vxl acExtendNone))
            (setq ip (vlax-safearray->list (vlax-variant-value intp)))
            (setq mip (list (nth 0 ip) (+ (nth 1 ip) 3) (nth 2 ip)))
            (vl-cmdf "_MOVE" txt "" tvs mip)
            (entdel xl)
            (setq n (+ n 1))
        ) ; repeat    
        ) ; progn
    ) ; if _sst
    ) ; progn
) ; if _tm
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)
Setvar вне форума  
 
Непрочитано 24.05.2018, 16:57
#32
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Setvar, спасибо ОГРОМНОЕ! Все работает.
Скажите а чтобы с МТекст'ом тоже работало трудно сделать? Но вообще это не критично, если марочиться нужно то и так все отлично. МТекст легко превратить в Текст.
Еще раз спасибо. Уже давно хотел такую штуку
CHESNOK вне форума  
 
Непрочитано 24.05.2018, 17:18
1 | #33
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Чтобы программа работала как с текстом, так и с мультитекстом, достаточно строку
Код:
[Выделить все]
(setq sst (ssget (list (cons 0 "TEXT"))))
заменить на строку
Код:
[Выделить все]
(setq sst (ssget (list (cons 0 "*TEXT"))))
Замечу, что программа сделана под частный случай, стили текста в ней не анализируются.
Setvar вне форума  
 
Непрочитано 24.05.2018, 17:28
#34
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Цитата:
Сообщение от Setvar Посмотреть сообщение
Чтобы программа работала как с текстом, так и с мультитекстом, достаточно строку
....
заменить на строку...
Понятно. Еще раз спасибо.

Цитата:
Сообщение от Setvar Посмотреть сообщение
Замечу, что программа сделана под частный случай, стили текста в ней не анализируются.
А на что это влияет, в смысле чем грозит? Шрифт меняться будет или что? Это не важно.
CHESNOK вне форума  
 
Непрочитано 24.05.2018, 17:56
1 | #35
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Выравнивание в тексте и мтексте несколько разное. В мтексте может быть свое форматирование. Высота текста не проверяется, единицы чертежа не проверяются...
Возможно, все это не важно...
Setvar вне форума  
 
Непрочитано 24.05.2018, 18:50
#36
CHESNOK

Инженер-проектировщик автомобильных дорог, генпланист
 
Регистрация: 25.07.2014
Сообщений: 180


Цитата:
Сообщение от Setvar Посмотреть сообщение
Выравнивание в тексте и мтексте несколько разное. В мтексте может быть свое форматирование. Высота текста не проверяется, единицы чертежа не проверяются...
Возможно, все это не важно...
Я проверил со звездочкой все работает как надо, текст и мтекст смещаются строго по оси Y ни каких проблем не заметил. Спасибо
CHESNOK вне форума  
 
Непрочитано 26.05.2018, 03:24
#37
Stich_76


 
Регистрация: 30.07.2012
Сообщений: 1


Доброго всем дня! Подскажите, что нужно поменять в ЛИСПЕ для выравнивания текста по оси Х? Спасибо!
Stich_76 вне форума  
 
Непрочитано 01.06.2018, 11:03
#38
asas


 
Регистрация: 29.03.2018
Сообщений: 35


Цитата:
Сообщение от VVA Посмотреть сообщение
Тип файла: lsp CurveAlignedText.lsp (17.6 Кб, 867 просмотров)
Тип файла: lsp Dynamic Text Curve Align V2.9.lsp (67.2 Кб, 717 просмотров)
Здравствуите, помогите разобартъся с сим чудом, мне необходимо разместитъ поле над линиеи и чтобы поле было с привиазкои к линие, в поле хочу разместит обект с длинои линии. Возможно так сделатъ, если да то как? У меня автокад 2018, пыталса по описанию сделатъ, не получаетъса. Спасибо
asas вне форума  
 
Непрочитано 01.06.2018, 11:35
#39
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,888


Че?
Ну созайд опле, стаьвв его и томоп перемещай
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2018, 11:41
#40
asas


 
Регистрация: 29.03.2018
Сообщений: 35


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну созайд опле, стаьвв его и томоп перемещай
Спасибо, у меня линии под разными углами, когда нету привязки сложно выдержатъ ростояние до лини и чтобы по середине была надписъ
asas вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Текст вдоль полилинии или сплайна (по кривой)

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск