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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Удаление при совпадении в координатах

Удаление при совпадении в координатах

Ответ
Поиск в этой теме
Непрочитано 01.11.2011, 09:35 #1
Удаление при совпадении в координатах
Pavel_GP
 
Инженер-гидрограф
 
г.г. Ленинград
Регистрация: 15.09.2011
Сообщений: 170

Здравствуйте.
Имеется функция построение точек
defun.....();функция 1
............
...........
;само построение точек
..........
........
........

Потом идет другая функция построение точек
defun.....() ;функция 2
............
...........
;само построение точек
..........
........
........

Подскажите плз, какой прописать код в функцию 2, чтобы при совпадении точек(по координатам), точки построенные по функции 1 удалялись автоматически?
Спс.
Просмотров: 2919
 
Непрочитано 01.11.2011, 10:10
#2
pan

добрый человек
 
Регистрация: 23.02.2004
Глушь
Сообщений: 971


OVERKILL
__________________
Правильно сформулированный вопрос содержит 90% ответа.
pan вне форума  
 
Непрочитано 01.11.2011, 10:12
1 | #3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


В функции1 записываешь все построенные точки (координаты точки и ссылку на примитив-точку) в список. В функции2 перед построением очередной точки проверяешь наличие точки с такими координатами в в списке и если уловие выполняется удаляешь примитив по сохраненой ссылке
Код:
[Выделить все]
 
(setq lst nil)

(defun fun1()
  ...
  (setq point (list x y z)) ; координаты очередной точки
  (vl-cmdf "_.point" point) ; построили точку
  (setq lst (cons (list point (entlast)) lst)) ; запомнили координаты и ссылку на построенную точку
  ...
  )

(defun fun2()
  ...
  (setq point (list x y z)) ; координаты очередной точки
  (if (setq rec (assoc point lst)) ; если в списке lst уже есть точка с координатами point,
    (entdel (cadr rec)) ; то удаляем ее по сохраненной ссылке
    )
  (vl-cmdf "_.point" point) ; построили точку
  ...
  )
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 01.11.2011, 10:55
#4
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Код:
[Выделить все]
 (defun minmer()
 (setq mm_n (list(+ x0 (* e (- l lw))) (+ y0 height)))
  (setq mm_s (list(+ x0 (* e (- l lw))) y0))
(command "_.AECCCREATEPOINTMANUAL" mm_n "двм" 0.0 "")
  (command "_.AECCCREATEPOINTMANUAL" mm_s "днм" 0.0 "")
  (setq lst (cons (list mm_n (entlast)) lst)) ; запомнили координаты и ссылку на построенную точку
  (setq lsw (cons (list mm_s (entlast)) lsw)) ; запомнили координаты и ссылку на построенную точку
  )
;конец ф-ии
(setq l lw)
(while (<= (+ l promint) lo)
  (setq l (+ l 1))
  (setq ost (rem l promint))
 (if (= ost 0) (minmer))
  )
 
(defun degmer()
 (setq dm_n (list(+ x0 (* e (- l lw))) (+ y0 height)))
  (setq dm_s (list(+ x0 (* e (- l lw))) y0))
  (if (setq rec (assoc dm_n lst)) ; если в списке lst уже есть точка с координатами dm_n,
    (entdel (cadr rec)) ; то удаляем ее по сохраненной ссылке
    )
  (if (setq rec (assoc dm_s lsw)) ; если в списке lsw уже есть точка с координатами dm_s,
    (entdel (cadr rec)) ; то удаляем ее по сохраненной ссылке
    )
(command "_.AECCCREATEPOINTMANUAL" dm_n "двг" 0.0 "")
  (command "_.AECCCREATEPOINTMANUAL" dm_s "днг" 0.0 "")
  )
вырезка из моего кода...

удаляет только по dm_s (строка 23), по первому (dm_n)(строка 20) нет, подскажите где ошибаюсь.

Последний раз редактировалось Pavel_GP, 01.11.2011 в 11:01.
Pavel_GP вне форума  
 
Непрочитано 01.11.2011, 11:25
1 | #5
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Ошибка здесь
Код:
[Выделить все]
 
; У Тебя так (Ты записываешь в разные списки разные координаты, а ссылки одни и те же)
(command "_.AECCCREATEPOINTMANUAL" mm_n "двм" 0.0 "")
(command "_.AECCCREATEPOINTMANUAL" mm_s "днм" 0.0 "")
(setq lst (cons (list mm_n (entlast)) lst)) ; запомнили координаты и ссылку на построенную точку
(setq lsw (cons (list mm_s (entlast)) lsw)) ; запомнили координаты и ссылку на построенную точку
; должно быть так
(command "_.AECCCREATEPOINTMANUAL" mm_n "двм" 0.0 "")
(setq lst (cons (list mm_n (entlast)) lst)) ; запомнили координаты и ссылку на построенную точку
(command "_.AECCCREATEPOINTMANUAL" mm_s "днм" 0.0 "")
(setq lsw (cons (list mm_s (entlast)) lsw)) ; запомнили координаты и ссылку на построенную точку
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 01.11.2011, 11:40
#6
Дима_

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


В таком виде тоже весьма может проскочить ошибка - т.к. использовать в качестве ключа список из чисел с плавающей точкой - это не очень правильно (может просто не распознать), надо писать свой assoc с учетом "погрешности".
Offtop: а вобще от такого стиля лиспа меня передергивает - в 30 строках - mm_n, mm_s, l, lw, x0, y0, height, lst, lsw, promint, ost, dm_n, dm_s, rec + 11 setq в рекурсии! - и вся эта каша в одной области видимости - да тут без пол литра не разберешся
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.11.2011, 11:41
#7
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


TararykovDG
Большое спасибо.

от Дима_
Offtop: а вобще от такого стиля лиспа меня передергивает - в 30 строках - mm_n, mm_s, l, lw, y0, height, lst, lsw, promint, ost, dm_n, dm_s, rec - и вся эта каша в одной области видимости - да тут без пол литра не разберешся

Так это вырезка из кода =) Я еще пока не умею как вы комповать в более простой код, вот пишу код, как том. Учусь у вас.

спс.

Последний раз редактировалось Pavel_GP, 01.11.2011 в 11:47.
Pavel_GP вне форума  
 
Непрочитано 01.11.2011, 12:08
#8
VVA

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
использовать в качестве ключа список из чисел с плавающей точкой - это не очень правильно
Полностью согласен. Пример - число 0 представлено как -1.87175e-007
Здесь How to check if a point is in a list ? есть примеры соответствующих функций
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Удаление при совпадении в координатах



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При перемещении обекты почуму-то копируются... Vadimiu AutoCAD 11 04.09.2014 18:24
результат работ команд purge и audit lex0101 Программирование 23 13.02.2012 08:34
AutoCAD 2011 при копировании не вставляет в другой чертеж Maxxwell AutoCAD 7 07.05.2010 14:44
Удаление дыма через оконные проёмы Perezz!! Прочее. Архитектура и строительство 5 01.11.2006 16:38
быстродействие автокада MR.ZHEKA AutoCAD 19 01.02.2006 14:48