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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP.Окружности в начальных точках всех полилиний чертежа

LISP.Окружности в начальных точках всех полилиний чертежа

Ответ
Поиск в этой теме
Непрочитано 19.01.2014, 22:41 #1
LISP.Окружности в начальных точках всех полилиний чертежа
Raznouh
 
Баку, Азербайджан
Регистрация: 13.09.2011
Сообщений: 114

Здравствуйте.
Пытаюсь разобраться каким образом делается "пакетная" обработка всех объектов набора в один клик.А именно :например,как можно нарисовать окружности в начальных точках всех полилиний чертежа.Начал разбирать похожую тему в книге Полещука (пример со стр.132),понял про наборы ,почти понял про repeat.На основании этого написал кусок кода под свой пример:
Код:
[Выделить все]
 (defun c:prov ()
(setq nab (ssget "_X" '((0 . "POLYLINE"))))
(setq i -1 len (sslength nab))
(repeat len
(setq i (1 +i))
(setq pol (ssname nab i))
Если я правильно понял, в результате этого у меня получается (list pol) - список с названиями всех полилиний ,попавших в набор.
А как применить к каждой из них код ,типа
Код:
[Выделить все]
 (setq fpt ( vlax-curve-getstartpoint pol))
(command "_circle" fpt 20 ""))
я никак не соображу.
Кому не лень,помогите пожалуйста разобраться
Просмотров: 1545
 
Непрочитано 19.01.2014, 23:39
1 | #2
VVA

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


Код:
[Выделить все]
(defun c:prov ()
  (vl-load-com)
  (setq
    nab (ssget "_X"
               (list '(0 . "*POLYLINE") (cons 410 (getvar "CTAB")))
        ) ;_ end of ssget
  ) ;_ end of setq
  (setq i -1)
  (repeat (sslength nab)
    (setq pol (ssname nab (setq i (1+ i)))) ;_ i-я,начиная с 0, полилиния из набора nab
    (setq fpt (vlax-curve-getstartpoint pol))
    (Circle fpt 20)
  ) ;_ end of repeat
) ;_ end of defun
(defun Circle (cen rad)
  (entmakex (list (cons 0 "CIRCLE")
                  (cons 10 cen)
                  (cons 40 rad)
            ) ;_ end of list
  ) ;_ end of entmakex
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.01.2014, 23:45
1 | #3
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


От калеки калеке:

Код:
[Выделить все]
 
(defun c:prov ( / )
    (vl-load-com);;Без этого не будут работать vla функции
    (setq nab (ssget "_x" '((0 . "LWPOLYLINE"))));;Для плоской полилинии
	(setq len (sslength nab));;Определяем длину набора
	(setq i 0);;Обнуляем счётчик
	
	(repeat len ;;Запускаем цикл длиной len
	(setq pol (ssname nab i));;Получаем iый примитив набора
	(setq fpt(vlax-curve-getstartpoint (vlax-ename->vla-object pol)))
	(command "_circle" fpt 20 "")
	(setq i (+ 1 i));;Увеличиваем счетчик цикла
	)
);end_of_defun
Это конечно очень криво, но для понимания пойдет. Тут без entmakex. Всё командно рисуется. А вообще нужно делать как VVA написал
Скачай себе Notepade ++ или пользуйся аналогичным редактором с подсветкой кода. А то ты скобки забываешь закрывать)
Mozgunov вне форума  
 
Непрочитано 20.01.2014, 01:17
1 | #4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


библиотеки нужно пользовать, чтоб не писать одно и тоже одно и тоже по многу многу раз раз
Код:
[Выделить все]
 (defun c:test ()
  (ssapply
    (ssget "_X"
	   (list '(0 . "*POLYLINE") (cons 410 (getvar "CTAB")))
    )
    (lambda (x)
      (entmake-circle (vlax-curve-getstartpoint x) 20)
    )
  )
)
gomer вне форума  
 
Автор темы   Непрочитано 20.01.2014, 01:50
#5
Raznouh


 
Регистрация: 13.09.2011
Баку, Азербайджан
Сообщений: 114


VVA,Mozgunov,gomer,спасибо огромное ,ребята!
Raznouh вне форума  
 
Непрочитано 20.01.2014, 07:30
#6
Дима_

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


то gomer - по моей практике - при создании функции работающие с наборами, списками и др. не суть какими данными, их (данные) в большинстве случаев "правильней" располагать последним аргументом - дело вкуса конечно, но, хоть в автолиспе и нет каррирования - но хотя-бы через eval'ы и apply применение будет более "линейным". Все ИХМО.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP.Окружности в начальных точках всех полилиний чертежа



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Обнуление глобальной ширины всех полилиний модели. shartal Программирование 1 21.03.2013 18:46
Два вопроса новичка: Доступ к свойствам полилинии и обработка всех полилиний Иван Морозов Программирование 7 02.11.2012 17:11
Несвойственные Автокаду вещи Vova AutoCAD 49 01.02.2012 19:33
Как разорвать несколько полилиний в точках пересечения с полилинией? Малёха Программирование 4 17.09.2009 19:46