Приветствую! В общем задача вроде легкая, но перерыв кучу инфы в голове уже ничего не соображается. А делать надо. (( Есть куча отрезков одинаковой длинны, которые пересекают друг друга, вот эти точки пересечения нужно нанести на чертеж (в то место где они пересекаются поставить точку или окружности с центром в той точке). Пытаюсь найти лисп на это дело, пока безуспешно. Может кто сталкивался?
Код: (vl-load-com) (DEFUN C:GR-INTERS (/) (command nil) (setq old_CMDECHO (getvar 'CMDECHO)) (SETVAR 'CMDECHO 0) (vl-catch-all-apply 'myINTERS) (SETVAR 'CMDECHO old_CMDECHO) ) (defun myINTERS (/ nabor gr-lst-krd ALL-LST-NB 1$LST 1$OTR FULL-LST MY&LIST$SEGMENT MY&LIST ) (setq gr-lst-krd (lambda (nb / i lst) (setq i 0) (repeat (fix (vlax-curve-getEndParam nb)) (setq lst (cons (LIST (vlax-curve-getPointAtParam nb i) (vlax-curve-getPointAtParam nb (1+ i)) ) lst ) i (1+ i) ) ) (setq lst (reverse lst)) ) ) (setq nabor (ssget '((0 . "*LINE"))) nabor (vl-remove-if 'listp (mapcar 'cadr (ssnamex nabor))) ) (setq ALL-LST-NB (mapcar (function (lambda (x) (gr-lst-krd (vlax-ename->vla-object x))) ) nabor ) ) (REPEAT (1- (length ALL-LST-NB)) (Setq 1$LST (car ALL-LST-NB) ALL-LST-NB (vl-remove (car ALL-LST-NB) ALL-LST-NB) FULL-LST (APPLY 'APPEND ALL-LST-NB) ) (REPEAT (length 1$LST) (Setq 1$OTR (CAR 1$LST) 1$LST (vl-remove (CAR 1$LST) 1$LST) MY&LIST$SEGMENT (MAPCAR (FUNCTION (LAMBDA (X) (APPLY 'INTERS (APPLY 'APPEND (LIST 1$OTR X)) ) ) ) FULL-LST ) MY&LIST (CONS MY&LIST$SEGMENT MY&LIST) ) ) ) (MAPCAR (function (LAMBDA (X) (entmakex (list (cons 0 "CIRCLE") (cons 40 0.4) (cons 10 X)) ) ) ) (vl-remove nil (apply 'append MY&LIST)) ) ) (PRINC "\nЗапуск: _GR-INTERS") пробовал только с полилиниями и отрезками
Спасибо ребята! Очень помогли, особенно Alexandr-GR! Пробовал такой написать, но ошибся с последовательностью ( --- Сообщения объединены, 21 авг 2013, Оригинальное время сообщения: 21 авг 2013 --- Так, а с задачкой такого плана сталкивались: по точкам\кружочкам (данный лисп помог ставить кружочки) нужно натягивать имеющиеся на чертеже полилинии, грубо говоря есть у меня кривая стена по радиусам и размеры по ней. Сейчас на чертеже появились кругляши (или переделаю на точки) и нужно опорные точки полилинии притянуть к этим точкам, чтобы размеры привязанные к полилинии изменились в соответствии с перетянутой фигурой. Товарищ так исполнительные на колонны делал, снимав их по углам, потом в акаде совмещал точки углов с четырехугольником с привязанными размерами. Но я не помню был это лисп или вба приложение, кто имел опыт с таким?
В порядке гипотезы: попробуйте с помощью _adersheet из Autocad Map3d - эластичное преобразование. См. пример в #74. Т.е. указываете пары соответственных точек, Enter, выбираете преобразуемое вместе с размерами и Enter.
Так, спасибо, сейчас буду разбираться. Наткнулся на нечто похожее для цивила: http://www.civilgeotools.ru/cgt/razdel/2/#_130 Перемещение вершин полилинии на случайную величину Но мне необходимо перемещать вершину полилинии в центр окружности, во! Хотя-б сформулировал) Попробую покапаться в лиспе для цивила. --- Сообщения объединены, 21 авг 2013, Оригинальное время сообщения: 21 авг 2013 --- Попробую разобраться как написать лисп по типу: выделены все нужные прямоугольные объекты созданные из полилиний. Соответственно на каждом прямоугольнике 4 вершины. Которые в свою очередь так или иначе залезают на окружности. Идея в том чтобы выделить все прямоугольники, показать в центр какой типичной окружности нужно переместить вершины полилиний ну и чтоб лиспом делалось это не по 1 штуке, а все сразу... о как. В цивиловском чтот разобраться не могу как привязать
Если не изменяет склероз, то такую программу писал Disney. Она где-то в этом разделе форума была выложена. Написана на LISP.
На разных ресурсах видел программы Disney-я, но под мои нужды вроде не смотрел, но спасибо, еще раз гляну эту нашу ветку. Пробовал кое как редактировать чужие лиспы - все-таки мало знаний, не получается)))
Что-то я с ним не поладил, ближе к ночи засяду плотнее и кропотливее разбираться со всеми советами и способами их приминений, а пока только наскоком, что-то получается, а что-то сразу-так нет =) Новичек я в этих лиспах и их программировании Если быть точнее - я немного не понял как _adersheet запустить в среде Акада не мап, а установить мап 3д смогу лишь позднее. Поэтому и ищу пока другие варианты =) Но тем не менее - спасибо за совет
1. _adersheet вызывается? 2. В ком. строке спрашивает? или 3. Когда все пары точек укажете, то жмете Enter. Появится или 4. Нажмите в русском русское "в" или "_s", во вражеском "s". И выбирайте все преобразуемые объекты. И Enter.
Та неее, это то понятно, я пытался найти в тырнетах как на простом акаде эту функцию запилить =) Мап-а то нету еще
В "новых командах для полилиний" http://dwg.ru/dnl/607 нашел "PL-VxMove" - перемещение вершин полилинии. Но не допетрил как из того лиспа сделать чтоб перемешение было в центр кругов и в автоматическом режиме (( to Philin - перечитал все темы в которых публиковал что-то Disney - всетаки не нашел(
Попробовал _adersheet. Если по одной делать - разобрался, осталось понять как заставить её запомнить что нужно делать а потом сделать на все фигуры аналогичное действие, желательно в 1 клик))
Что не так? Там можно выделить любое число элементов для трансформирования. "ДелИть" - это описка или суть процесса?
У меня получилось заставить один четырехугольник растянуться до 4 центров кругов (сперва выделил по очереди одна точка четырехугольника - дальше клик на центр окружности в которую он попадает и так по всем 4-ем а затем выделял четырехугольник после "Выбрать объекты [Области/Выбрать] и все вышло как нужно). А вот как сделать чтобы сделать 12 четырехугольников растянулись по своим 48-и центрам окружностей, кроме как по одной - я не понял, ибо вроде логично предположить что есть возможность по средствам этой команды делать все и сразу, но.. пробовал по разному, пишет " не удалось " и т.п. Может что не так делаю?
Чудес не бывает - соответственные точки указать по-любому нужно. Не встречал, чтобы программа сама могла догадаться какой точке какую поставить в соответствие. Т.е. указываете все 48 пар точек, потом указываете все четырехугольники, и они все натянутся на эти указанные точки. Ну, или последовательно по одному или больше четырехугольников - выбор за Вами.
Да уж, звиняюсь, ребят, что озадачил такой дилеммой =) Просто сижу уже 3 дня голову ломаю сам пробуя разные встроенные функции и лиспы которые нахожу, ничерта не выходит, а самое обидное - что это возможно (видел что делали так, но сейчас контакта того человека нету)! И по сути здорово облегчает жизнь. to АлексЮстасу - тогда выходит не многим быстрее, а то и медленнее чем в ручную все натягивать :) Но все равно большое спасибо, теперь знаком с этой замечательной функцией! to Disney прикрепил файл с картинкой примерно того что мне нужно, может будут идеи из чего такое можно сгородить