ИМХО проще разбить блоки и перенести примитивы на отдельный слой, если эти примитивы - замкнутые многоугольники - вот вам и решение, через бВыбор можно отсеять не нужное.
Если я правильно понял - бокс это внешний контур блока (всегда прямоугольник). Если блок вытянутый и его повернуть , то бокс может поменять площадь (увеличиться или уменьшиться до 2 раз)
Попробовал - боксы получились больше видимого габарита блока. В определении блоков есть скрытые атрибуты, но они мелкие, не увеличивают площадь. Вроде бы ничто другое за видимый контур этих блоков не высовывается. И хорошо бы команду-название lisp сразу сделать не "box", а другое - есть такая команда AutoCAD для 3D. Идея построить внешние контуры, и ими оперировать была и у меня. Но это другая задача, не требующая и решений - есть в Быстром выборе.
Называйте как хотите. Идея в том, что определив площади габаритов боксов, создать список типа (площадь1 имя1, площадь2 имя2...). А уж потом на основе этого списка создавать набор, в который включить примитивы (ваши блоки) с нужными параметрами (площадями). Ну, а выделить набор уже не составит труда. Площади габаритов (контейнеров) блоков отличаются от "чистой" площади самих блоков, но более-менее нужный отбор можно произвести. Есть программки построения внешнего контора. Т.е. > отрисовать контуры > сделать выборку > удалить контуры. Но мне кажется, что такой путь сложнее и займет больше времени, а результат примерно тот же.
Нужен ЛИСП который бы упрощал оффсетную рутину а именно делал бы следующее: 1) выбрать несколько полилиний которые нужно сместить (отподобить); 2) задать расстояние смещения; 3) задать направление смещения; 4) удалить исходные полилинии оставив только смещенные. Заранее огромное спасибо!
EXOFFSET (Express Tool) Help (Наведите курсор, чтобы раскрыть содержимое) Help (раскрыть) Help (свернуть) Эта расширенная версия команды ПОДОБИЕ предоставляет несколько преимуществ по сравнению со стандартной командой, в том числе возможность управления слоями, возможность отмены и параметр "Несколько". Параметры DistanceСмещение выбранного объекта на заданное расстояниеThroughСмещение выбранного объекта по указанной точкеLayerЗадание слоя для новых объектов (либо текущий слой, либо слой исходного объекта)Gaptype (automatically applied)Использование текущей настройка переменной OFFSETGAPTYPE для создания углов с удлинением, сопряжением или фаской для заполнения потенциальных зазоров в смещенных полилиниях.MultipleСоздание нескольких смещений. Совет: Если во время выбора стороны для смещения удерживать клавишу SHIFT, можно выбрать несколько объектов. При нажатии клавиши CTRL во время выбора стороны для смещения исходный объект стирается.
Нужен ЛИСП который будет автоматически менять некорректные типы полилинии на заданные пользователем (автоматически без вмешательства пользователя отыскивать в файле некорректный тип линии и заменять его отправляя в нужный слой). Например программа отыскивает все полилинии с типом "G_BUILDING_LINE" и заменяет на тип "штриховаяX2" перенося их на нулевой слой.
Превеличайше благодарю! Я даже не знал о существовании продвинутого офсета. --- Сообщения объединены, 20 окт 2020, Оригинальное время сообщения: 20 окт 2020 --- Нужен ЛИСП который бы разрезал штриховку по полилинии на 2 части. (Знаю на просторах всеяИнтернета есть где то подобный ЛИСП, но он не работает в русской версии AutoCAD. Попытки заменить команды ни к чему хорошему не приводят так как я в написании и понимании кодов ЛИСПов полный ноль)
Код: (defun c:prof_line ( / );point_X_0 data_set spisok_line) (setq point_X_0 (getpoint "point heigt start: ")) (initget 1) ;(setq X_0_eql (getreal "value : ")) (setq data_set (ssget "_:E" '((0 . "*text,*DIMENSION")))) (setq i 0) (while (< i (sslength data_set)) (setq domer_h (- (atof (cdr (assoc 1 (entget (ssname data_set i))))) 190)) (setq i_coord (strcat (rtos (nth 1 (assoc 11 (entget (ssname data_set i)))) 2 3) "," (rtos (+ (nth 1 point_X_0) domer_h) 2 3))) (if (= i 0) (setq spisok_line (list "_.line" i_coord)) (setq spisok_line (append spisok_line (list i_coord))) ) (setq i (1+ i)) ) (apply 'command spisok_line) ;"_.line" "x1,y1" "x2,y2" "xn,yn" ) есть точка отсчета "190" по У есть текстовые объекты с цифирками (189, 187, 191 и т.д.), расположены вдоль Х лисп берет координату Х из 11й-пары текста, находит разницу между 190 и значением в тексте и добавляет к координате У "точки отсчета" потом по этим координатам рисует линию... нервы кончились... какого черта Аппли рисует эту линию по Х правильно, а по У от балды вообще???! причем если сделать максимальное отдаление чертежа и эту же функцию запустить, рисуется все правильно! что за бред?
Лисп с просторов интернета, немного подшаманил, что бы работал в руссифицированных версиях автокада На картинке штриховку пересекают три линии: полилиния, отрезок и дуга. Запускаем программу, выбираем линии, выбираем штриховку и штриховка делится на на четыре части. Но будьте внимательны, бо иногда вместо разделения часть штриховки удалялась! Ссылка на оригинал https://lispbox.wordpress.com/2015/02/01/hatch-split/
у меня не работает данный ЛИСП. Пишет следующее: "Команда: HSP Select the lines to split hatch: Выберите объекты: найдено: 1 Выберите объекты: Select the hatch to split: Выберите объекты: ; ошибка: Настройка переменной AutoCAD отвергнута: HPBOUND nil Команда:" Заработала как только я поменял следующую строку (if (setq ss1 (ssget ":L" '((0 . "HATCH")))) Код: (vl-load-com) (defun c:hsp(/ c e hpb itm olde p pts selp ss ss1 ss2 ss3) (prompt "\nSelect the lines to split hatch: ") (if (setq ss (ssget ":L" '((0 . "LINE,LWPOLYLINE,ARC")))) (progn (prompt "\nSelect the hatch to split: ") ;;;(if (setq ss1 (ssget ":S:L" '((0 . "HATCH")))) (if (setq ss1 (ssget ":L" '((0 . "HATCH")))) (progn (command "_.undo" "_BE" "_.ucs" "_W" "_.plan" "") (setq olde (getvar 'cmdecho) hpb (getvar 'hpbound) selp (getvar 'selectionpreview) itm -1 fuzz 0.25) (command "_.-hatchedit" (ssname ss1 0) "_b" "_r" "_y" "_.extrude" "_L" "" "5") (while (setq e (ssname ss (setq itm (1+ itm)))) (command "_.imprint" "_L" e "_n" "") (setq c (vlax-ename->vla-object e) p (vlax-curve-getpointatdist c (/ (vlax-curve-getdistatparam c (vlax-curve-getendparam c)) 2. ) ) pts (cons p pts) p (polar p (* pi 0.25) fuzz) pts (cons p pts) p (polar p (* pi 1.25) fuzz) pts (cons p pts) ) );; while (command "._explode" "_L" "") (setq ss2 (ssget "_P") ss3 (ssget "_F" pts '((0 . "REGION")))) (command "._erase" ss2 "_R" ss3 "") (setq itm -1) (while (setq e (ssname ss3 (setq itm (1+ itm)))) (command "_.hatch" "solid" e "" "_.matchprop" ss1 "_L" "" "_.draworder" "_L" "" "_B") );; while (command "_.erase" ss1 ss3 "") );; progn );; if );; progn );; if (setvar 'hpbound hpb) (setvar 'selectionpreview selp) (setvar 'cmdecho olde) (command "_.ucs" "_P" "_.zoom" "_P" "_.undo" "_E") (princ) );; test (c:hsp)
Добрый день. Подскажите пожалуйста, можно ли сделать лисп на подобие этого, но что б вставлял мтекст нужного мне стиля и размера?
Проверка на прямолинейность. Речь идет о опорах ЛЭП. Имеется некая полилиния, в ее вершинах внутренние углы близки к 180 градусов. Необходимо 1) Задача минимум - свести ту полилинию к некой виртуальной средневзешенной что ли линии\отрезку, координыты концов 2) Максимум Найти отклонения вершин полилинии от вышеуказанного отрезка. https://studfile.net/preview/3557308/page:59/ что то вроде такого, но для одного рельса. Может просто алгоритм, к сожалению на лиспе не пишу (в другой проге попытаюсь написать), но тут метод наименьших квадратов, алгоритм для оочень тупых, максимально просто желательно:(