Как разорвать круг в автокаде

Обновлено: 07.07.2024

Такого вот хочется: рисуем произвольную полилинию.
Все объекты, которые она пересекает разрываются в точках пересечения.
IMHO, штука может быть полезной многим и часто, так что, думается, должен существовать LISP какой-нибудь (а может просто команда), но что-то не нашел ни в хелпе, ни поиском по форуму.
Есть что-нибудь в таком роде?

Не понимаю, как этим пользоваться :/
Набираю _.trim
просит выбрать объекты (видимо те, которые нужно обрезать?)
набираю "в", чтобы выбрал все, что есть.
Далее _f и прохожусь по точкам полилинии
далее что-то там долго обрабатывается, иногда выдается "Этот объект невозможно ОБРЕЗАТЬ" потом снова просит выбрать обрезаемый объект.
Заставить эту штуку разрезать все объекты (ну кроме текста и блоков, вряд ли их можно так просто разрезать), пересеченные определенной линий в точках пересечения у меня так и не получилось.

> kpblc
Опция "_fence" служит для выбора объектов, а не обрезания. Она же не образует режущую кромку.
А почему вы оба используете команду "_trim" ("обрезать"), ведь в названии темы и в вопросе говорится о разрыве ("_break")?

Вот блин, забыл поставить знак "?" в конце своего поста. Насчет _.break такой опции не знаю, хотя, SStas, я ж тебе вроде как делал лисп на получение пересечений объектов? Поменяй код, получи точки и выполняй _.break по каждому элементу набора.

> kpblc
Скорее всего не мне, т.к. я и сам не помню, чтобы мне это было когда-то нужно, и в архиве форума и почтового ящика не нашел ничего.

> kpblc
Ага, попробую разобрать, что же там написано и как это использовать %-)))

неужели кад такая мощная программа и не может разорвать по линии или хотя бы не стирала осеченные тримом куски, а превращала в отдельные линии, такое возможно?

> Дмитрий
Еще раз см.тему - команда ОБРЕЗАТЬ - отрезает часть линий по границе, заданной другими линиями (если конечно линия не полностью находится с одной стороны от линий)
Команда РАЗОРВАТЬ предлагает указанную линию разорвать между точкой выбора данной линии и второй точкой на данной линии (на два куска). Та же команда с автовводом параметров через кнопку панели позволяет РАЗОРВАТЬ В ТОЧКЕ на две части линейный/дуговой сегмент. Правда надо корректировать ЛИСПОМ макрос, чтоб по "Enter" повторялась та же последовательность, а не стандартный разрыв в 2-х точках. Так же Лиспом можно было бы попытаться сделать режим РАЗОРВАТЬ В ТОЧКЕ - НЕСКОЛЬКО :)
Ну а так, да, МОЖНО написать программку РАЗОРВАТЬ В ТОЧКАХ пересечений указанных полилинией.

Автор:

Разрыв выбранного объекта между двумя точками.

Между двумя указанные точками на объекте можно создать зазор, разделяющий объект на два объекта. Если точки находятся вне объекта, они автоматически проецируются на объект. Команда РАЗОРВАТЬ часто используется с целью создания пространства для вставки блока или текста.

Отображаемые запросы зависят от того, каким способом был выбран объект. При выборе объекта с помощью указывающего устройства программа выбирает точку, которая считается первой точкой разрыва. Отвечая на следующий запрос, можно либо указать вторую точку, либо изменить первую.

Замена исходной первой точки, в которой был выбран объект, на новую, выбранную пользователем.


Вторая точка Задание второй точки. Стирает часть объекта, лежащую между указанными точками. Если вторая указанная точка не принадлежит объекту, выбирается ближайшая точка на объекте. Поэтому для разрыва одного из концов линии, дуги или полилинии необходимо указать вторую точку за удаляемым концом.

Чтобы разбить объект на две части, ничего не удаляя, нужно указать вторую точку, совпадающую с первой. Это можно сделать с помощью ввода @ в ответ на запрос второй точки.

Команда РАЗОРВАТЬ работает с отрезками, дугами, кругами, полилиниями, эллипсами, сплайнами, кольцами и некоторыми другими типами объектов.

Программа преобразует окружность в дугу, удаляя ее часть от первой до второй точки против часовой стрелки.


Также можно разрывать выбранные объекты в одной точке, используя для этого инструмент "Разорвать в точке".

Допустимые объекты включают линии, разомкнутые полилинии и дуги. Замкнутые объекты, например окружности, невозможно разорвать в одной точке.

Насчет 3Д спирали. Она уже есть в 2007.
А программку 3D spiral для других версий мне подкорректировали на этом форуме, точно не помню кто, помоему kpblc или Александр Ривилис.
Смотри тему 3D spiral. Очень четко работает.
Ну вот преодолел лень и нашел

(defun myerror (s) ; If an error (such as CTRL-C) occurs
; while this command is active.
(if (/= s "Function cancelled")
(princ (strcat "\nError: " s))
) ;_ end of if
(setvar "cmdecho" ocmd) ; Restore saved modes
(setvar "blipmode" oblp)
(setq *error* olderr) ; Restore old *error* handler
(princ)
) ;_ end of defun

(defun cspiral (ntimes
bpoint
hfac
lppass
strad
vfac
/
ang
dist
tp
ainc
dhinc
dvinc
circle
dv
)

(setvar "blipmode" 0) ; turn blipmode off
(setvar "cmdecho" 0) ; turn cmdecho off
(setq circle (* PI 2.0))
(setq ainc (/ circle lppass))
(setq dhinc (/ hfac lppass))
(if vfac
(setq dvinc (/ vfac lppass))
) ;_ end of if
(setq ang 0.0)
(if vfac
(setq dist strad
dv 0.0
) ;_ end of setq
(setq dist 0.0)
) ;_ end of if
(if vfac
(command "_.3dpoly") ; start spiral .
(command "_.pline" "_none" bpoint) ; start spiral from base point and.
) ;_ end of if
(repeat (fix (+ ntimes 1e-6))
(repeat lppass
(setq tp (polar bpoint ang dist))
(setq ang (+ ang ainc))
(setq dist (+ dist dhinc))
(if vfac
(setq tp (list (car tp) (cadr tp) (+ dv (caddr tp)))
dv (+ dv dvinc)
) ;_ end of setq
) ;_ end of if
(command "_none" tp) ; continue to the next point.
) ;_ end of repeat
) ;_ end of repeat
(setq nlast (abs (- ntimes (fix ntimes))))
(repeat (1+ (fix (+ 1e-6 (* lppass nlast))))
(setq tp (polar bpoint ang dist))
(setq ang (+ ang ainc))
(setq dist (+ dist dhinc))
(if vfac
(setq tp (list (car tp) (cadr tp) (+ dv (caddr tp)))
dv (+ dv dvinc)
) ;_ end of setq
) ;_ end of if
(command "_none" tp) ; continue to the next point.
) ;_ end of repeat
(command "") ; until done.
(princ)
) ;_ end of defun

;;;
;;; Interactive spiral generation
;;;

(defun C:SPIRAL1 (/ olderr ocmd oblp nt bp cf lp)
;;;;(setq olderr *error*
;;;; *error* myerror)
(setq ocmd (getvar "cmdecho"))
(setq oblp (getvar "blipmode"))
(setvar "cmdecho" 0)
(initget 1) ; bp must not be null
(setq bp (getpoint "\nCenter point: "))
(initget 7) ; nt must not be zero, neg, or null
(setq nt (getreal "\nNumber of rotations: "))
(initget 3) ; cf must not be zero, or null
(setq cf (getdist "\nGrowth per rotation: "))
(initget 6) ; lp must not be zero or neg
(setq lp (getint "\nPoints per rotation <30>: "))
(cond ((null lp) (setq lp 30)))
(cspiral nt bp cf lp nil nil)
(setvar "cmdecho" ocmd)
(setvar "blipmode" oblp)
(setq *error* olderr) ; Restore old *error* handler
(princ)

;;;
;;; Interactive spiral generation
;;;

(defun C:3DSPIRAL1 (/ olderr ocmd oblp nt bp hg vg sr lp)
;;;;(setq olderr *error*
;;;; *error* myerror)
(setq ocmd (getvar "cmdecho"))
(setq oblp (getvar "blipmode"))
(setvar "cmdecho" 0)
(initget 1) ; bp must not be null
(setq bp (getpoint "\nCenter point: "))
(initget 7) ; nt must not be zero, neg, or null
(setq nt (getreal "\nNumber of rotations: "))
(initget 7) ; sr must not be zero, neg, or null
(setq sr (getdist bp "\nStarting radius: "))
(initget 1) ; cf must not be zero, or null
(setq hg (getdist "\nHorizontal growth per rotation: "))
(initget 3) ; cf must not be zero, or null
(setq vg (getdist "\nVertical growth per rotation: "))
(initget 6) ; lp must not be zero or neg
(setq lp (getint "\nPoints per rotation <30>: "))
(cond ((null lp) (setq lp 30)))
(cspiral nt bp hg lp sr vg)
(setvar "cmdecho" ocmd)
(setvar "blipmode" oblp)
(setq *error* olderr) ; Restore old *error* handler
(princ)

Автор:

Разрыв выбранного объекта между двумя точками.

Между двумя указанные точками на объекте можно создать зазор, разделяющий объект на два объекта. Если точки находятся вне объекта, они автоматически проецируются на объект. Команда РАЗОРВАТЬ часто используется с целью создания пространства для вставки блока или текста.

Отображаемые запросы зависят от того, каким способом был выбран объект. При выборе объекта с помощью указывающего устройства программа выбирает точку, которая считается первой точкой разрыва. Отвечая на следующий запрос, можно либо указать вторую точку, либо изменить первую.

Замена исходной первой точки, в которой был выбран объект, на новую, выбранную пользователем.


Вторая точка Задание второй точки. Стирает часть объекта, лежащую между указанными точками. Если вторая указанная точка не принадлежит объекту, выбирается ближайшая точка на объекте. Поэтому для разрыва одного из концов линии, дуги или полилинии необходимо указать вторую точку за удаляемым концом.

Чтобы разбить объект на две части, ничего не удаляя, нужно указать вторую точку, совпадающую с первой. Это можно сделать с помощью ввода @ в ответ на запрос второй точки.

Команда РАЗОРВАТЬ работает с отрезками, дугами, кругами, полилиниями, эллипсами, сплайнами, кольцами и некоторыми другими типами объектов.

Программа преобразует окружность в дугу, удаляя ее часть от первой до второй точки против часовой стрелки.


Также можно разрывать выбранные объекты в одной точке, используя для этого инструмент "Разорвать в точке".

Допустимые объекты включают линии, разомкнутые полилинии и дуги. Замкнутые объекты, например окружности, невозможно разорвать в одной точке.

Читайте также: