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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему не работает выбор "*LINE"?

Почему не работает выбор "*LINE"?

Ответ
Поиск в этой теме
Непрочитано 05.10.2024, 11:31 #1
Почему не работает выбор "*LINE"?
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 775

Почему не работает выбор "*LINE"?
Код:
[Выделить все]
 ;; https://www.cadtutor.net/forum/topic/35448-multiple-offset/#comment-288045 / множеств. смещение
(defun c:multiple-offset (/ s i d p v)
;;; Tharwat 14. Dec. 2011 ;;;
 (if (and (setq s (car (entsel "\n Select entity :")))
          ;(member (cdr (assoc 0 (entget s))) '("*LINE" "CIRCLE" "ARC" "ELLIPSE")) ; /оригинал/ не работает с линиями и ПЛ

  ; (member (cdr (assoc 0 (entget s))) '("LINE" "PLINE" "CIRCLE" "ARC" "ELLIPSE")) 
;  не работает с  LWPOLYLINE и 2D-полилиниями?

(member (cdr (assoc 0 (entget s))) '("LINE" "LWPOLYLINE" "PLINE" "CIRCLE" "ARC" "ELLIPSE")) 
; работает с LINE и LWPOLYLINE
; но не выбирает 2D-полилинии

          (setq i (getint "\n number of offset times :"))
          (setq d (getdist "\n Distance of offset :"))
          (setq p (getpoint "\n Specify point on side to offset :"))
          (setq v d)
     )
   (repeat i (command "_.offset" d s p "") (setq d (+ d v)))
   (princ)
 )
 (princ)
)
По идее должны выбираться и линии (LINE) и полилинии ( LWPOLYLINE и 2D-полилинии)...
Но эта строка в оригинальном лиспе игнорит выбор и LINE и LWPOLYLINE и 2D-полилинии:
Код:
[Выделить все]
 (member (cdr (assoc 0 (entget s))) '("*LINE" "CIRCLE" "ARC" "ELLIPSE")) 
Если заменить строку на
Код:
[Выделить все]
 (member (cdr (assoc 0 (entget s))) '("LINE" "LWPOLYLINE" "PLINE" "CIRCLE" "ARC" "ELLIPSE")) 
то это работает с LINE и LWPOLYLINE, но не выбирает 2D-полилинии...
Есть ли какой-нибудь универсальный выход для выбора линий всех типов?
У меня в чертеже системная переменная PLINETYPE - 2.
Если добавить "POLYLINE", то выбираются и 2D-полилинии
Код:
[Выделить все]
 (member (cdr (assoc 0 (entget s))) '("LINE" "LWPOLYLINE" "POLYLINE" "CIRCLE" "ARC" "ELLIPSE"))
Не знаю, правильное ли это решение))) Раньше не было проблем с "*LINE", может в коде надо что-то подкорректировать?

Последний раз редактировалось Ingpro, 05.10.2024 в 13:06.
Просмотров: 649
 
Непрочитано 05.10.2024, 21:43
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Ingpro Посмотреть сообщение
; работает с LINE и LWPOLYLINE
; но не выбирает 2D-полилинии
2d полилинии имеют тип POLYLINE, а не PLINE
Код:
[Выделить все]
 (member (cdr (assoc 0 (entget s))) '("LINE" "LWPOLYLINE" "POLYLINE" "CIRCLE" "ARC" "ELLIPSE"))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 05.10.2024, 22:24
#3
Ingpro


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


Цитата:
Сообщение от VVA Посмотреть сообщение
2d полилинии имеют тип POLYLINE, а не PLINE
VVA, спасибо, но почему в коде не работает выбор "*LINE" (для LINE и LWPOLYLINE)?
Ingpro на форуме  
 
Непрочитано 06.10.2024, 06:53
#4
name02


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


Потому что (member) ищет такой же элемент в списке, а поиск для *LINE - это маска для функции (wcmatch)
name02 вне форума  
 
Автор темы   Непрочитано 06.10.2024, 22:14
#5
Ingpro


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Потому что (member) ищет такой же элемент в списке, а поиск для *LINE - это маска для функции (wcmatch)
Тогда эту строку надо записать по-другому? Как?
Код:
[Выделить все]
 (member (cdr (assoc 0 (entget s))) '("*LINE" "CIRCLE" "ARC" "ELLIPSE")) 
чтобы работал выбор "*LINE"
Ingpro на форуме  
 
Непрочитано 06.10.2024, 23:06
#6
Кулик Алексей aka kpblc
Moderator

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


Щщас!
(wcmatch (cdr (assoc 0 (entget s))) "*LINE,CIRCLE,ARC,ELLIPSE")

----- добавлено через 55 сек. -----
И вообще, кто мешает нарисовать вариант типа
(ssget "_.+:S:E:L" "*LINE,CIRCLE,ARC,ELLIPSE")
И уже из набора получать примитив?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.10.2024, 23:23
#7
Ingpro


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Щщас!
(wcmatch (cdr (assoc 0 (entget s))) "*LINE,CIRCLE,ARC,ELLIPSE")
Спасибо!
Ingpro на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему не работает выбор "*LINE"?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает операция выбор в динамическом блоке KiFF Динамические блоки 1 15.09.2016 23:24
Autocad выбор объекта, затем команда не работает Tym AutoCAD 13 05.12.2014 16:55
Не работает быстрый выбор и свойства bars AutoCAD 9 02.10.2013 10:52
Lisp. Почему может не работать entmod. Не работает в 1-м отдельно взятом файле. Kirill_Ja LISP 2 18.07.2013 17:00
Выбор рамкой (работает глючно) Strannyk AutoCAD 2 24.05.2011 11:40