Вроде как тоже внезапно возник вопрос, вроде как и пролетало уже на форуме но никак не найду... Знатоки подскажите какой командой обьеденить кучу отрезков в одну линию...
Без всяких надстроек, стандартными средствами автокада это делается так: - одним из отрезков (или ломаной) должна быть полилиния (на скрине красным полилиния, белым линии), прочие отрезки могут быть линиями или полилиниями, а также полилинией из нескольких отрезков. Все отрезки должны находиться на одной высоте и стыковаться между собой без зазоров. либо двойной клик левой клавишей мыши на полилинии; далее добавить; далее выбираем все отрезки и два раза Enter либо второй вариант, вводим в командной строке автокад команду ПОЛРЕД; далее выбираем полилинию; далее добавить; далее выбираем все отрезки и два раза Enter До объединения: После объединения: Или ещё один из вариантов (полилиния в центре): До После
Philin, не соглашусь. Если отрезков несколько, то может быть и да. Прям сейчас эти и занимаюсь. Достался мне чертеж, после неизвестной программы. Там куча отрезков, они в разных местах, около 4000. Контуры дамбы, откосы, и прочая лабудень. Я просто всё выбрал, и мне объединило в полилинии. Корректировки совсем мало, где-то конец контура дамбы прилепился к штриху откоса. Причем, всё было в одном слоё и одним цветом и типом линии. Этими приблудами я разделил всё по слоям: откосы и контуры. Тем более, они бесплатные, и кроме того, там ещё много полезных функций, которых, ой как не хватает голому Автокаду.
Раз пошла такая пьянка, то еще один вопрос, команда или утилита чтобы натыкала точек по концам выбранных отрезков, или изломов полилинии.
Код на лиспе для вставки блоков в вершины полилиний Но эта прога только для полилиний - отрезки не сделает. И каждую полилинию указывать придется. Блок можно сделать в виде точки. После расстановки их взорвать. Но, может подойдет вставлять точки на пересечениях? Отрезки, правда, тоже не обработает. А зачем вообще точки расставлять? Зачем эти точки нужны?
Код: (defun C:ptovert (/ ob get-coor del-repeats) (setq ob (ssget '((0 . "LWPOLYLINE,LINE"))) ob (vl-remove-if 'listp (mapcar 'cadr (ssnamex ob))) get-coor (Lambda (o) (mapcar (function cdr) (vl-remove-if-not (function (lambda (x) (or (= (car x) 10) (= (car x) 11)))) (entget o) ) ) ) del-repeats (lambda (x / l) (while x (setq l (cons (car x) l) x (vl-remove (car x) x) ) ) l ) ) (mapcar (function (lambda (a) (entmake (LIST '(0 . "POINT") (CONS 10 a)))) ) (del-repeats (apply 'append (mapcar (function (lambda (x) (get-coor x))) ob) ) ) ) (princ) ) Запуск: _ptovert
Суть проблемы такова есть файл автокада , есть лисп который придаёт отметку точкам по ближайшему тексту - но конкретно в этом файле почему то работает не корректно , проставляет не те отметки (думаю что то с настройками не то ) , скопировал в другой файл всё работает как нужно !!! Часть файла и лисп прилагаю - если кто может разобраться подскажите а то уж очень интересно почему так
Robkiy, заморозьте слой "Номер1" (у Вас выключен), т.к. программа принимает значение Z из текстов номеров точек.
вопросы банальные, поэтому тут спрошу: 1) стандартными средствами автокада выделить все объекты на слое. не, через быстрый выбор можно, но выходит раза четыре тыкать, с торможением - долго выходит. Нужно одной кнопкой, щелчком по объекту выделить все объекты слоя, ну или изолировать слой. Можно лиспом. 2) Почему в некоторых чертежах при переходе в модель, или внутрь видового экрана изображение каждый раз уменьшается до "показать все"?
1. Панель "Слои-2" (см. скрин) 2. В пространстве листа активировать видовой экран и ввести и системную переменную UCSFOLLOW в 0
Читаем вопрос внимательно: Иван, на слое могут быть разные примитивы, всех не уследишь. Selsim'ом пока переберешь, всё равно что быстрым выбором. sergtor, изоляция слоя это не выбор, а только отключение всех слоев и оставление включенным нужного. А потом что? Рамкой выделять? Муторно это. Можно. Держи. Код: ;******************* sel_lay.lsp ***************************************** ; Выбор всех объектов на слое выбранного объекта. ; Автор Владимир Громов. ; (defun C:SEL_LAY ( / echo sen ent lay ss len da) (setq echo (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n Определение слоя по объекту.") (setq sen (entsel " Выберите нужный объект: ")) (if sen (progn (setq ent (entget (car sen))) (setq lay (cdr (assoc 8 ent))) (setvar "CLAYER" lay) (setq ss (ssget "_X" (list (cons 8 lay)))) (setq len (sslength ss)) (sssetfirst nil ss) (initget 6 "Да Нет Yes No _ Yes No") (setq da (getkword "\n Отключить остальные слои? [Да/Нет] <Да>: ")) (if (or (= da "Yes") (= da nil)) (progn (vl-cmdf "_-LAYER" "_OF" "*" "_Y" "") (vl-cmdf "_-LAYER" "_ON" LAY "") )); if da (sssetfirst ss ss) (princ "\n Слой: ") (princ lay) (princ " Количество объектов = ") (princ len) ) (princ "\n Объект не выбран!") ); if sen (setvar "cmdecho" echo) (princ) ) ;;;Возможный макрос для кнопки или пункта меню: ;;;^C^C^P(if (not C:SEL_LAY) (load "sel_lay")) SEL_LAY