|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Здравствуйте!
Есть такая конструкция: Код:
Но есть одно неудобство - чертёж каждый раз масштабируется (аналогично _zoom extend). В старых версиях Автокада этого масштабирования кажется не было и было намного удобнее. Проблема упоминается здесь: http://forum.dwg.ru/showthread.php?t=36250 http://forums.autodesk.com/t5/pointi...i/td-p/4399367 Я пробовал сообразить что то такое Код:
Или вообще стоит избавится от command и написать как то по-другому, но мне важнее результат и что бы это было на автолиспе. PS если удастся сделать то сразу надо наверное будет добавить подобную конструкцию: Код:
|
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Код:
Цитата:
Код:
Последний раз редактировалось skkkk, 18.11.2014 в 15:03. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
ucsfollow, кажется, надо поменять. Могу ошибаться
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
Здравствуйте!
Недавно нашел здесь на форуме lisp VVA по сортировке текстовых примитивов Код:
И написал lisp который делает набор по списку координат Код:
Так вот когда пытаюсь отсортировать текстовые примитивы выбранные f_multi_set, функция f_sel_txt_x сортирует их неправильно. (f_sel_txt_x (f_multi_set (список точек)) -1) Подскажите пожалуйста что не так? ![]() |
|||
![]() |
|
||||
Цитата:
Вот это видео правда сделано на 2010 Автокаде, но 2012 ведёт себя так же: http://tinyurl.com/m5enjsb При выполнении _.plan _c , т. е. план в текущей системе координат, чертёж зуммируется полностью. При этом в чертежах, особенно генпланы, бывают отдельные примитивы случайно или по необходимости отнесённые далеко от основного чертежа. Тогда затем приходится долго зуммировать до нужного фрагмента. Если это делать часто - неочень удобно. "_.zoom" "_p" - выручает. Но при этом сбивается поворот относительно системы координат, а это аннулирует все удобства UCSFOLLOW = 1. Это как раньше были кульманы у которых вращался угольник. Мне нужно что бы при этом вращалась и моя голова. Это обеспечивается установкой UCSFOLLOW = 1. То есть у меня например ось под углом 60 градусов. Я выбираю ПСК по объекту: ucs > new > object. При этом происходит смена ПСК и сразу же и поворот вида ортогонально новой ПСК, что иногда очень нужно. Но при этом же происходит и масштабирование, что не удобно и чего в старых версиях кажется не было. Если UCSFOLLOW = 0 то такой проблемы нет, но и "голова не вращается". Хотел написать скрипт. Но основная проблема в том что (command "_.zoom" "_p") сбивает поворот вида. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Это точно 2010? Судя по видео, там есть автозавершение функций в комстроке, а оно появилось, вроде в 2012-м, по крайней мере у меня в 2011-м этого нет. Вряд ли в 2010-м было... Или я не знаю, как его включить?
Заявляю со всей ответственностью: в 2011-м по факту выполнения _USC _OBJ масштабирования не происходит. Сказать что-то больше я просто не могу, т.к. не имею под рукой Автокада 2012 ![]() |
|||
![]() |
|
||||
Да, точно он, 2010. Автокомплит в нём есть, чему я несказанно рад. Странно что в Автодеск его не додумались его включить раньше. Этой вещью давно пользуется всё прогрессивное человечество -) В любом случае спасибо за наблюдение. Будет под рукой 2011 - проверю.
|
||||
![]() |
|
||||
Я его ни как не включал. Пользуюсь клавишей TAB и у меня работает. Вспомнил: у нас стоял 2011. На нём это то же работало, клавишей TAB.
Но у меня не выводится список комманд. Я просто перебираю табом, но меня это категорически устраивает (я и так примерно помню нужные комманды, работаю уже давно без меню). |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Добрый день. Предистория: есть файл шаблона autocad с настроенными листами с форматами. На каждом листе есть блок основной надписи с именем "Основная_надпись_ЕСКД", расположенный на слое "Формат_ЕСКД". Требуется: вставить сверху (можно было в атрибутах - но это переделывать много сотен файлов) в определенное место на блоке текст вида "Авторский лист ХХХ".
Загвоздка: в зависимости от формата координаты местоположения блока основной надписи, естественно, разные. Написал следующий код: Код:
p.s. ( vl-load-com ) вызывается ранее, поэтому нет в функции. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
(setq n -9) - это к чему?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Файлик приложи. Навскидку я не понимаю, почему не работает.
P.S. osmode в принципе можно не снимать. А при entmake не помешает учитывать пространство (лист/модель), в котором объект надо создавать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Два варианта кода. Первый пишет на всех листах один и тот же текст, второй - автоматически счетчик добавляет.
(defun c:Вставить_номер_авторского_листа (/ lincnamefile lnum lfile lsetblk n b1 lp lpx lpy lsosmode) (vl-load-com) (setq lincnamefile (strcat (vl-filename-directory (vla-get-fullname (vla-get-activedocument (vlax-get-acad-object)))) "\\" "Increment.txt" ) ;_ end of strcat ) ;_ end of setq (if (= (findfile lincnamefile) nil) (progn (setq lnum 1 lfile (open lincnamefile "W") ) ;_ end of setq (write-line (itoa lnum) lfile) (close lfile) ) ;_ end of progn (progn (setq lfile (open lincnamefile "R") lnum (+ (atoi (read-line lfile)) 1) ) ;_ end of setq (close lfile) (setq lfile (open lincnamefile "W")) (write-line (itoa lnum) lfile) (close lfile) ) ;_ end of progn ) ;_ end of if (if (setq lsetblk (ssget "_X" (list '(0 . "INSERT") '(8 . "Формат_ЕСКД")))) (foreach ent (vl-remove-if-not (function (lambda (x) (= (strcase (vlax-get-property (vlax-ename->vla-object x) (if (vlax-property-available-p (vlax-ename->vla-object x) 'effectivename) "effectivename" "name" ) ;_ end of if ) ;_ end of vlax-get-property ) ;_ end of strcase "ОСНОВНАЯ_НАДПИСЬ_ЕСКД" ) ;_ end of = ) ;_ end of lambda ) ;_ end of function ((lambda (/ item tab) (repeat (setq tab nil item (sslength lsetblk) ) ;_ end setq (setq tab (cons (ssname lsetblk (setq item (1- item))) tab)) ) ;_ end of repeat ) ;_ end of lambda ) ) ;_ end of vl-remove-if-not (setq lp (cdr (assoc 10 (entget ent)))) (princ (strcat "\nx=" (rtos (car lp) 2 14) "; y=" (rtos (cadr lp)) "; space=" ) ;_ end of strcat ) ;_ end of princ (if (not (entmakex (append (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") ) ;_ end of list (mapcar (function (lambda (x) (assoc x (entget ent)) ) ;_ end of lambda ) ;_ end of function '(67 8 410) ) ;_ end of mapcar (list (cons 10 (list (- (car lp) 22.5) (+ (cadr lp) 47.8))) '(40 . 2.) '(71 . 1) '(72 . 5) (cons 1 (strcat "Авторский лист " (itoa lnum))) '(41 . 185.) '(7 . "штамп") '(11 1.0 0.0 0.0) '(50 . 0.0) '(73 . 1) '(44 . 1.) '(210 0. 0. 1.) ) ;_ end of list ) ;_ end of append ) ;_ end of entmakex ) ;_ end of not (princ (strcat "\nCan't write " (itoa lnum) " value")) ) ;_ end of if ) ;_ end of foreach ) ;_ end of if ) ;_ end of defun (defun c:testssget (/ lsetblk n b1 lp lpx lpy) (vl-load-com) (setq lsetblk nil) (setq lsetblk (ssget "_X" (list '(0 . "INSERT") '(8 . "Формат_ЕСКД")))) (setq n (sslength lsetblk)) (while (> n 0) (setq b1 (ssname lsetblk (- n 1))) (if (= (vla-get-effectivename (vlax-ename->vla-object b1)) "Основная_надпись_ЕСКД") (progn (setq lp (cdr (assoc 10 (entget b1)))) (setq lpx (car lp)) (setq lpy (car (cdr lp))) (princ (strcat "\nX=" (rtos lpx) " Y=" (rtos lpy) "\n")) (setq n -9) ) ;_ end of progn ) ;_ end of if (setq n (- n 1)) ) ;_ end of while ) ;_ end of defun Код:
Я не добавлял метки начала/конца отмены, это уж сам ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Кулик Алексей aka kpblc, спасибо, буду разбираться. Второй вариант. Так как смысл этой программки - в одной папке лежит куча файлов *.dwg, объединенных через подшивку. И когда приходит информация со стройки о очередном изменений - делается копия проекта и выпускаются новые авторские листы, каждый из которых должен иметь свой уникальный номер в пределах проекта. И таких папок еще по корпусам немало. И народ просто путается в запарке, в какой папке какой следующий номер можно взять.
И поскольку каждый вызов команды - это один лист, то метки отмены не вижу смысла ставить - ведь текстовой файл не "откатиться" сам назад. А вот что лисп не проверяет и не удаляет эту надпись на листе, если существует-это мой косяк) |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Разобрался вроде - оказалось, ssget "_X" работает не с активной вкладкой, а со всем чертежом. И возвращает набор из всех блоков основной надписи во всех листах. Соответственно, всегда получал координаты только первого блока вне зависимости от активной вкладки. Как вариант - можно было делать проверку не только на имя блока, но и выдергивать из 410 группы название листа и сравнивать с ( getvar "CTAB").
Появился один вопрос: если переменная для хранения набора локальная - то при выходе из функции ей автоматически будет присвоено значение nil? Чтобы закрыть открытый набор... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
![]() Да.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Ключ "_A" не дал эффекта выбора текущего пространства.. справку читаю - там вообще убрали этот ключ. В книге "AutoLisp и VisualLisp в среде AutoCAD" разница между ключами описывается как: "_A" эквилентно "_X" с пустым фильтром.
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |