Вставка точек пересечения в характерные линии
- Выберите вкладку «Редактирование» панель «Редактировать геометрию» элемент «Вставить ТП» найти .
- Выберите характерную линию или другой объект. На экране отображаются временные графические объекты.
- Введите отметку для точки.
- Введите Поверхность , чтобы определить отметку относительно поверхности в чертеже.
Прим.: Если выбранным объектом является 3D полилиния, запросы на ввод отметки не выводятся.
Вставка точек пересечения на место пересечения
- Выберите вкладку «Редактирование» панель «Редактировать геометрию» элемент «Вставить ТП» найти .
- Воспользуйтесь командой «ПРИВЯЗКА» для выбора точки пересечения. На экране отображаются временные графические объекты.
- Нажмите левую кнопку мыши для вставки ТП.
На уровень выше: Изменение характерной линии
Понятия, связанные с данным
- Вставка точек пересечения на характерные линии
- Прореживание вершин характерных линий
- Изменение характерной линии
Команда AutoCAD «Пересечение». Булевые операции
Логические операции AutoCAD объединение, вычитание и пересечение позволяют создавать составные объекты. Они представляют собой новую, нестандартную форму 3d-модели в результате слияния/вычитания нескольких объемов. Детально рассмотрим создание 3д-модели в Автокаде с помощью «Пересечения».
Трехмерное моделирование в AutoCAD посредством пересечения объектов
Команда «Пересечение» находится на вкладке «Главная» — панель «Редактирование тела». С ее помощью можно выполнить построение 3d-моделей в AutoCAD за счет вычленения объема, общего для двух или более пересекающихся объектов.
В данном самоучителе AutoCAD 3d уже описывался алгоритм выполнения логических команд. Что касается «Пересечения», то последовательность действий такая же, как и в случае с объединением объектов:
- нужно выделить все объекты, пересечение которых хотим оставить;
- затем нажать Enter (см. рис.).
Полное обучение: «AutoCAD на 100%»
Результат данной операции представлен на рис. ниже:
3d-модели AutoCAD с помощью пересечения смежных объектов получать легко, если следовать алгоритму выполнения команды. В завершение темы отмечу, что операция «Пересечение» не пользуется такой популярностью, как две другие команды, хотя порой бывает весьма полезна.
Установка значка в месте пересечения линий
Подскажите как установить значок, например полуокружность в месте пересечения линий в автокаде 2014. Имею ввиду автоматическую установку значка в местах пересечений, чтобы в ручную рисовать не приходилось.
Всем заранее спасибо за ответы.
Последний раз редактировалось Юрий Долгорукий, 02.02.2018 в 10:09 .
Просмотров: 4980
Юрий Долгорукий |
Посмотреть профиль |
Найти ещё сообщения от Юрий Долгорукий |
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Вариант 1. Нарисовать руками
Вариант 2. Создать блок и вставить
Вариант 3. Поискать по форуму среди «готовых программ»
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 02.02.2018
Сообщений: 9
Сообщение от Кулик Алексей aka kpblc
Вариант 1. Нарисовать руками
Вариант 2. Создать блок и вставить
Вариант 3. Поискать по форуму среди «готовых программ»
Хороший ответ) но я имел ввиду автоматическую прорисовку. Внесу изменения в тему.
Юрий Долгорукий |
Посмотреть профиль |
Найти ещё сообщения от Юрий Долгорукий |
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
В чистом ACAD штатных средств для этого нет и не было.
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 02.02.2018
Сообщений: 9
Сообщение от Кулик Алексей aka kpblc
В чистом ACAD штатных средств для этого нет и не было.
Может у кого есть написанный скрипт? Прошу поделиться.
Юрий Долгорукий |
Посмотреть профиль |
Найти ещё сообщения от Юрий Долгорукий |
Регистрация: 10.08.2013
Сообщений: 11,015
Сообщение от Юрий Долгорукий
но я имел ввиду автоматическую прорисовку. Внесу изменения в тему.
4. Написать надстройку (основанную на событиях/реакторах), которая:
— отслеживает создание очередной полилинии
— проверяет по определенным критериям (например, слою) — подлежит ли она обработке
— ищет пересечения с другими полилиниями с заданными условиями. Если найдено — строит полуокружность и вписывает ее в полилинию.
5. Пользоваться программами, где это уже реализовано, типа Акад Электрикал. Подозреваю, что речь идет о схемах?
Регистрация: 02.02.2018
Сообщений: 9
Сообщение от Сергей812
4. Написать надстройку (основанную на событиях/реакторах), которая:
— отслеживает создание очередной полилинии
— проверяет по определенным критериям (например, слою) — подлежит ли она обработке
— ищет пересечения с другими полилиниями с заданными условиями. Если найдено — строит полуокружность и вписывает ее в полилинию.
5. Пользоваться программами, где это уже реализовано, типа Акад Электрикал. Подозреваю, что речь идет о схемах?
Да, все верно — необходимо прорисовывать схемы соединений. Получается много пересечений, отслеживать каждую линию очень неудобно.
Сообщение от Сергей812
4. Написать надстройку (основанную на событиях/реакторах), которая:
— отслеживает создание очередной полилинии
— проверяет по определенным критериям (например, слою) — подлежит ли она обработке
— ищет пересечения с другими полилиниями с заданными условиями. Если найдено — строит полуокружность и вписывает ее в полилинию.
5. Пользоваться программами, где это уже реализовано, типа Акад Электрикал. Подозреваю, что речь идет о схемах?
Да, все верно. Разрабатываю схемы соединений, пересечений очень много.
Да, разрабатываю схемы соединений.
Юрий Долгорукий |
Посмотреть профиль |
Найти ещё сообщения от Юрий Долгорукий |
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989
полувручную
(defun c:jumper (/ *error* A AENT B1 B2 BDIS BENT DOC ENT OV P1 P2 UFLAG VL O W) (setq bDis 0.5) ;; Arc Radius (Break Distance / 2.0 ) (defun *error* (msg) (and uFlag (vla-EndUndoMark doc)) (and ov (mapcar (function setvar) vl ov)) (and msg (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **")))) (princ)) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) vl '("PEDITACCEPT" "CMDECHO" "OSMODE") ov (mapcar (function getvar) vl)) (setvar "PEDITACCEPT" 1) (while (and (setq uFlag (not (vla-StartUndoMark doc))) (mapcar (function setvar) (cdr vl) '(0 32)) (setq p1 (getpoint "\nPick INTERSECTION: ")) (setq ent (entsel "\nPick LINE TO BREAK: "))) (setq p2 (osnap (cadr ent) "_nea") b1 (polar p1 (setq a (angle p1 p2)) bDis) b2 (polar p1 (+ pi a) bDis)) (setvar "OSMODE" 0) (command "_.break" b1 b2) (setq bEnt (entlast)) (if (> a (/ pi 2.)) (command "_.arc" b2 "_E" b1 "_A" 180.) (command "_.arc" b1 "_E" b2 "_A" 180.)) (setq aEnt (entlast)) (if (eq "LWPOLYLINE" (cdr (assoc 0 (entget (setq ent (car ent)))))) (progn (setq w (vla-get-ConstantWidth (setq o (vlax-ename->vla-object ent)))) (command "_.pedit" "_M" bEnt aEnt ent "" "_J" "" "") (vla-put-ConstantWidth (vlax-ename->vla-object (entlast)) w))) (setq uFlag (vla-EndUndoMark doc))) (*error* nil) (princ))(defun c:brc (/ obj rad e pt rf pt1 pt2 arc gr mode data) (vl-load-com) (setq osm (getvar 'osmode)) (setvar 'osmode 32) (setq obj (car (entsel "\nSelect Object to break:"))) (Setq rf (getpoint "\nPick center point of arc:")) (setq rad (getdist "\nEnter Radius value/Pick two points: ")) (setq pt (vlax-curve-getClosestPointTo (setq e obj) rf) rf (+ (vlax-curve-getdistatPoint e pt) rad) ) (command "_arc" "_non" (setq pt1 (vlax-curve-getPointAtDist e rf)) "_e" "_non" (setq pt2 (vlax-curve-getPointAtDist e (- rf (* rad 2)))) "_r" rad ) (setq arc (entlast) tr 0 ) (prompt "\nMove Mouse up and down to flip") (while (progn (setq gr (grread t 15 0) mode (car gr) data (cadr gr) ) (cond ((= 5 mode) (if ((if (zerop tr) < >) pi (angle pt data) ) (setq tr (boole 6 1 tr) ro (vlax-invoke (vlax-ename->vla-object arc) 'rotate pt pi ) ) ) T ) ((member mode '(2 3)) nil) ) ) ) (command "_break" obj pt1 pt2) (setvar 'osmode osm) (princ) )----- добавлено через ~20 мин. -----
ещё(defun c:peres (/ o a ap xy1 xy2 l l4 crug crug2 edge2 line1 line2 line6 layer0) (vl-load-com) ;;; (load "_dwgru-conv-ent-to-vla") (setq oldsnap (getvar "osmode")) (setq oldlayer (getvar "clayer")) (setq oldcolor (getvar "cecolor")) (setq oldecho (getvar "cmdecho")) (setq oldecho (getvar "cmdecho")) (setq oldaperture (getvar "aperture")) (setq oldedgemode (getvar "edgemode")) (setvar "cmdecho" 0) (setq mashtabx (getvar "CANNOSCALEVALUE")) (while (null l) (if (null vopros) (setq vopros "Yes") ) ;_ конец if (initget "O") (princ (strcat "\n СКОБКИ: " vopros)) (setq l (nentsel "\n Выберите разрываемую линию вблизи точки пересечения [Option]: " ;Выбор линии ) ;_ конец nentsel ) ;_ конец setq (if (eq l "O") (progn (initget 1 "Yes No") (setq vopros (getkword "\n Рисовать скобку [Yes/No]: ") l nil ) ;_ конец setq ) ;_ конец progn ) ;_ конец if ) ;_ конец while (setq xy1 (car (cdr l))) (setvar "aperture" 50) (setvar "osmode" 2080) (setq a (/ 0.5 mashtabx)) (setvar "clayer" (vla-get-layer (_dwgru-conv-ent-to-vla (car l)))) (setvar "cecolor" (itoa (vla-get-color (_dwgru-conv-ent-to-vla (car l)))) ) ;_ конец setvar (command "_circle" xy1 a) (setq xy1 (getvar "lastpoint")) (setq l4 (list (car l) xy1)) (setq line1 (ssget "_l")) (command "_trim" line1 "" l4 "") (setq crug (ssget "_p")) (setq line2 (ssget "_l")) (setvar "EDGEMODE" 1) (setq xy2 (list (- (car xy1) (* mashtabx 0.1)) (- (car (cdr xy1)) a) (cadr (cdr xy1)) ) ;_ конец list ) ;_ конец setq (setq crug3 (list (cadr (car (ssnamex crug))) xy2)) (setq line6 (cdr (cadr (entget (cadr (car (ssnamex line2))))))) (if (eq vopros "No") (command "_erase" crug "") (command "_trim" line2 "" crug3 "") ) ;_ конец if (if (or (eq "LINE" line6) (eq "LWPOLYLINE" line6)) (princ) (progn (princ "\n ОШИБКА: Выбранный объект не является линией, либо не найдена точка пересечения!" ) ;_ конец princ (command "_undo" 3) ) ;_ конец progn ) ;_ конец if (setvar "osmode" oldsnap) (setvar "cecolor" oldcolor) (setvar "cmdecho" oldecho) (setvar "osmode" oldsnap) (setvar "aperture" oldaperture) (setvar "edgemode" oldedgemode) (princ) ) (defun _dwgru-conv-ent-to-vla (ent) ;| * Выполняет преобразование переданного указателя в vlax-вариант * Параметры вызова: ent обрабатываемый указатель. Может быть: ename vla-object строка (воспринимается как хендл примитива). * Примеры вызова: (setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint))))) (_dwgru-conv-ent-to-vla entity) ; # |; (cond ((= (type ent) 'vla-object) ent) ((= (type ent) 'ename) (vlax-ename->vla-object ent)) ;| ;; Оригинальный вариант: ((= (type ent) 'str) (vlax-ename->vla-object (handent ent))) |; ;; Исправления Alaspher от 28.11.2007. Начало. ((= (type ent) 'str) (if (setq ent (handent ent)) (vlax-ename->vla-object ent) ) ;_ end of if ) ;; Исправления Alaspher от 28.11.2007. Конец (t nil) ) ;_ end of cond ) ;_ end of defunПоследний раз редактировалось Nike, 02.02.2018 в 10:38 .
Как смастерить пересечение линий
Я конечно чайник в Автокаде, может быть вопрос банальный, но все же: как сделать так, чтобы при пересечении линий на чертеже в месте этого пересечения рисовался полукруг (требует заказчик). То есть одна линия остается прямой, а другая при пересечении "огибает" первую.
#2 Ответ от murzic 28 октября 2003г. 14:32:49
Re: Как смастерить пересечение линий
в отдел Lisp обратись если хочешь чтобы было атоматически
#3 Ответ от DronT 29 октября 2003г. 09:45:39
Re: Как смастерить пересечение линий
а ты лисп знаешь?
есть такая функция- (inters t1 t2 t3 t4). попробуй её. если nill возвратит- они не пересекаются. а если пересекаются- то точку пресечения.
если конечно лисп знаешь.#4 Ответ от Александр 29 октября 2003г. 12:33:04
Re: Как смастерить пересечение линий
Да челу надо принципиальные схемы рисовать. Если просто проводки пересекаются - полукруг, если стыкуются - точка. Можно лиспу написать, чтобы при вставке блока- полукруга обрезала линию по краям, но вставлять все равно ручками.
#5 Ответ от Vova 29 октября 2003г. 15:01:05
Re: Как смастерить пересечение линий
Mожно сделать блок в виде полуокружности, которым затем оттриматьучасток линии. Если предстоит большая работа, процесс можно автоматизировать. Аналогичный вопрос был здесь, на этом форуме, месяца 3 назад. Спрашивали, как блоком прорезать линию под собой. Поищи по поиску словом Блок. Была предложена LISP-ка.
Как прорезать линию блоком будет показано в моей книге, которая вскоре должна выйти и главу из которой (не по теме блока) можно увидеть здесь: http://www.cad.dp.ua/stats/diesel.html и оценить стиль и манеру изложения#6 Ответ от AndrewP 29 октября 2003г. 15:11:39
Re: Как смастерить пересечение линий
Autodesk Building System это делает, Plant 4D это делает и еще куча программ, предназначенных для рисования принципиальных схем. Зачем велосипед-то изобретать?
#7 Ответ от VH 29 октября 2003г. 19:17:22
Re: Как смастерить пересечение линий
(defun C:LINECROSS () (while (progn (setq e0 nil d0 nil) (if (setq e0 (car (entsel "\nSelect LINE: "))) ;выбор Отрезка (progn (prompt "\nThis is NOT a LINE.") (not (= (cdr (assoc 0 (setq d0 (entget e0)))) "LINE")))))) (if e0 (progn (setq sp0 (cdr (assoc 10 d0)) ep0 (cdr (assoc 11 d0))) ;начальная и конечная точки Отрезка (grdraw sp0 ep0 1 1) ;выделение Отрезка (prompt "\nSelect crossing LINES. ") (setq ss (ssget (list '(0 . "LINE")))) ;выбор пересекающих отрезков (if ss ;отрезки выбраны (progn (setq dist_list ()) ;список_расстояний в формате ((длина координаты_точки_пересечения). ) (setq i 0) (repeat (sslength ss) (setq d (entget (setq e (ssname ss i)))) ;сведения об очередном отрезке (setq sp (cdr (assoc 10 d)) ep (cdr (assoc 11 d))) ;начальная и конечная точки очередного отрезка (if (setq cp (inters sp0 ep0 sp ep T)) ;точка_пересечения есть (if (not (apply 'or (mapcar '(lambda (_p) (equal (distance cp _p) 0.0 1e-13)) (list sp0 ep0 sp ep)))) ;очередной отрезок не примыкает и не проходит через концы Отрезка (setq dist_list (cons (cons (distance sp0 cp) cp) dist_list)))) ; пополнение списка_расстояний (setq i (1+ i))) (setq radius (if (setq new_radius (progn (initget (+ (if (> radius 0.0) 0 1) 2 4)) (getreal (strcat "\nRadius" (if (> radius 0.0) (strcat " ") "") ": ")))) ;радиус дуги new_radius radius)) (setq lwpline_list (mapcar 'cons (list 0 100 67 410 8 100 90 70 43 38 39) (list "LWPOLYLINE" "AcDbEntity" (cdr (assoc 67 d0)) (cdr (assoc 410 d0)) (cdr (assoc 8 d0)) "AcDbPolyline" 0 0 0.0 0.0 0.0))) ;"заголовок" полилинии (setq vertex_count 0) ;количество вершин (setq lwpline_list (append lwpline_list (mapcar 'cons (list 10 40 41 42) (list sp0 0.0 0.0 0.0))) ;первая вершина полилинии vertex_count (1+ vertex_count)) (while dist_list ;точки пересечения не кончились (setq prox_list (assoc (apply 'min (mapcar 'car dist_list)) dist_list)) ;обнаружение очередной ближайшей к начальной точке Отрезка точки_пересечения (setq cp (cdr prox_list)) ;координаты точки_пересечения (setq lwpline_list (append lwpline_list (mapcar 'cons (list 10 40 41 42) (list (polar cp (angle cp sp0) radius) 0.0 0.0 1.0))) ;сегмент от точки_пересечения в сторону начальной точки (дуговой) vertex_count (1+ vertex_count)) (setq lwpline_list (append lwpline_list (mapcar 'cons (list 10 40 41 42) (list (polar cp (angle cp ep0) radius) 0.0 0.0 0.0))) ;сегмент от точки_пересечения в сторону конечной точки (линейный) vertex_count (1+ vertex_count)) (setq dist_list (apply 'append (mapcar '(lambda (_x) (if _x (list _x))) (subst nil prox_list dist_list))))) ;сокращение списка_расстояний (setq lwpline_list (append lwpline_list (mapcar 'cons (list 10 40 41 42) (list ep0 0.0 0.0 0.0))) ;последняя вершина полилинии vertex_count (1+ vertex_count)) (setq lwpline_list (append lwpline_list (mapcar 'cons (list 210) (list '(0 0 1))))) ;нормаль (setq lwpline_list (subst (cons 90 vertex_count) (assoc 90 lwpline_list) lwpline_list)) ;замена количества вершин (entmake lwpline_list) ;создание полилинии (entdel e0))) ;удаление Отрезка (redraw) ;стирание фантомного отрезка ) ) (prin1) )Выбираете Отрезок, который будет "огибать" поперечные отрезки (прочие типы объектов игнорируются). Он подсвечивается красным. Затем выбираете поперечные отрезки. Они подсвечиваются. Задаете радиус (можно использовать значение по умолчанию). Отрезок (в целях сохранения целостности) заменяется полилинией (с дуговыми сегментами в местах пересечений). Отрезки, заканчивающиеся точно на линии Отрезка, а также проходящие через конечные точки Отрезка, игнорируются.