| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Express Tools Bugs ( Ошибки Express Tools )

Express Tools Bugs ( Ошибки Express Tools )

Ответ
Поиск в этой теме
Непрочитано 03.09.2008, 15:56 #1
ExpressTools Bugs ( Ошибки ExpressTools )
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,990

В моем арсенале набралось уже как минимум 3 исправленные ошибки Express Tools ( BURST, CLIPIT, TEXTMASK). BURST и CLIPIT были обнаружены по наводке Vova, TEXTMASK моими юзерами. По мере появления свободного времени опишу их все.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 23.08.2010 в 18:11.
Просмотров: 120277
 
Автор темы   Непрочитано 03.09.2008, 15:57 BURST
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


BURST (исправлена 13.04.2011).

Вводная: В блоке есть примитивы с типом линии "byblock". Блок расположен не на 0 слое и явно или через слой ему задан тип линии, отличный от "continuous"
Проблема: Если делать Burst таким блокам, то тип линии теряется, хотя в программе (burst.lsp) эта ситуация обрабатывается
Ошибка: В коде идет сравнение типа линии (группа 6) с "BYBLOCK", хотя в описании блока эта строка хранится как "ByBlock". Естественно условие никогда на выполнится.
Исправленная версия находится в файле bursfix.lsp. Можно переименовать в burst.lsp и заменить стандартный в папке Express Tools.
В файле burstfix.dwg находится пример.
Сделайте burst блокам ниже надписи BURST it and look at result сначала стандартным BURST из Express Tools, затем BURST из burstfix.lsp
и сравните результат.
Изменения в файле помечены как
;_Rem by VVA
;_Change by VVA

*** Добавлено 09.02.2009
Внес изменения. Выложено 2 файла
Файл burstfix.lsp - исправлена ошибка наследования примитивом с типом линии BYBLOCK типа линии блока, вес линий, проверка на vla-get-explodable (см #12)
Файл burstfix.dwg примеры.
Дана таблица сравнения работы команд Burst из Express Tools и BurstFix.
В файле burstfix.dwg одну строчку блоков взорвать Burst из Express Tools,
вторую Burst из BurstFix и сравнить с примером.
*** Добавлено 20.03.2009
Исправлено Атрибуты и Видимости ( Visibility ) динамического блока. См. пример
*** Добавлено 09.10.2009
Исправлена ошибка в соответствии с #22
*** Добавлено 09.06.2010
Изменения в соответствии с #33
*** Добавлено 13.04.2011
Обработка многострочных атрибутов. Пример см здесь

Подробнее читать пост №7
Применение: Переименовать burstfix.lsp в burst.lsp и заменить в папке Express Tools
Дальнейшее развитие - сборник LISP. Подготовка подосновы
Вложения
Тип файла: rar Burstfix.rar (23.6 Кб, 570 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.09.2014 в 22:40. Причина: Обработка многострочных атрибутов
VVA вне форума  
 
Автор темы   Непрочитано 03.09.2008, 15:58 CLIPIT
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


В общем то основное про CLIPIT было сказано здесь:
Wipeout, дуги и окружности
Возможно будут просто некие исправления редакционного характера.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.09.2008 в 16:16.
VVA вне форума  
 
Автор темы   Непрочитано 03.09.2008, 15:58 TEXTMASK
1 | #4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


При маскировка текста иногда текст исчезал. Причины:
1. Связано было с тем, что по какой-то причине не удалялись расширенные (РД) данные о маскировке текста
Добавил строчку принудительного удаления РД ACET-TEXTMASK
Код:
[Выделить все]
(vva-Delete_XData ENT (list "ACET-TEXTMASK"))  ;;;======>>>>>> CHANGE by VVA MIP
Так как это было у меня сделано давно, то найти файл с примером не удалось. Ссылки на темы гда описывалась подобная проблема
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=27771EB
http://dwg.ru/f/showthread.php?t=424
http://www.cadtutor.net/forum/showthread.php?t=6940
http://www.cadtutor.net/forum/showthread.php?t=9931
http://discussion.autodesk.com/threa...sageID=5247366
Описание проблемы и решение
http://www.theswamp.org/index.php?topic=14599.0
2. Непонятно откуда взявшаяся группа 284 см. тему dxf код 284
Добавил функцию удаления "вредных" групп vva-prepare-text-list
3. Аннотативность текста - читать Неадекватность работы TEXtMASK
Вложения
Тип файла: lsp textmaskmip2011-28-07.lsp (41.8 Кб, 300 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 02.07.2014 в 14:00. Причина: Новая версия textmaskmip.lsp
VVA вне форума  
 
Непрочитано 03.09.2008, 16:16
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Тему перевести, может, в "Важные"? Уж больно интересно...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.09.2008, 16:25
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


В конечном итоге хотелось бы чтобы в 2010 Автокаде все это было исправлено. По textmask постараюсь побыстее отписаться. Вся проблема в примере. По рукой сейчас нет. А получится или нет быстро не знаю.
Суть проблемы в том, что применяя TEXTMASK текст просто исчезает. Если у кого есть такой чертеж, то просьба выложить сюда.
Ссылки на проблему
Textmask Deletes Text
Textmasking erases text
http://discussion.autodesk.com/threa...sageID=5247366
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 04.09.2008, 05:54
#7
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Уточню сказанное VVA чтобы стала понятной важность исправленной им ошибки для рядовых автокадчиков, всех теток и дядек.
Допустим, есть блок. Пусть его три элемента сделаны так: первый-прерывистой линией Hidden. Второй-типом линии byLayer, третий-ByBlock. Все это лежит в слое 0 и из них сделан блок. Вставляем блок в слой "A", тип линии которого Zigzag. Получим: первый элемент Hidden. Второй и третий-Zigzag. Поменяем блоку свойство Тип линии, на Dashdot. Первый элемент останется Hidden. Второй останется Zigzag. Третий станет Dashdot. Но это все прописные истины. А мы-тетка, и нам приспичило блок взорвать. На дух не переносим, не знаем что с ним делать и так далее. Короче, Explode (Расчленить). Что получим? Первый останется Hidden. Второй и третий.... превратятся в сплошные. Причем неважно, меняли-ли до этого свойства блоку или нет. То есть начерченное ранее поменяло информацию, возможно, очень важную с точки зрения автора чертежа. Кроме того, если в блоке есть атрибуты, то их слова поменяли содержание.
При расчленении блока командой Explode может получиться не только куча разрозненных объектов, но и потеряться важная информация. Так и скажите своим теткам.
Есть малоизвестная команда из Express. называется Burst. Она предназначена для взрыва блока и при этом атрибуты преврaщаются в текст. То есть не теряется текстовое содержание. Правда, при этом вылезают и невидимые атрибуты, то есть может проявится ненужная инфа. Об этом HELP умалчивает. И ничего не сказано о том, что команда была задумана так, чтобы подрывать блок и оставлять при этом типы линий такие, которые имел блок до подрыва. Потому и не сказано, что авторы не довели до конца задумку. Ошибка обнаружилась при нашей совместной с VVA работе над одной прогой, которая должна облегчить жизнь при..... Но пока молчу.
А пока сделайте подарок своим теткам. Исправьте у них в Экспрессах лисп Burst.lsp и слезно попросите вместо Explode для блоков применять Burst
Если заинтересовала информация о расчлененке то напоминаю o существовании команды _Xplode (взорвать). Кто и что про нее может сказать?
Vova вне форума  
 
Непрочитано 04.09.2008, 07:32
#8
Dukk


 
Регистрация: 13.06.2008
Сообщений: 14


с 2007 акада из expressa исчезли работа со слоями и команда pljoin работает неверно, вот исправления -
в команды работы со слоями внесены изменения:
layoff -при выборе активного слоя по умолчанию предлагается ответ <YES>
layulk -разблокирует все слои а не только те что указаны
+добавлены иконки для вынесения на toolbar
Вложения
Тип файла: zip Express.zip (21.1 Кб, 390 просмотров)
Dukk вне форума  
 
Непрочитано 04.09.2008, 08:30
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Есть ещё баг с OVERKILL, на который я когда-то натолкнулся. Описано здесь:
http://dwg.ru/f/showpost.php?p=235685&postcount=185

VVA, у тебя нет желания с этим поразбираться?

Добавлено:
Вот комментарии Kpblc'a по этой трабле:
http://dwg.ru/f/showpost.php?p=235726&postcount=187
Makswell вне форума  
 
Автор темы   Непрочитано 04.09.2008, 10:48
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Внес изменения в #2. Выложил 2 варианта burst. С исправлением только наследования типа линии (burstfix.lsp) и исправлением наследования типа линии и удалением невидимых атрибутов (burstfix+Attr.lsp).
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 09.06.2010 в 17:04. Причина: Неактуально
VVA вне форума  
 
Непрочитано 06.09.2008, 23:31
#11
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
В конечном итоге хотелось бы чтобы в 2010 Автокаде все это было исправлено
А Автодеск ничего не исправляет в Экспресе. Автодеск эти функции не разрабатывал и такое впечатление что им на них глубоко наплевать. Даже иконки не обновляют.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.10.2008, 11:28
#12
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Выдает ошибку, не находит функцию (vla-get-explodable).
AutoCAD 2005 En.

У меня что, что-то не установлено?

Миниатюры
Нажмите на изображение для увеличения
Название: burst.png
Просмотров: 312
Размер:	3.7 Кб
ID:	11356  
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 22.10.2008, 11:40
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Свойство "разбиваемости" блоков появилось только в 2006-м, кажется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.10.2008, 11:44
#14
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Сто двадцать девятый луч смерти в Автодеск - пошел.
__________________
Reshaping the STEM field
Александр Бауск вне форума  
 
Непрочитано 22.10.2008, 11:48
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Да вбей элементарную проверку на версию:
Код:
[Выделить все]
(atoi (vl-string-trim "VISUAL LISP " (strcase (ver))))
Если возвращаемое значение больше 2006, то функция вернет t. Иначе - проверку по полной гнать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.10.2008, 12:39
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Проверил, в burst 2005 нет функции explodable, в 2006 есть. Надо добавлять проверку
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 09.02.2009, 11:17
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Обновил #2
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 20.03.2009, 18:40
#18
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Внес исправления #2. Обработка атрибутов и Visibility динамических блоков.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.10.2009, 08:39
#19
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Замечена некорректная работа команды "TCASE": при изменении регистра букв, буквы"Ё,Я,Ч" не меняют своего регистра(Остаются заглавными)см.видео.
AutoCad 2008RUS,2009RUS
ps. исправьте пожалуйста ,если это возможно...
Вложения
Тип файла: rar tcase.rar (119.2 Кб, 260 просмотров)
Тип файла: rar Чертеж1.rar (31.9 Кб, 270 просмотров)

Последний раз редактировалось kshatriy, 02.10.2009 в 09:41.
kshatriy вне форума  
 
Непрочитано 02.10.2009, 12:27
#20
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


К сожалению это не ошибка express'ов в Autolisp есть встроенная функция (strcase) которая переводит строку в нижний\верхний регистр, с ней-то именно эти быквы и не работают, ее можно переназначить НО в автолиспе ПОЧЕМУ-ТО не предусмотренно создания пользовательских функций с произвольным числом аргументов а внутреннея strcase - именно такая - то есть по умолчанию второй аргумент принимаеться как nil. Но экспресы запускают ее всегда в 2 агрументами, то есть 3 пути решения втавить свою лисп функцию с 2 аргументами - экпрессы заработают, но возможно в других лиспах вызывающих strcase с одним аргументов будет ошибка, переписать функцию на чем-либо более продвинутом (типа net - но я его не знаю) с поддержкой разного числа аргументов, либо-же создать доп. фнкцию (например strcaseru), попросить VVA (он в этом мастер), найти где идет вызов (strcase) и переправить на strcaseru.
Код:
[Выделить все]
(vl-load-com)
(defun strcase (str flag / abc)
(setq abc (if flag '(65 90 192 223 168 32) '(97 122 224 255 184 -32)))
(vl-list->string (mapcar '(lambda (char)
(if (= char (nth 4 abc)) (setq char (+ char (/ (last abc) 2)))); буква "йо".
(if (or (and (>= char (car abc)) (<= char (cadr abc)))
	(and (>= char (caddr abc)) (<= char (cadddr abc)))
);end of or
(+ char (last abc)) 
char
);end of if
);end of lambda
(vl-string->list str)))
);end of strcase
p.s. При всавки этой функиии tcase работает правильно, но возможны проблеммы с другими лиспами.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 02.10.2009 в 12:35.
Дима_ вне форума  
 
Непрочитано 02.10.2009, 13:54
#21
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от Дима_ Посмотреть сообщение
p.s. При всавки этой функиии tcase работает правильно, но возможны проблеммы с другими лиспами.
в любом случае Спасибо! за помощь.
kshatriy вне форума  
 
Непрочитано 09.10.2009, 15:24
#22
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от VVA Посмотреть сообщение
BURST (исправлена 03.09.2008).

Вводная: В блоке есть примитивы с типом линии "byblock". Блок расположен не на 0 слое и явно или через слой ему задан тип линии, отличный от "continuous"
Проблема: Если делать Burst таким блокам, то тип линии теряется, хотя в программе (burst.lsp) эта ситуация обрабатывается
Ошибка: В коде идет сравнение типа линии (группа 6) с "BYBLOCK", хотя в описании блока эта строка хранится как "ByBlock". Естественно условие никогда на выполнится.
Исправленная версия находится в файле bursfix.lsp. Можно переименовать в burst.lsp и заменить стандартный в папке Express Tools.
В файле burstfix.dwg находится пример.
Сделайте burst блокам ниже надписи BURST it and look at result сначала стандартным BURST из Express Tools, затем BURST из burstfix.lsp
и сравните результат.
Изменения в файле помечены как
;_Rem by VVA
;_Change by VVA

*** Добавлено 09.02.2009
Внес изменения. Выложено 2 файла
Файл burstfix.lsp - исправлена ошибка наследования примитивом с типом линии BYBLOCK типа линии блока, вес линий, проверка на vla-get-explodable (см #12)
Файл burstfix.dwg примеры.
Дана таблица сравнения работы команд Burst из Express Tools и BurstFix.
В файле burstfix.dwg одну строчку блоков взорвать Burst из Express Tools,
вторую Burst из BurstFix и сравнить с примером.
VVA: Результат теста AutoCAD 2009rus: в первом и во втором блоках по одной линии изменились и блок "Burstfix+Attr" не взорвался:
Код:
[Выделить все]
Команда: burst

Выберите объекты: найдено: 1

Выберите объекты:

|
неверный ассоциативный список: (nil)
Сможете исправить?
Вложения
Тип файла: rar burstfix.rar (58.3 Кб, 262 просмотров)
kshatriy вне форума  
 
Автор темы   Непрочитано 09.10.2009, 21:49
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


обновил #2
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.10.2009, 07:43
#24
kshatriy


 
Регистрация: 06.08.2008
Сообщений: 30


Цитата:
Сообщение от VVA Посмотреть сообщение
обновил #2
Спасибо!! все работает
kshatriy вне форума  
 
Автор темы   Непрочитано 18.02.2010, 11:34
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Из этой темы: Помогите исправить программу под 2010 версию
Цитата:
Сообщение от Profan Посмотреть сообщение
Подчеркну, что в стандартной поставке AutoCAD программы exfillet никогда не было, эта программа была в отдельном самостоятельном сборнике, который можно было установить автономно на AutoCAD 2000, 2000i и 2002. Поэтому она никогда и не убиралась из Express Tools.
Команда EXFILLET
Код:
[Выделить все]
;;
;;;    adaptation for AutoCAD 2010 VVA (V.A.Azarko)
;;;    posted http://forum.dwg.ru/showthread.php?t=47047&page=3
;;;
;;;    EXFILLET.LSP -- Written by Paul Vine
;;;    Copyright © 1999 by Autodesk, Inc.
;;;
;;;    Your use of this software is governed by the terms and conditions of the
;;;    License Agreement you accepted prior to installation of this software.
;;;    Please note that pursuant to the License Agreement for this software,
;;;    "[c]opying of this computer program or its documentation except as
;;;    permitted by this License is copyright infringement under the laws of
;;;    your country.  If you copy this computer program without permission of
;;;    Autodesk, you are violating the law."
;;;
;;;    AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
;;;    AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
;;;    MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
;;;    DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
;;;    UNINTERRUPTED OR ERROR FREE.
;;;
;;;    Use, duplication, or disclosure by the U.S. Government is subject to
;;;    restrictions set forth in FAR 52.227-19 (Commercial Computer
;;;    Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
;;;    (Rights in Technical Data and Computer Software), as applicable.
;;;
;;;  ----------------------------------------------------------------
;;;     31 strings.
;;;  ----------------------------------------------------------------
;;;     Last Revision
;;;     Credits:  Inspired by the thread "Filleting two polyline segments" on
;;;           news://adesknews.autodesk.com/autode....customization
;;;          Thanks to whomever raised the issue and participants on the thread
;;;        including particularly:
;;;        David Garrigues and Ian White
;;;    Created by Paul Vine 7/10/98
;;;    Bug fixing ... 8/6/98
;;;    Last bug fix: 9/5/98
;;;    TAHOE work (4/1/99):
;;;     Changed concatenated string usage to acet-str-format
;;;     Changes error handler calls to acet-error-init instead of bns*
;;;
;;;     FIXES THE FOLLOWING PLINE/FILLET BUGS and WISHLIST items:
;;;     1. Filleting between anything BUT a line with a  pline.
;;;         This allows the user to FILLET arcs, circles, splines, ellipses, etc., with plines
;;;         however, only lines get added to the pline    -- STILL in 2000
;;;     2. Filleting individual segments in a LWPOLYLINE more than once (this is fixed in 2000)
;;;     3. Filleting between two different plines.    (still a problem in 2000)
;;;     4. Auto-repeats command until user hits enter.
;;;     5. Eliminates looping in "Select second object:" prompt.
;;;     6. POLYLINE option using a selection set.
;;;     7. Adds a joinmode setting to automatically join objects when feasible.
 
;;;    TO DO:
;;;     19. Honor standard selection set acquisition like C, CP, WP, etc.
 ;;;    20. Allow correct undo handling of trimmode?
 
 ;;;THIS VERSION HAS THE REVISED UNDO HANDLER.
 
 
(defun c:exfillet ( / option sTrim sRad iUndo sJoin);made this guy a global
   (acet-error-init
    (list
        (list "cmdecho" 0
            "highlight" 1
              "qaflags" 0
             "limcheck" 0
            "plinetype" 2
               "clayer" (getvar "clayer")
              "cecolor" (getvar "cecolor")
              "celtype" (getvar "celtype")
	    "pickstyle" 0
        )
       0     ;flag. True means use undo for error clean up.
       '(myerror)
     );list
    );acet-error-init
 
  (sssetfirst nil nil)
  (defun myerror ()
      (if (= (type option) 'LIST)
        (redraw (car option) 4)
      )
   ) ;defun myerror
 
 
    (setvar "errno" 7)
    (setq iUndo 0) ;setq
    (while  (= (getvar "errno") 7)
      (setvar "errno" 0)
      ;;;new code follows for status line...
      (cond
        ( (= (acet-exfillet-gettrim) 0)(setq sTrim "NOTRIM"))
        ( (= (acet-exfillet-gettrim) 1)(setq sTrim "TRIM"))
        ( (= (acet-exfillet-gettrim) 2)(setq sTrim "JOIN"))
      );cond
 ;(alert (strcat "iUndo = " (itoa iUndo)))
      (setq sRad (rtos (getvar "filletrad"))) ;setq
      (princ (acet-str-format "\nCurrent settings: Mode = %1, Radius = %2" sTrim sRad))
      ;(princ (strcat "\nCurrent settings: Mode = " sTrim ", Radius = " sRad ))
      (initget "Polyline Radius Trim Undo")
      (setq option (entsel "\nSelect first object or [Polyline/Radius/Trim/Undo]: "));
      (cond
        ((= (type option) 'LIST) (acet-exfillet-optUserPick option))
        ((= option "Polyline") (acet-exfillet-optPline))
        ((= option "Radius") (acet-exfillet-optRadius))
        ((= option "Trim") (acet-exfillet-optTrim))
        ((= option "Undo") (acet-exfillet-optUndo))
      );cond
 
    );while
  (acet-error-restore)
) ;defun c:exfillet
 
(defun acet-exfillet-optUndo ()   ; (alert (itoa iUndo))
    (if (> iUndo 0)
      (progn
        ;(command "_.undo" "1")
        (command "_.undo" "_B")
        (setq iUndo (1- iUndo)) ;setq
      );progn
      (princ "\nNothing to Undo.");else if the user never started, tell 'em we're at the beginning.
    );if
    (setvar "errno" 7)
);end INTERNAL UNDO
 
 
(defun acet-exfillet-optPline ( / ss i ent)
  (setq ss (ssget '(
                    (-4 . "<OR")
                      (0 . "LWPOLYLINE")          ;filter for 2d plines
                      (-4 . "<AND")               ;or heavy plines that
                        (0 . "POLYLINE")          ;are not pface meshes
                        (-4 . "<NOT")             ;polygon meshes or
                          (-4 . "&")              ;3dpolies
                          (70 . 88)
                        (-4 . "NOT>")
                      (-4 . "AND>")
                    (-4 . "OR>")
  )))  ;setq
  (if ss
    (progn
      ;(command "_.undo" "_be")
      (command "_.undo" "_m")
      (setq i 0) ;setq
      (repeat (sslength ss)
        (setq ent (ssname ss i)) ;setq
        (command "_.fillet" "_P" ent)  ;;this failed on 3dpolies
        (setq i (1+ i)) ;setq
      ) ;repeat
      ;(command "_.undo" "_end")
      (setq iUndo (1+ iUndo)) ;setq
     );progn
   );if
   (setvar "errno" 7)
 
) ;defun optPline
 
(defun acet-exfillet-optRadius ( / ans)
  (initget 4) ; 1 line fix for negative radius.
  (setq ans (getdist (acet-str-format "\nEnter fillet radius <%1>: " (getvar "filletrad") ))) ;setq
  ;(setq ans (getdist (strcat "\nEnter fillet radius <" (rtos (getvar "filletrad"))">: " ))) ;setq
  (if ans
    (progn
    (command "_.undo" "_M")
    (setvar "filletrad" ans)
    (setq iUndo (1+ iUndo)) ;setq
    );progn
   ) ;if
   (setvar "errno" 7)
);defun
 
(defun acet-exfillet-optUserpick ( option  / lsValid lsBugfix ent entType e2 ent2  bCoplanar
                                            ent2Type ss2 entlist ent2list bLayerUnLocked pickpt1 pickpt2
                                            Color Linetype)
  (if (not iUndo)
    (setq iUndo 0) ;setq
  ) ;if
  (setq lsValid (list "POLYLINE" "LWPOLYLINE" "LINE" "ARC" "ELLIPSE" "CIRCLE" "SPLINE" "RAY" "XLINE")) ;setq
  (setq lsBugfix (list "ARC" "ELLIPSE" "CIRCLE" "SPLINE" "RAY" "XLINE" "LINE")) ;setq          ARC IS THE ONLYTHING THAT
  (setq ent (car option)) ;setq                                        ^^^^^^^ is a bug fix for filleting fit- and spline-curved plines to lines
  (setq pickpt1 (osnap (cadr option ) "_nea")) ;setq
  (redraw ent 3)
  (setq entlist (entget ent)) ;setq
  (setq entType (cdr (assoc 0 entlist)) ;setq
         bLayerUnLocked (acet-layer-locked (cdr (assoc 8 entlist))) ;setq
         bCoplanar (acet-exfillet-bCoplanar ent));
 
  (if (and (member entType lsValid) (not bLayerUnLocked) bCoplanar )     ;if the first one is good, look at the second one.
    (progn
      (setq ent2type nil) ;setq
      (setq e2 T) ;setq
      (while (and e2 (or (= (getvar "errno") 7) (not (member ent2type lsValid))) )
        (setvar "errno" 0)
        (setq e2 (entsel "\nSelect second object: ")) ;setq
        (if e2
          (progn
            (setq ent2 (car e2)) ;setq
            (setq pickpt2 (osnap (cadr e2 ) "_nea"))
            (setq ent2list (entget ent2)) ;setq
            (setq ent2Type (cdr (assoc 0 ent2list)) ;setq
                 bLayerUnLocked (acet-layer-locked (cdr (assoc 8 ent2list))) ;setq
                 bCoplanar (acet-exfillet-bCoplanar ent2))
            (if (and (member ent2Type lsValid) (not bLayerUnLocked) bCoplanar)  ;here is where the second pick is valid and we can do our thing
              (progn
                (setvar "clayer" (cdr (assoc 8 entlist)))
                (setq Color (cdr (assoc 62 entlist))) ;setq
                (setq Linetype (cdr (assoc 6 entlist))) ;setq
                (if Color
                  (setvar "cecolor" (itoa Color))
                )
                (if Linetype
                  (setvar "celtype" Linetype)
                )
                (acet-exfillet-fillet)
              );progn
        ;else  if the second object was on a locked layer or was not a valid entity.
              (progn
                (cond
                  ( bLayerUnLocked  (princ "\nThe object is on a locked layer."))
                  ( (not bCoplanar) (princ "\nObject is not parallel to the current UCS."))
                  ((not (member ent2type lsValid)) (princ "\nRequires 2 lines, arcs, circles, plines, ellipses, splines, rays or xlines."))
                  (t "\nUnknown error.")
                );cond
                (setvar "errno" 7)   ;telks the loop to ask again.
              );progn
            ) ;if
          );progn
        );if
            ;(setvar "errno" 0)    ;;;0 breaks out of the loop.
      );while
    );progn
  ;;;else the the first entity was either on a locked layer or it was an invlid object....
    (cond
        ( bLayerUnLocked  (princ "\nThe object is on a locked layer."))
        ( (not bCoplanar) (princ "\nObject is not parallel to the current UCS."))
        ((not (member enttype lsValid)) (princ "\nRequires 2 lines, arcs, circles, plines, ellipses, splines, rays or xlines."))
        (t "\nUnknown error.")
    );cond
 
  ) ;if
  (setvar "errno" 7)
  (redraw ent 4)
 
) ;defun optUserpick
 
 
 
(defun  acet-exfillet-PlinetoCurve( ent ent2 pickpt1 pickpt2 ent2Type / ss    eLast entFillet lsWidthThick subentpt1 )
  ;(print pickpt1)
  ;(command "_.undo" "_be")
  (command "_.undo" "_m")
  (setq lsWidthThick (acet-exfillet-getwidth-thickness ent))
  (command "_.explode" ent )   ;;;ent is assumed to be the pline
  (setq ss (ssget "_P")) ;setq
  (setq eLast (entlast)) ;setq
  (setq subentpt1 (car (nentselp pickpt1))) ;setq
 
  (command "_.fillet" (list ent pickpt1)(list ent2 pickpt2))
 
  (if (not (wcmatch (getvar "cmdnames") "*FILLET*")) ;;if we succeded in filleting
    (progn
    (cond
      ;;;if nothing new was created and we have either an arc or a line and  trim mode is set to 2.
      ( (and (equal eLast (entlast)) (or (= ent2Type "ARC") (= ent2Type "LINE")) (= (acet-exfillet-gettrim) 2))
        (progn
          ;(command "_.ucs" "_ob" subentpt1 )
          (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick))
          (command "_.pedit" ent2 "_Y" "_W" (rtos (car lsWidthThick))  "_J" ent "" "_X")   ;;;then pedit join it all together
          ;(command "_.ucs" "_P")
          (command "_.erase" ss "")
        );progn
      );this condition
 
      ;;;if something was created and trimmode is set to join
       ( (and (not (equal eLast (entlast))) (or (= ent2Type "ARC") (= ent2Type "LINE")) (= (acet-exfillet-gettrim) 2))
          (progn
            (setq entFillet (entlast))
           ; (command "_.ucs" "_ob" subentpt1 )
            (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick))
            (command "_.pedit" entFillet "_Y" "_W" (rtos (car lsWidthThick)) "_J" ent ent2 "" "_X")   ;;;then pedit join it all together
           ; (command "_.ucs" "_p" )
            (command "_.erase" ss "")
          );progn
       )
    ;;;if something was created but the second entity is not joinable...
      ( (and (not (equal eLast (entlast))) (not (or (= ent2Type "ARC") (= ent2Type "LINE"))) (= (acet-exfillet-gettrim) 2))
          (progn
            (setq entFillet (entlast))
            ;(command "_.ucs" "_ob" subentpt1 )
            (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick))
            (command "_.pedit" entFillet "_Y" "_J" ent "" "_X")   ;;;then pedit join the fillet and the pline together.
            ;(command "_.ucs" "_p")
            (command "_.erase" ss "")
          );progn
       )
 
      ( t (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick)))
    );cond
 
    ;(command "_.undo" "_end")
    (setq iUndo (1+ iUndo)) ;setq
    (setvar "errno" 0)
   );progn
  ;;else the fillet failed....
    (progn
      (command nil)  ;;;force us out of the "select second object" prompt by hitting the 1st entity again.
      ;(command "_.undo" "2");;;this might need to be changed to an undo 3
      (command "_.undo" "_B")
      (setvar "errno" 7)  ;;;errno of 7 means loop it
    );progn
  );if
 
  nil
  ;(setq e2 nil) ;setq
) ;defun ()
 
(defun acet-exfillet-fillet ( )
 
(cond
  ;;let the special casing begin....
  ((and (wcmatch entType "*POLYLINE") (member  ent2Type lsBugfix))  ;if ent1 is pline and other is on bugfix list.
    (setq e2 (acet-exfillet-PlinetoCurve ent ent2 pickpt1 pickpt2 ent2Type) )
  )
 
  ((and (wcmatch ent2Type "*POLYLINE") (member  entType lsBugfix))    ;if ent2 is pline and other is on bugfix list
    (setq e2 (acet-exfillet-PlinetoCurve ent2 ent pickpt2 pickpt1 entType))
  )
 
  ((and (= entType "LWPOLYLINE") (equal ent ent2))  ;if it's two segments on the same lwpolyline...
    (progn
 ;          (alert "2 segments on lwpoly.")
      ;(command "_.undo" "_be")
      (command "_.undo" "_m")
      (command "_.convertpoly" "_H" ent "")
      (command "_.fillet" pickpt1 pickpt2)
      (if (not (wcmatch (getvar "cmdnames") "*FILLET*")) ;;if we succeded in filleting
        (progn
          (command "_.convertpoly" "_L" ent "")
          ;(command "_.undo" "_end")
          (setq iUndo (1+ iUndo)) ;setq
          (setq e2 nil) ;setq
          (setvar "errno" 0)    ;;means we succeeded and can break out of the loop
        );progn
      ;;else
        (progn
          (command nil)  ;;;force us out of the "select second object" prompt
          ;(command "_.undo" "1")        ; changed this line
          (command "_.undo" "_B")
          (command "_.convertpoly" "_L" ent "")            ;and this line to fix P1 AutoCAD bug.
          (setvar "errno" 7)  ;;;errno of 7 means something went wrong  on the second object prompt
        );progn
      );if
    );progn
  );this case
 
  ((and (wcmatch ent2Type "*POLYLINE") (wcmatch entType "*POLYLINE")(not (equal ent ent2)))    ;if they are both plines
    (acet-exfillet-PlinetoPline)
  );this case
 
  ( T
    (progn
      (command "_.fillet"  (list ent pickpt1)(list ent2 pickpt2))
      (if (not (wcmatch (getvar "cmdnames") "*FILLET*")) ;;if we succeded in filleting
        (progn
          (setq iUndo (1+ iUndo)) ;setq
          (setq e2 nil) ;setq
          (setvar "errno" 0)
        );progn
      ;else
        (progn
          (command nil)
          ;(command "_.undo" "1")
          (command "_.undo" "_B")
          (setvar "errno" 7)
        ) ;progn
      );if
    );progn
  );default -- just fillet 'em
);cond
 
);end defun
 
 
 
 
(defun acet-exfillet-getwidth-thickness (e /  elist rWidth this40 this41 SKIPLOOP rThickness  )
;;;Pass in the entity list for a pline and this will return a list of
;;;the widths of the various segments.   This is called by acet-exfillet-plinetopline
  (setq rWidth nil)
  (setq elist (entget e))
  (setq rThickness (cdr (assoc 39 elist))) ;setq
  (if (= rThickness nil)
    (setq rThickness 0.0) ;setq
  ) ;if
 
  (cond
    ((= (cdr(assoc 0 elist)) "LWPOLYLINE")
      (progn
      (setq rWidth (cdr (assoc 43  elist))) ;setq
      (if (= rWidth nil)
        (setq rWidth 0.0) ;setq
      ) ;if
      );progn
    )
    ((= (cdr(assoc 0 elist)) "POLYLINE")
      (progn
      (setq e (entnext e)) ;skip to the first vertex
      (setq elist (entget e))
      (setq this40 (assoc 40 elist)) ;setq
      (setq this41 (assoc 41 elist)) ;setq
      (setq rWidth (cdr this40 )) ;setq
      (if (not (= rWidth (cdr this41)))
        (progn
        (setq rWidth 0.0) ;setq
        (setq SKIPLOOP T) ;setq
        );progn
        (setq SKIPLOOP nil) ;setq
      ) ;if
      (while (and (= (cdr (assoc 0 elist)) "VERTEX") (= SKIPLOOP T))
       ;(print elist)(terpri)
        (if (or (not (= (cdr this40) rWidth)) (not (= (cdr this41) rWidth)))
          (progn
          (setq rWidth 0.0) ;setq
          (setq SKIPLOOP T) ;setq
          );progn
        ) ;if
        (setq e (entnext e))
        (setq elist (entget e))
        (setq this40 (assoc 40 elist)) ;setq
        (setq this41 (assoc 41 elist)) ;setq
      );while
      );progn
    );this cond
    (t (princ "\nMust pass a POLYLINE or LWPOLYLINE to (acet-exfillet-getwidth-thickness)."))
  );cond
  (list rWidth rThickness)
);defun
 
 
(defun acet-exfillet-optTrim ( / iTrim  sDefault ans )
 
  ;(command "_.undo" "_be")
  (command "_.undo" "_m")
  (setq iTrim (acet-exfillet-gettrim)) ;setq
 
  (cond
    ((= iTrim 0) (setq sDefault "No trim"))
    ((= iTrim 1) (setq sDefault "Trim"))
    ((= iTrim 2) (setq sDefault "Join"))
         ;setq
  ) ;if
  (initget "Join Trim Notrim")
  (setq ans (getkword (acet-str-format "\nEnter Trim mode option [Join/Trim/No trim] <%1>: " sDefault ))) ;setq
  ;(setq ans (getkword (strcat "\nEnter Trim mode option [Join/Trim/No trim] <" sDefault ">: " ))) ;setq
  (cond
    ((= ans "Join") (acet-exfillet-settrim 2))
    ((= ans "Trim") (acet-exfillet-settrim 1))
    ((= ans "Notrim") (acet-exfillet-settrim 0))
    ( t (acet-exfillet-settrim iTrim))
  );cond
  ;(command "_.undo" "_end") ;setq
  (setq iUndo (1+ iUndo)) ;setq
  (setvar "errno" 7)
) ;defun optTrim
 
 
 
(defun acet-exfillet-settrim ( iTrim / )
 
  (if (or (< iTrim 0)(> iTrim 2))
    (progn
      (princ "\nACET_TRIMMODE value must be in the range of 0 to 2.")
      nil          ;return nil if failed....
    );progn
  ;;else
    (progn
      (acet-setvar (list "ACET-TRIMMODE" iTrim 2))   ;set the bns variable in the registry
      (if (or (= iTrim 0)(= iTrim 1))       ;;if the value is 0 or 1
        (setvar "TRIMMODE" iTrim)           ;;set ACAD's the same else
        (setvar "TRIMMODE" 1)
       ;  (setvar "TRIMMODE" (getvar "TRIMMODE"))               ;; set it to 1 NO! do nothing
      ) ;if
      T   ;return true because all is well....
    );progn
  ) ;if
 
) ;defun acet-exfillet-settrim
 
(defun acet-exfillet-gettrim ( / iTrim)
 
  (setq iTrim (acet-getvar (list "ACET-TRIMMODE" 2))) ;setq
 
  (if (or
        (not iTrim)
        (and
          (or (= iTrim 0) (= iTrim 1))
          (not (= iTrim (getvar "TRIMMODE")))
        ) ;and
      );or
    ;(progn
      (setq iTrim (getvar "TRIMMODE"))
      ;(alert "\nACET-TRIMMODE and TRIMMODE were out of whack.")
      ;;;rewhack 'em
 
  ) ;if
  iTrim
) ;defun acet-exfillet-gettrim
 
(defun acet-exfillet-restorepline ( ss subentpt lsWidthThickness /    )
 ;;;Pass this function a selection set of lines and it will join them together and slap the width back on them.
  ;(command "_.ucs""_OB" subentpt)
  (command "_.pedit" subentpt "_Y" "_J" ss "" "_w")
  (if (> (car lsWidthThickness) 0.0000000)
    (command (rtos (car lsWidthThickness)) "_X")
    (command "0.0" "_X")
   );if
   (if (> (cadr lsWidthThickness) 0.00000000)
     (command "_.change" (entlast) "" "_P" "_T" (rtos (cadr lsWidthThickness))"")
   ) ;if
   ;(command "_.ucs" "_p")
  (entlast) ;return the ent name of the pline we just joined together,
);defun
 
(defun acet-exfillet-PlinetoPline  ( ;|ent ent2 pickpt1 pickpt2|; / lsWidthThick1 lsWidthThick2 eLast ss ss2 entFillet subentpt1 subentpt2 )
 
  ;    (alert "currently filleting two separate plines")
  ;(command "_.undo" "_be")
  (command "_.undo" "_m")
  (setq lsWidthThick2 (acet-exfillet-getwidth-thickness ent2) ) ;setq    Get the width info for each pline
  (command "_.explode" ent2  )                     ;explode
  (setq ss2 (ssget "_P")) ;setq                    ;stash it into a selection set
  ;;;adding new code to store width...
  (setq lsWidthThick1 (acet-exfillet-getwidth-thickness ent) ) ;setq
  (command "_.explode" ent  )
  (setq ss (ssget "_P")) ;setq
 
  (setq eLast (entlast)) ;setq
;(print pickpt1)
;(print pickpt2)
 
  (setq subentpt1 (car (nentselp pickpt1))) ;setq
  (setq subentpt2 (car (nentselp pickpt2)))
 
  (command "_.fillet"  (list subentpt1 pickpt1)(list subentpt2 pickpt2));;check to see if it succeeded (no "radius too large" errors)
 
 
  (if (not (wcmatch (getvar "cmdnames") "*FILLET*")) ;;if we succeded in filleting
    (progn
      (cond
        ;;if trimmode != notrim  and there is not a new segment to add.
        ((and (equal eLast (entlast)) (not(= (acet-exfillet-gettrim) 0)))
          (progn
            ;(command "_.ucs" "_ob" subentpt1 )
            (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick1))
            (setq ent2 (acet-exfillet-restorepline ss2 subentpt2 lsWidthThick2))
            (if (= (acet-exfillet-gettrim) 2)
              (command "_.pedit" ent  "_J" ent ent2 "" "_X")
            );if
            ;(command "_.ucs" "_p"  )
            (command "_.erase" ss ss2 "")
          );progn
        )
    ;;if trimmode != notrim and there is a new segment to add...
        ((and (not (equal eLast (entlast))) (not(= (acet-exfillet-gettrim) 0)))
          (progn
            (setq entFillet (entlast)) ;setq
            (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick1))
            (setq ent2 (acet-exfillet-restorepline ss2 subentpt2 lsWidthThick2))
            (if (= (acet-exfillet-gettrim)  2)
              (command "_.pedit" entFillet "_Y" "_W" (rtos (car lsWidthThick1)) "_J" ent ent2  "" "_X") ;apply width to fillet segment.
            );if
            (command "_.erase" ss ss2 "")
          );progn
        )
 
        (T
          (progn
            (setq ent (acet-exfillet-restorepline ss subentpt1 lsWidthThick1))
            (setq ent2 (acet-exfillet-restorepline ss2 subentpt2 lsWidthThick2))
          );progn
        )
 
      ) ;cond
 
      ;(command "_.undo" "_end")
      (setq iUndo (1+ iUndo)) ;setq
      (setq e2 nil) ;setq
      (setvar "errno" 0)
    );progn
  ;else
    (progn
      (command nil)  ;;;force us out of the "select second object" prompt
      ;(command "_.undo" "3")
      (command "_.undo" "_b")
      (setvar "errno" 7)  ;;;errno of 7 means something went wrong
    );progn
  );if
 
) ;defun acet-exfillet-PlinetoPline
 
(defun acet-Exfillet-bCoplanar ( e / elist v_ent v_ucs )
  ;;;takes an entity name and returns true if it lies in the plane of the current UCS.
  (setq elist (entget e)
       v_ent (cdr (assoc 210 elist))
      v_ucs (acet-geom-cross-product (getvar "ucsxdir") (getvar "ucsydir"))
  );setq
 
  (equal v_ent v_ucs 0.00000001)    ; return T if the entity is coplanar and nil if it is not.
 
) ;defun acet-exfillet-b-coplanar
(princ)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.02.2010 в 12:59.
VVA вне форума  
 
Непрочитано 18.02.2010, 12:29
#26
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Только надо отметить, что в стандартной поставке Express Tools в одном дистрибутиве с AutoCAD этой программы не было и нет и придется ее прописывать вручную.
Profan вне форума  
 
Непрочитано 25.03.2010, 12:54
#27
human


 
Регистрация: 01.02.2008
Сообщений: 170


а у меня возникает ошибка в команде copym.
при копировании с равным шагом (measure) этот самый шаг часто не соблюдается. Т.е. получается один шаг где-то отличный от заданного , а остальные соответствуют. Последовательности не заметил - иногда нормально, иногда где-то один пролет изменяет расстояние. приходится постоянно менять точки начала отсчета и конца раскладки - помогает.
acad 2009 , но замечал и на 2007 такую же пакость.
human вне форума  
 
Автор темы   Непрочитано 25.03.2010, 13:44
#28
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


human, Может быть это поможет Alternative copy
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.03.2010, 14:58
#29
human


 
Регистрация: 01.02.2008
Сообщений: 170


да, смотрел ту ветку.
но в экспрессе удобнее. выбираешь любой объект , начальную точку , шаг и конечную и он сам раскладывает. удобно для деревяшек, лестниц и при армировании. вот тока не всегда указанные интервалы выдает
human вне форума  
 
Непрочитано 25.03.2010, 19:46
#30
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Здесь, кажется, есть работа для VVA. Чтобы не было искажений надо перед тем, как нажать заключительное Enter, отключить привязки (F3)
Vova вне форума  
 
Непрочитано 25.03.2010, 22:49
#31
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


В качестве первого приближения:
Код:
[Выделить все]
;;
;;  Copym.lsp - Multiple copy command with measure, divide and array capabilities.
;;                    
;;
;;  Copyright © 1999 by Autodesk, Inc.
;;
;;  Your use of this software is governed by the terms and conditions
;;  of the License Agreement you accepted prior to installation of this
;;  software.  Please note that pursuant to the License Agreement for this
;;  software, "[c]opying of this computer program or its documentation
;;  except as permitted by this License is copyright infringement under
;;  the laws of your country.  If you copy this computer program without
;;  permission of Autodesk, you are violating the law."
;;
;;  AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
;;  AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
;;  MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
;;  DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
;;  UNINTERRUPTED OR ERROR FREE.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:copym (/ ss p1 cmd snaptp ucshold)
  (acet-error-init
    (list (list	"cmdecho"   0		"snaptype"  0
		"snapmode"  nil		"gridmode"  nil
		"snapunit"  nil		"gridunit"  nil
		) ;_ end of list
 ;_ end of list
 ;_ end of list
					;list
	  0
	  '(progn
	    (acet-sysvar-set (list "cmdecho" 0))
	    (if
	     ss
	     (acet-ss-redraw ss 4)
	     )
	    (if
	     ucshold
	     (acet-ucs-set ucshold)
	     )
	    (acet-sysvar-restore)
	    (princ)
	    )				;progn
	  )				;list
    )					;acet-error-init
  (setq ucshold (acet-ucs-get nil))
  (if (setq ss (ssget))
    (progn
      (acet-ss-redraw ss 3)
      (setq p1 (getpoint "\nBase point: "))
      (acet-ss-redraw ss 4)
      (if p1
	(acet-copym ss p1)
	)				;if
      )					;progn then
    )					;if
  (acet-error-restore)
  )					;defun c:copym

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun acet-copym (ss p1 / na p2 n d lst j p3)
  (setq p2 t)
  (setq n 0)
  (while p2
    (setq na (entlast))
    (if	(not lst)
      (setq lst (list (list ss p1)))
      )					;if
    (setvar "lastpoint" p1)
    (acet-ss-redraw ss 3)
    (initget 128 "Repeat Divide Measure Array Undo eXit")
    (setq p2
	   (acet-ss-drag-move
	     ss
	     p1
	     "\nSecond point or \n[Repeat (last)/Divide/Measure/Array (dynamic)/Undo] <exit>: "
	     nil
	     )				;acet-ss-drag-move 
	  )				;setq
    (acet-ss-redraw ss 4)
    (if	(= p2 "eXit")
      (setq p2 nil)
      )					;if
    (cond
      ((= p2 "Undo")
       (if (= n 0)
	 (princ "\nNothing to undo.")
	 (progn
	   (command "_.undo" "1")
	   (setq n   (- n 1)
		 lst (cdr lst)
		 ss  (car lst)
		 p1  (cadr ss)
		 ss  (car ss)
		 )			;setq
	   )				;progn else
	 )				;if
       )				;cond #1
      ((= p2 "Repeat")
       (if (= n 0)
	 (princ "\nNothing to repeat.")
	 (progn
	   (setq p2 (cadr (car lst))
		 p1 (cadr (cadr lst))
		 d  (list (- (car p2) (car p1))
			  (- (cadr p2) (cadr p1))
			  (- (caddr p2) (caddr p1))
			  )		;list
		 )			;setq
	   (command "_.copy" ss "" "_none" d "")
	   (setq n   (+ n 1)
		 ss  (acet-ss-new na)
		 p1  (list (+ (car p2) (car d))
			   (+ (cadr p2) (cadr d))
			   (+ (caddr p2) (caddr d))
			   )		;list
		 lst (cons (list ss p1) lst)
		 )			;setq
	   )				;progn else
	 )				;if
       )				;cond #2
      ((equal 'list (type p2))
       (command "_.copy" ss "" "_none" p1 "_none" p2)
       (setq n	 (+ n 1)
	     ss	 (acet-ss-new na)
	     p1	 p2
	     lst (cons (list ss p1) lst)
	     )				;setq
       )				;cond #3
      ((and (= "Divide" p2)
	    (setq p3 (getpoint p1 "\nSelect division ending point: "))
	    (progn
	      (initget 6)
	      (setq j (getint "\nNumber of copies: "))
	      )				;progn
	    )				;and
       (setq ss	 (acet-copym-divide ss p1 p3 j)
	     p1	 p3
	     lst (cons (list ss p1) lst)
	     n	 (+ n 1)
	     )				;setq
       )				;cond #4
      ((and (= "Measure" p2)
	    (setq p3 (getpoint p1 "\nSelect measure ending point: "))
	    (progn
	      (initget 6)
	      (setq d (getdist "\nDistance between copies: "))
	      )				;progn
	    )				;and
       (setq ss	 (acet-copym-measure ss p1 p3 d)
					;returns selset and base point
	     p1	 (cadr ss)
	     ss	 (car ss)
	     lst (cons (list ss p1) lst)
	     n	 (+ n 1)
	     )				;setq
       )				;cond #5
      ((= "Array" p2)
       (setq ss	 (acet-copym-array ss p1)
	     p1	 (cadr ss)
	     ss	 (car ss)
	     lst (cons (list ss p1) lst)
	     n	 (+ n 1)
	     )				;setq
       )				;cond #6
      (p2
       (princ "\nInvalid input.")
       )				;cond #7
      )					;cond close
    )					;while

  )					;defun acet-copym

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun acet-copym-array	(ss p1 / a)
  (initget "Pick Measure Divide")
  (setq a (getkword "\nPick (dynamic)/Measure/Divide <Pick>: "))
  (cond
    ((or (not a)
	 (= a "Pick")
	 )				;or
     (setq a (acet-copym-array-dynamic ss p1))
     )					;cond #1
    ((= a "Measure")
     (setq a (acet-copym-array-measure ss p1))
     )					;cond #2
    ((= a "Divide")
     (setq a (acet-copym-array-divide ss p1))
     )					;cond #3
    )					;cond close
  a
  )					;defun acet-copym-array


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun acet-copym-array-dynamic
       (ss p1 / snap grid snapu gridu p2 p3 p4 dx dy lst ss2 na a)

  (acet-undo-begin)
  (setq p2 (getangle p1 "\nSpecify angle <0>: "))
  (if p2
    (setq p2 (polar p1 p2 1.0))		;convert angle to a point
    (setq p2 (polar p1 0.0 1.0))	;use default of 0 and convert to point
    )					;if
  (setq	p3 (polar p1 (+ (angle p1 p2) (/ pi 2.0)) 1.0)
	p1 (trans p1 1 0)
	p2 (trans p2 1 0)
	p3 (trans p3 1 0)
	)				;setq
  (acet-ucs-cmd
    (list "_3p" (trans p1 0 1) (trans p2 0 1) (trans p3 0 1))
    ) ;_ end of acet-ucs-cmd
  (setq	p1 (trans p1 0 1)
	p2 (trans p2 0 1)
	p3 (trans p3 0 1)
	)				;setq

  (setq	p2  (acet-copym-getcorner
	      p1
	      "\nPick a corner point to establish COLUMN and ROW distances: "
	      t
	      ) ;_ end of acet-copym-getcorner
	dx  (- (car p2) (car p1))
	dy  (- (cadr p2) (cadr p1))
	lst (list p1)
	p4  t
	)				;setq 
  (acet-sysvar-set
    (list
      "snapunit"
      (list (abs dx) (abs dy))
      "gridunit"
      (list (abs dx) (abs dy))
      "snapmode"
      1
      "gridmode"
      1
      ) ;_ end of list
    )					;acet-sysvar-set

  (while p4
    (setvar "snapmode" 1)
    (setvar "gridmode" 1)
					;(setq p4 (getpoint p1 "\nPick location for array element or <enter> when done: "))
    (setq
      p4 (acet-ss-drag-move
	   ss
	   p1
	   "\nPick location for array element or <enter> when done: "
	   nil
	   )				;acet-ss-drag-move 
      )					;setq
    (cond
      ((not p4) t)			;cond #1
      ((member p4 lst)
       (princ "\n*invalid* You already picked that point!")
       )				;cond #2
      (t
       (setq na	 (entlast)
	     lst (cons p4 lst)
	     )				;setq
       (command "_.copy" ss "" "_none" p1 "_none" p4)
       )				;cond #3
      )					;cond close
    )					;while
  (if na
    (setq p1  (trans (getvar "lastpoint") 1 0)
	  ss2 (acet-ss-new na)
	  )				;setq
    (setq ss2 ss)			;setq else
    )					;if
  (acet-ucs-cmd (list "_prev"))
  (setq p1 (trans p1 0 1))

  (acet-sysvar-restore)
  (acet-undo-end)

  (list ss2 p1)
  )					;defun acet-copym-array-dynamic

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun acet-copym-getcorner (p1 msg nozero / flag p2 na)
  (while (not flag)
    (setq na (entlast))
    (command "_.rectang" p1)
    (while (wcmatch (getvar "cmdnames") "*RECTANG*")
      (princ msg)
      (command pause)
      )					;while
    (setq p2 (getvar "lastpoint"))	;setq
    (if	(not (equal na (entlast)))
      (entdel (entlast))
      )					;if
    (cond
      ((not nozero)
       (setq flag t)
       )				;cond #1
      ((and (equal (car p1) (car p2) 0.00000001)
	    (equal (cadr p1) (cadr p2) 0.00000001)
	    )				;and
       (princ "\n*Points cannot be equal*")
       )				;cond #2
      ((= (car p1) (car p2))
       (princ "\n*X coords cannot be equal*")
       )				;cond #3
      ((= (cadr p1) (cadr p2))
       (princ "\n*Y coords cannot be equal*")
       )				;cond #4
      (t
       (setq flag t)
       )				;cond #5
      )					;cond close
    )					;while
  p2
  )					;defun acet-copym-getcorner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun acet-copym-array-measure	(ss   p1   /	snap grid snapu
				 gridu	   p2	p3   p4	  dx   dy
				 ss2  na   a	n    j	  k    m
				 x    y
				 )
  (acet-undo-begin)

  (setq p2 (getangle p1 "\nSpecify angle <0>: "))
  (if p2
    (setq p2 (polar p1 p2 1.0))		;convert angle to a point
    (setq p2 (polar p1 0.0 1.0))	;use default of 0 and convert to point
    )					;if
  (setq	p3 (polar p1 (+ (angle p1 p2) (/ pi 2.0)) 1.0)
	p1 (trans p1 1 0)
	p2 (trans p2 1 0)
	p3 (trans p3 1 0)
	)				;setq
  (acet-ucs-cmd
    (list "_3p" (trans p1 0 1) (trans p2 0 1) (trans p3 0 1))
    ) ;_ end of acet-ucs-cmd

  (setq	p1 (trans p1 0 1)
	p2 (acet-copym-getcorner
	     p1
	     "\nPick a corner point to establish ROW and COLUMN distances: "
	     t
	     ) ;_ end of acet-copym-getcorner
	dx (- (car p2) (car p1))
	dy (- (cadr p2) (cadr p1))
	p4 t
	)				;setq 
  (acet-sysvar-set
    (list
      "snapunit"
      (list (abs dx) (abs dy))
      "gridunit"
      (list (abs dx) (abs dy))
      "snapmode"
      1
      "gridmode"
      1
      ) ;_ end of list
    )					;acet-sysvar-set

  (setq	p2 (acet-copym-getcorner
	     p1
	     "\nOther corner for array fill: "
	     t
	     ) ;_ end of acet-copym-getcorner
	) ;_ end of setq
  (if (> (car p2) (car p1))
    (setq dx (abs dx))
    (setq dx (* -1.0 (abs dx)))
    )					;if
  (if (> (cadr p2) (cadr p1))
    (setq dy (abs dy))
    (setq dy (* -1.0 (abs dy)))
    )					;if
  (setq	k (/ (abs (- (car p2) (car p1)))
	     (abs dx)
	     ) ;_ end of /
	m (/ (abs (- (cadr p2) (cadr p1)))
	     (abs dy)
	     ) ;_ end of /
	k (+ 1 (atoi (rtos k 2 0)))
	m (+ 1 (atoi (rtos m 2 0)))
	)				;setq

  (setq n 0)
  (repeat m
    ;; rows
    (setq y (+ (cadr p1) (* dy n)))

    (setq j 0)
    (repeat k
      ;; columns
      (setq x (+ (car p1) (* dx j)))
      (setq na (entlast))
      (if (not (and (= n 0)
		    (= j 0)
		    )			;and
	       )			;not
	(command "_.copy"
		 ss
		 ""
		 "_none"
		 p1
		 "_none"
		 (list x y (caddr p1))
		 ) ;_ end of command
	)				;if
      (setq j (+ j 1))			;setq
      )					;repeat

    (setq n (+ n 1))
    )					;repeat
  (if na
    (setq p1  (trans (getvar "lastpoint") 1 0)
	  ss2 (acet-ss-new na)
	  )				;setq
    (setq ss2 ss)			;setq else
    )					;if
  (acet-ucs-cmd (list "_prev"))
  (setq p1 (trans p1 0 1))

  (acet-sysvar-restore)
  (acet-undo-end)

  (list ss2 p1)
  )					;defun acet-copym-array-measure

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun acet-copym-array-divide
       (ss p1 / p2 dx dy ss2 na a n j k m x y p3)
  (acet-undo-begin)

  (setq p2 (getangle p1 "\nSpecify angle <0>: "))
  (if p2
    (setq p2 (polar p1 p2 1.0))		;convert angle to a point
    (setq p2 (polar p1 0.0 1.0))	;use default of 0 and convert to point
    )					;if
  (setq	p3 (polar p1 (+ (angle p1 p2) (/ pi 2.0)) 1.0)
	p1 (trans p1 1 0)
	p2 (trans p2 1 0)
	p3 (trans p3 1 0)
	)				;setq
  (acet-ucs-cmd
    (list "_3p" (trans p1 0 1) (trans p2 0 1) (trans p3 0 1))
    ) ;_ end of acet-ucs-cmd

  (setq	p1 (trans p1 0 1)
	p2 (acet-copym-getcorner
	     p1
	     "\nOther corner for array fill: "
	     nil
	     ) ;_ end of acet-copym-getcorner
	)				;setq

  (initget 6)
  (setq k (getint "\nEnter number of columns: "))
  (initget 6)
  (setq m (getint "\nEnter number of rows: "))
  (setq	dx (/ (- (car p2) (car p1)) k)
	dy (/ (- (cadr p2) (cadr p1)) m)
	)				;setq

  (setq n 0)
  (repeat m
    ;; rows
    (setq y (+ (cadr p1) (* dy n)))

    (setq j 0)
    (repeat k
      ;; columns
      (setq x (+ (car p1) (* dx j)))
      (setq na (entlast))
      (if (not (and (= n 0)
		    (= j 0)
		    )			;and
	       )			;not
	(command "_.copy"
		 ss
		 ""
		 "_none"
		 p1
		 "_none"
		 (list x y (caddr p1))
		 ) ;_ end of command
	)				;if
      (setq j (+ j 1))			;setq
      )					;repeat

    (setq n (+ n 1))
    )					;repeat
  (if na
    (setq p1  (trans (getvar "lastpoint") 1 0)
	  ss2 (acet-ss-new na)
	  )				;setq
    (setq ss2 ss)			;setq else
    )					;if
  (acet-ucs-cmd (list "_prev"))
  (setq p1 (trans p1 0 1))

  (acet-undo-end)

  (list ss2 p1)
  )					;defun acet-copym-array-divide


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					;Takes a selection set, two points and the distance between 
					;consecutive copies.
					;Returns a list containing a selection set the most 
					;recent copy and a base point.
					;
(defun acet-copym-measure (ss p1 p3 d / j n na p2)

  (acet-undo-begin)
  (setq	j (fix (/ (distance p1 p3) d))
	n 1
	)				;setq
  (repeat j
    (setq p2 (polar p1 (angle p1 p3) (* d n))
	  na (entlast)
	  )				;setq
    (command "_.copy" ss "" "_none" p1 "_none" p2)
    (if	(= n j)
      (setq ss (acet-ss-new na))
      )					;if
    (setq n (+ n 1))
    )					;repeat 
  (acet-undo-end)
  (list ss p2)
  )					;defun acet-copym-measure

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
					;takes a selection set, two points and the number of copies to 
					;make of the selection between the two points.
					;returns a selection set the most recent copy
					;
(defun acet-copym-divide (ss p1 p3 j / d n na p2)

  (acet-undo-begin)
  (setq	d (/ (distance p1 p3) j)
	n 1
	)				;setq
  (repeat j
    (setq p2 (polar p1 (angle p1 p3) (* d n))
	  na (entlast)
	  )				;setq
    (command "_.copy" ss "" "_none" p1 "_none" p2)
    (if	(= n j)
      (setq ss (acet-ss-new na))
      )					;if
    (setq n (+ n 1))
    )					;repeat 
  (acet-undo-end)
  ss
  )					;defun acet-copym-divide
(princ)
Сохранить и заменить файл copym.lsp в каталоге расположения ЕТ
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.03.2010, 11:45
#32
human


 
Регистрация: 01.02.2008
Сообщений: 170


to
Кулик Алексей aka kpblc

Благодарю, вроде пока нормально работает.
human вне форума  
 
Непрочитано 09.06.2010, 10:00
#33
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


burst
еще надо бы заменить
(if (zerop (logand (cdr (assoc 70 AENT)) 1)) ...)
на
(if (or (zerop (logand (cdr (assoc 70 AENT)) 1)) ;_Change by VVA Attr fix 03.09.2008 Not hidden attribute
(zerop (logand (cdr (assoc 70 AENT)) 9)) ;_Add kakt00z 1.06.2010
) ...
если аттрибут скрытый+установленный
может есть и еще продолжения с вариантами аттрибутов, но я не сталкивался

PS: интересно, а что за нужда заставляет всех разбивать свои любимые, долго вымученные, годами продуманные блоки? неужели архив?
kakt00z вне форума  
 
Автор темы   Непрочитано 09.06.2010, 17:18
#34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Исправил #2
Цитата:
Сообщение от kakt00z Посмотреть сообщение
интересно, а что за нужда заставляет всех разбивать свои любимые, долго вымученные, годами продуманные блоки?
При подготовке подосновы приходится разбивать чужие, через одно место сделанные блоки.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.06.2010, 14:55
#35
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Попробовал запустить OVERKILL в редакторе блоков в автокаде 2010 (в других версиях не пробовал). Работа программы прервалась ошибкой:
Код:
[Выделить все]
Command: overkill

Initializing...
Select objects: Specify opposite corner: 234 found

Select objects:

** _.UCS command not allowed in block editor. **
** _.UCS command not allowed in block editor. **
А также не вернулись в исходное состояние настройки переменных: "highlight" "ucsicon" "pickstyle" "osmode"... (Как выяснилось после довольно продолжительного копания на тему "а что это с автокадом случилось??") Так что, граждане, будьте бдительны
Do$ вне форума  
 
Непрочитано 24.06.2010, 13:56
#36
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Do$, я уже писал об этомв посте №9 в этой теме. Но напомнить не лишним будет конечно, т.к. проблема не решена. (хотя тупое решение можно сразу дать - обернуть код OVERKILL условием, проверяющим значение переменной BLOCKEDITOR. Если она равна 1, то ничего не выполнять, а выводить на экран только alert "в редакторе блоков OVERKILL не работает")
Makswell вне форума  
 
Автор темы   Непрочитано 24.06.2010, 16:53
#37
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Makswell Посмотреть сообщение
хотя тупое решение можно сразу дать - обернуть код OVERKILL условием, проверяющим значение переменной BLOCKEDITOR
Makswell, Наверное это правильное решение, т.к. в редакторе блоков может быть только одна система координат - самого блока.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.07.2010, 10:46
#38
Psyakrev


 
Регистрация: 17.06.2010
Сообщений: 438


Autocad 2008 + sp1, русский, Express Tools не установлен.
Скачал burstfix из 2-го сообщения, загрузил, вбил burst, получил
Код:
[Выделить все]
; ошибка: no function definition: ACET-ERROR-INIT
Подскажите, как исправить.

ЗЫ ACET - AutoCad Express Tools? Если так, извините за глупый вопрос И так понятно, что нужно сделать.
Psyakrev вне форума  
 
Непрочитано 20.07.2010, 11:13
#39
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Psyakrev Посмотреть сообщение
ЗЫ ACET - AutoCad Express Tools?

Цитата:
Сообщение от Psyakrev Посмотреть сообщение
И так понятно, что нужно сделать.
Do$ вне форума  
 
Непрочитано 20.07.2010, 11:37
#40
Eu

монтаж
 
Регистрация: 22.10.2006
Украина
Сообщений: 109


Хочу напомнить - суицид запрещен всеми существующими на настоящий момент религиями, в т.ч. и dwg/ru
__________________
Eu
Eu вне форума  
 
Непрочитано 20.07.2010, 11:45
#41
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Eu, ты это к чему?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.07.2010, 12:13
#42
Eu

монтаж
 
Регистрация: 22.10.2006
Украина
Сообщений: 109


Это я насчет "исправить". Может сперва на вирус проверить? Сейчас, между прочим, ужас, что творится с этим делом, а органам и дела нету.
__________________
Eu
Eu вне форума  
 
Непрочитано 24.02.2011, 09:13
#43
getr

Конструктор
 
Регистрация: 06.04.2005
Из тех ворот-откуда весь народ.
Сообщений: 356
<phrase 1=


Так что же надо было сделать в посте #38?Kак заставить работать burst без Expresstools ?
__________________
"Мнение не бывает ни истинным, ни ложным, а лишь полезным в жизни или бесполезным. ",- Ауробиндо
И не надо делать удивленных движений руками.
getr вне форума  
 
Непрочитано 24.02.2011, 12:18
#44
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Ничего не сделаешь, надо устанавливать Express Tools.
Ну как вариант - п о и с к и подгрузка только необходимых для burst файлов lsp,arx и пр. Но зачем так извращаться, если можно просто установить Express Tools?
Do$ вне форума  
 
Непрочитано 08.09.2011, 13:19
#45
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение

При маскировка текста иногда текст исчезал. Причины:
1. Связано было с тем, что по какой-то причине не удалялись расширенные (РД) данные о маскировке текста
Добавил строчку принудительного удаления РД ACET-TEXTMASK

Код:
(vva-Delete_XData ENT (list "ACET-TEXTMASK")) ;;;======>>>>>> CHANGE by VVA MIPТак как это было у меня сделано давно, то найти файл с примером не удалось. Ссылки на темы гда описывалась подобная проблема
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=27771EB
http://dwg.ru/f/showthread.php?t=424
http://www.cadtutor.net/forum/showthread.php?t=6940
http://www.cadtutor.net/forum/showthread.php?t=9931
http://discussion.autodesk.com/threa...sageID=5247366
Описание проблемы и решение
http://www.theswamp.org/index.php?topic=14599.0
К сожалению, в моем случае не помогает Текст все равно исчезает.
Происходит это только с текстами со стилем на основе асконовского шрифта GOST_B.TTF. Если у замаскированного текста сменить вручную стиль, то текст появляется - пока так выкручиваюсь. В чем может быть проблема?
Вложения
Тип файла: dwg
DWG 2004
textmask_bug.dwg (55.2 Кб, 6584 просмотров)
Тип файла: rar GOST_B.rar (20.0 Кб, 145 просмотров)
Do$ вне форума  
 
Непрочитано 22.11.2011, 16:52
#46
Largo GT

Архитектор
 
Регистрация: 11.03.2009
Новороссийск
Сообщений: 99


Пред история:
Однажды читая форум, набрел на эту тему, скачал архивчик:
Цитата:
Сообщение от Dukk Посмотреть сообщение
с 2007 акада из expressa исчезли работа со слоями и команда pljoin работает неверно, вот исправления -
в команды работы со слоями внесены изменения:
layoff -при выборе активного слоя по умолчанию предлагается ответ <YES>
layulk -разблокирует все слои а не только те что указаны
+добавлены иконки для вынесения на toolbar
скопировал в папку с Express Tools с заменой и радовался несколько лет работая в ACAD 2007, пока не перешел на ACA 2012. Скопировал файлы из архива в Express Tools 2012 и начальсь не стыковочки: _overkill - не работает, и _layiso - изолирует слои как в 2007 (т.е. остальных слоев вообще не видно, а должны быть бледными) _laylck работает нормально, блокируемый слой - бледный.
Помогите разобраться где нужно подправить, методом тыка выяснил что все из-за файла acetauto.lsp
Largo GT вне форума  
 
Непрочитано 24.11.2011, 01:42
#47
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


1. LAYLOCKCFADECTL
2. OVERKILL IN AUTOCAD NOW
Vova вне форума  
 
Непрочитано 24.11.2011, 10:04
#48
Largo GT

Архитектор
 
Регистрация: 11.03.2009
Новороссийск
Сообщений: 99


Цитата:
Сообщение от Vova Посмотреть сообщение
1. LAYLOCKCFADECTL
2. OVERKILL IN AUTOCAD NOW
1. LAYLOCKFADECTL=84, дело в lsp-файлах. Попробуйте скопировать с заменой эти файлы в папку с Express и изолировать обьект
2. OVERKILL IN AUTOCAD NOW = разобрался, acetauto.lsp поправил
Вложения
Тип файла: rar Express.rar (15.6 Кб, 229 просмотров)
Largo GT вне форума  
 
Непрочитано 01.02.2012, 09:54
#49
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Спасибо за исправленный Burst! Очень кстати оказался.
Обнаружился только один неприятный момент - если у блока масштабные коэффициенты равны по абсолютному значению, но не равны по знаку (такое бывает, если блок "зеркалить"), то у полилиний терялось свойство "глобальный вес". На скорую руку подправил функцию BURST-ONE.
UPDATE: В BGTolls подглядел, как правильно "взрывать" блоки. Снова спасибо VVA!
UPDATE1: Полностью перелопатил всю программу, т.к. нужно было зараз тысячи блоков расчленять. Теперь на несколько тысяч блоков вместо десятков минут тратится пара. Код выкладываю на обсуждение (или осуждение )
UPDATE2: Обнаружился "косяк": если у какого-либо из свойств атрибута значение "ByLayer" (по слою), и текущее значение в чертеже этого свойства не "ByLayer", то после BURST у этого свойства полученного текста будет значение такое же, как текущее в четреже а не наследованное от слоя атрибута или слоя блока. Нашел причину - в функции att-text при использовании функции entmake если у атрибута нет группы 62, 6 или 370, то они берутся из текущих свойств чертежа.
UPDATE3: "Косяк" исправил. Файл перезалил.
Вложения
Тип файла: lsp burstm.lsp (11.0 Кб, 232 просмотров)

Последний раз редактировалось Do$, 03.02.2012 в 13:09.
Do$ вне форума  
 
Непрочитано 02.02.2012, 20:35
#50
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Может кому приглянется мой вариант или его части
правда без обработки ошибок и т.п. местами может не доработано, но с моими случаями мне хватает
"раздолбать" чертеж
Вложения
Тип файла: lsp explode-block.LSP (3.0 Кб, 205 просмотров)
Тип файла: lsp explode-pline.LSP (1.3 Кб, 169 просмотров)
Тип файла: lsp clean.LSP (3.8 Кб, 201 просмотров)
kakt00z вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Express Tools Bugs ( Ошибки Express Tools )

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Express Tools Perezz!! AutoCAD 483 13.02.2015 10:57
Исчезновение части Express Tools SlayERR AutoCAD 4 09.10.2006 15:55
Express tools под Acad2005 AutoCAD 16 18.07.2004 01:58
express tools для autocad 2005 Савва AutoCAD 5 01.04.2004 09:52
Не загружается меню Express Tools. Mikhail AutoCAD 3 17.10.2003 14:16