Тема: Разделить полилинию
Есть длиная полилиния мне надо разделить ее на 2 полилинии чтобы одна из них имела определеную длину которую надо задать
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Разделить полилинию
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Есть длиная полилиния мне надо разделить ее на 2 полилинии чтобы одна из них имела определеную длину которую надо задать
Есть длиная полилиния мне надо разделить ее на 2 полилинии чтобы одна из них имела определеную длину которую надо задать
Это довольно сложно сделать на VBA
Нужно использовать 2 классса: Vlax.cls и Curve.cls
(ищи в Google)
На лиспе это гораздо проще, кстати в этих классах
тоже используются лисп выражения
Если устроит лисп - могу написать
~'J'~
Скопируй код, вставь в блокнот и сохрани как pbreak.lsp
запуск будет осуществляться автоматически:
Используй Tools --> Autolisp --> Load Applications
;; pbreak.lsp ;; Разрыв полилинии в точке заданной по длине отсекаемой части (defun pbreak (/ cutpt dis endpt ent leng pickpt) (if (and (setq ent (entsel "\n\t\t>> Выбрать полилинию ближе к нужному началу: ")) (setq dis (getreal "\n\t\t>> Установить новую длину: "))) (progn (setq pickpt (cadr ent)) (setq ent (car ent)) (if (not (eq "LWPOLYLINE" (cdr (assoc 0 (entget ent))))) (progn (alert "Выбранный объект не является LWPOLYLINE") (exit) (princ) ) ) (setq leng (vl-catch-all-apply (function (lambda () (vlax-curve-getdistatparam ent (- (vlax-curve-getendparam ent) (vlax-curve-getstartparam ent))))))) (if (>= dis leng) (progn (alert "Новая длина превышает исходную") (exit) (princ) ) ) (princ (strcat "\nСуществующая длина = " (rtos leng 2 3) "; Новая длина = " (rtos dis 2 3)) ) (progn (if (not (vl-catch-all-error-p (setq cutpt (vl-catch-all-apply (function (lambda () (vlax-curve-getclosestpointto ent (vlax-curve-getpointatdist ent dis)))))))) (progn (if (> (- (vlax-curve-getdistatpoint ent (vlax-curve-getclosestpointto ent pickpt) ) (vlax-curve-getdistatparam ent (vlax-curve-getstartparam ent) ) ) (- (vlax-curve-getdistatparam ent (vlax-curve-getendparam ent) ) (vlax-curve-getdistatpoint ent (vlax-curve-getclosestpointto ent pickpt) ) ) ) (progn (setq dis (- leng dis)) (setq cutpt (vl-catch-all-apply (function (lambda () (vlax-curve-getclosestpointto ent (vlax-curve-getpointatdist ent dis)))))) ) ) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)) ) (command "_.break" ent "_non" cutpt "@") ) ) ) ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) ) (prompt "\n >>> Разрыв полилинии в точке заданной по длине отсекаемой части <<<") (prin1) (vl-load-com) (pbreak)
~'J'~
у меня 2007 рус автокад вот че пишет
Команда: _appload pbreak.lsp успешно загружено.
Команда:
>>> Разрыв полилинии в точке заданной по длине отсекаемой части <<<
>> Выбрать полилинию ближе к нужному началу:
>> Установить новую длину: 100
Существующая длина = 8532.094; Новая длина = 100.000_.break Выберите объект:
Первая точка разрыва: _non
Режим не определен для заданной точки.
Неверная точка.
; ошибка: Функция отменена
Первая точка разрыва:
Команда:
Alex GV, тебе же на DWG.ru уже писали код в твоей же теме Разделение полилинии и проблема не в коде, а в твоём AutoCAD-е, надо решать её, а не просить людей писать один и тот же код на разных форумах.
у меня 2007 рус автокад вот че пишет
Команда: _appload pbreak.lsp успешно загружено.
Команда:
>>> Разрыв полилинии в точке заданной по длине отсекаемой части <<<
>> Выбрать полилинию ближе к нужному началу:
>> Установить новую длину: 100
Существующая длина = 8532.094; Новая длина = 100.000_.break Выберите объект:
Первая точка разрыва: _non
Режим не определен для заданной точки.
Неверная точка.
; ошибка: Функция отменена
Первая точка разрыва:
Команда:
Попробуй убрать "_non" из тела команды
(У меня аглицкий Автокад)
~'J'~
Попробуй убрать "_non" из тела команды
(У меня аглицкий Автокад)
По идеи "_non" работает и в локализованных версиях, но может у Alex GV криво русифицированная, как вариант написать вместо "_non" "нич" - это русифицированный вариант.
Цитата
fixo пишет:
Попробуй убрать "_non" из тела команды
(У меня аглицкий Автокад)
По идеи "_non" работает и в локализованных версиях, но может у Alex GV криво русифицированная, как вариант написать вместо "_non" "нич" - это русифицированный вариант.
"нич" это прикольно :)
~'J'~
все равно пишет тоже самое буду тогда переставлять автокад всем большое спасибо!!!!!
все равно пишет тоже самое буду тогда переставлять автокад всем большое спасибо!!!!!
Дай знать потом как будет работать и что надо изменить
~'J'~
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Разделить полилинию
Форум работает на PunBB, при поддержке Informer Technologies, Inc