|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
18.09.2003, 05:42 | #1 | |
Как построить среднюю линию между непараллельными?
Сообщений: n/a
|
||
Просмотров: 38370
|
|
||||
Я так понимаю ,что эти две поллилинии - это профиля разрезов?
Единственное что приходит в голову если это конечно профиля) взять одну из полилинйй за базу, искать с определенным шагом расстояния по вертикали до другой линии ,и построить по ним результирующую(без сглаживания).Если идти с достаточно мелким шагом то результат будет приемлимым. |
||||
|
||||
проектирование дорог Регистрация: 18.10.2006
Riga
Сообщений: 25
|
Действительно ребята, очень нужен лисп! Так надоело выполнять однообразную работу, тратя по пол дня на такую мутоту! Помогите! На предыдущей картинке правильно нарисовано, только ещё необходимо, чтобы это было применимо к кривым! Заранее спасибо!
|
|||
|
||||
металлист Регистрация: 13.03.2006
Питер
Сообщений: 463
|
В составе СПДСграфикс есть команда средняя линия, и она работает как с прямыми, так и с дугами НО при наличии у дуг общего центра (что понятно - в противном случае получается уже кривая второго порядка, для которой и вычисления совсем другие и точного отображения в автогаде добиться не очень-то, даже при помощи сплайна)
__________________
(с) Чем шут не чертит |
|||
|
||||
YngIngKllr Регистрация: 29.03.2005
СПб
Сообщений: 12,968
|
Не думаю чтобы стандартными методами Компас сможет это решить.
Вы наверное не до конца прочли. Т.к. требуется сделать еще одну полилинию между двумя криволинейными (в смысле они продолжительные с множеством изгибов).
__________________
Работаю за еду. Working for food. Für Essen arbeiten. العمل من أجل الغذاء Працую за їжу. |
|||
|
||||
проектирование дорог Регистрация: 18.10.2006
Riga
Сообщений: 25
|
Лисп BI_LINE отлично работает, НО только для отрезков, а мне очень нужно для полилинии, причем эти плинии не пересекаются, что облегчает наверняка написание проги, пожалуйста помогите.
Вот примерно, что мне надо... [ATTACH]1161256558.dwg[/ATTACH] |
|||
|
||||
розмысл Регистрация: 12.06.2005
Иркутск
Сообщений: 1,973
|
Если задача эта разовая - для построения графика нужно построить одну кривую между двух других, то можно решить ее функцией Blend в Кореле или им подобных. Может это и не спортивно, зато эффективно. Пробовал. Получилось
------------------------------------ на каждого мудреца довольно просторы© |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
Что-то никто не вспомнил про привязку _m2p...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
проектирование дорог Регистрация: 18.10.2006
Riga
Сообщений: 25
|
К сожалению задача не разовая, а многократная, необходимая для построения горизонтальной разметки дорог в местах уширения дороги (где обочины дороги не параллельные). Пыталась строить в ручную, но ужасно припекло! Представье если трасса с пару десятков километров :?
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Пробуй
Код:
2. UCS не обрабатывается 3. Пересечения кривых не анализируются 4. Количество опорных точек - на сколько частей разбивается кривая для получения средней линии |
|||
|
||||
Регистрация: 12.01.2006
Донецк
Сообщений: 30
|
Попробуй вот это
Указываешь две полилинии и кол-во точек разбиения. Вызов: Command: PSW ;****************************************************************** ; AutoCAD 2000-2007 ; Автор : Пурошев Сергей ; Донецкий центр союза архитекторов Украины "Среда" ; E-mail [email protected] ;****************************************************************** ;************************************************************************ ; Функция возвращает: Точку середины отрезка Т1 Т2 ; Параметр - точки Т1 Т2 ;************************************************************************ (defun SEREDINA (TE1 TE2 / AA) (setq DX (/ (+ (car TE1) (car TE2)) 2.0)) (setq DY (/ (+ (cadr TE1) (cadr TE2)) 2.0)) (setq DZ 0.0) (if (and (/= (caddr TE1) NIL) (/= (caddr TE2) NIL)) (progn (setq DZ (/ (+ (caddr TE1) (caddr TE2)) 2.0)) ) ) (setq AA (list DX DY DZ)) ) ;END DEFUN ;***************************************************************** ; ОСНОВНАЯ ПРОГРАММА ; ОСНОВНАЯ ПРОГРАММА ; ОСНОВНАЯ ПРОГРАММА ;**************************************************************** (defun C:PSW (/ DX ED EN I LABEL N OB OB1 SL SSS SSS1 T0 T00 T1 T11 T12 T21 T22) (prompt "\nВыбери полилинию 1: ") (setq ob (car (entsel))) (prompt "\nВыбери полилинию 2: ") (setq ob1 (car (entsel))) (setq dx (GetInt "\nКоличество участков разбиения : ")) ;**************************************** (setq en (entget Ob)) (setq sl (cdr (assoc 8 en))) (setvar "CLAYER" sl) ;*************************************** (setq sss nil) (setq sss (ssadd)) ; создать набор (setq label (entlast)) ; поставить метку в DWG ;**************************************** (setvar "CECOLOR" "ByLayer") ;**************************************** (command "_divide" ob dx) ;************************************** (while ; переписать в набор (setq label (entnext label)) (setq sss (ssadd label sss)) ) ;**************************************** ;**************************************** ;**************************************** ;**************************************** (setq en (entget Ob1)) (setq sl (cdr (assoc 8 en))) (setvar "CLAYER" sl) ;*************************************** (setq sss1 nil) (setq sss1 (ssadd)) ; создать набор (setq label (entlast)) ; поставить метку в DWG ;**************************************** (setvar "CECOLOR" "ByLayer") ;**************************************** (command "_divide" ob1 dx) ;************************************** (while ; переписать в набор (setq label (entnext label)) (setq sss1 (ssadd label sss1)) ) ;**************************************** ;**************************************** (setq n (sslength sss)) (setq i (- n 1)) (setq i 0) (setq en (ssname sss i)) (setq ed (entget en)) (setq t11 (cdr (assoc 10 ed))) (setq en (ssname sss1 i)) (setq ed (entget en)) (setq t12 (cdr (assoc 10 ed))) (setq T0 (seredina T11 T12)) (command "PLINE" T0) (setq i 1) ;**************************************** (repeat (- n 1) (setq en (ssname sss i)) (setq ed (entget en)) (setq t11 (cdr (assoc 10 ed))) (setq en (ssname sss1 i)) (setq ed (entget en)) (setq t12 (cdr (assoc 10 ed))) (setq T0 (seredina T11 T12)) (command t0 ) (setq t00 t1) (setq i (+ i 1)) ) ;**************************************** (command "") ;(command "LINE" t11 t1 "") ;*************************************** ;(entdel ob) (command "ERase" sss "") (command "ERase" sss1 "") ;*************************************** (SetVar "FILEDIA" 1) (princ) ) |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
>Лентяй Это не простыни, а муки творчества
Вот причесанный вариант Код:
2. UCS обрабатывается !! 3. Пересечения кривых не анализируются 4. Количество опорных точек - на сколько частей разбивается кривая для получения средней линии ===== Добавлено ======= Совсем забыл про OSMODE. Теперь вспомнил |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как построить следующее тело?... | Shtirlitz | AutoCAD | 15 | 10.06.2013 13:09 |
Как из trace сделать обычную линию? | Нюра | AutoCAD | 1 | 06.09.2004 17:10 |
Подскажите как построить кривую с помощью команды SPLiNE, к | boban | Программирование | 1 | 02.11.2003 19:58 |
Как на LISPе автоматически выбрать линию и точку? | Mikhail | LISP | 4 | 28.10.2003 10:33 |