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

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

Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом)

Ответ
Поиск в этой теме
Непрочитано 18.07.2014, 18:34 #1
Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом)
kurstep
 
Регистрация: 27.01.2012
Сообщений: 242

Здравстуйте .Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом).

----- добавлено через 56 сек. -----
Конкретнее чтобы функция работала сразу после выделения двух полилиний

Последний раз редактировалось kurstep, 18.07.2014 в 18:50.
Просмотров: 2354
 
Непрочитано 18.07.2014, 18:43
#2
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от kurstep Посмотреть сообщение
Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом).
Чё ?

----- добавлено через ~3 мин. -----
Может быть только _offset можно обойтись ?
maratovich вне форума  
 
Автор темы   Непрочитано 18.07.2014, 18:59
#3
kurstep


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


Вот файл задания, нужно все это чтобы вместо таких стен из полилиний появилась одна полилиния по центру стен...

----- добавлено через ~2 мин. -----
maratovich, Просто много таких чертежей, очень хочется с оптимизировать процесс)
Вложения
Тип файла: dwg
DWG 2010
lisp.dwg (1.72 Мб, 1291 просмотров)
kurstep вне форума  
 
Непрочитано 18.07.2014, 19:19
1 | #4
Do$

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


Цитата:
Сообщение от kurstep Посмотреть сообщение
Здравстуйте .Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом).
Чем-то напомнило:
Increase Size Decrease Size Нажмите для просмотра
http://www.youtube.com/watch?v=UoKlKx-3FcA
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 20.07.2014, 19:45
#5
kurstep


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


Забавно конечно. Но задача я считаю все-таки решаема
Код:
[Выделить все]
 (defun c:of (/)
  (setq polset (ssget))
	(setq set1 (ssname polset 1))
	      (setq set2 (ssname polset 2))
	      
(setq vla_object1 (vlax-ename->vla-object set1))
(setq Perimeter1(vlax-curve-getDistAtParam vla_object1 (vl-catch-all-apply 'vlax-curve-getEndParam (list vla_object1))))
		    (setq vla_object2 (vlax-ename->vla-object set2))
(setq Perimeter2(vlax-curve-getDistAtParam vla_object2 (vl-catch-all-apply 'vlax-curve-getEndParam (list vla_object2)))))
(setq per (max (Perimeter1 Perimeter2 )))
Таким образом выбираю более длинную из полилиний... Но как произвести теперь offset во внутрь не знаю. Помогите кто может)
kurstep вне форума  
 
Непрочитано 21.07.2014, 06:39
#6
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Может я не верно понял но вот это работает.
Код:
[Выделить все]
 (defun c:osc (/ *error* p p1 d )
  (defun *error* (msg) (princ))
  (setvar 'cmdecho 0)          
(setvar 'osmode 512)
  (setq p(getpoint "\nУкажите первую линию: "))
  (setvar 'osmode 128)
  (setq p1 (getpoint p "\nУкажите вторую линию: "))
  (setq d (distance p p1))
  (command "_offset" (/ d 2) p p1 "")  
  (command "свойства" "_L" "" "С" "осевые" "")
  (setvar 'osmode 951)
  (setvar 'cmdecho 1)
  (princ)
)
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 21.07.2014, 10:20
#7
Кулик Алексей aka kpblc
Moderator

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


Jonas, а у меня, например, osmode не 951. Почему это я должен твое значение использовать? А если в файле нет слоя "осевые"? А если у меня cecolor / celweight / celtype нестандартные?

----- добавлено через 43 сек. -----
Пока ничего делать не хочу, лови. Разбирайся. Критика и пожелания не принимаются Ничего переделывать не буду.
Код:
[Выделить все]
 (vl-load-com)

(defun tt (/ adoc selset out start err res prop_lst)

  ;; Устанавливаемые свойства для результирующей полилинии
  (setq prop_lst (list '("color" . 2)
                       (cons "lineweight" aclnwtbylayer)
                       (cons "linetype" "bylayer")
                       ) ;_ end of list
        ) ;_ end of setq

  (if (and (= (type (setq selset (vl-catch-all-apply
                                   (function (lambda ()
                                               (ssget "_:L" '((0 . "LWPOLYLINE") (70 . 1)))
                                               ) ;_ end of lambda
                                             ) ;_ end of function
                                   ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'pickset
              ) ;_ end of =
           (= (length (setq selset (mapcar (function vlax-ename->vla-object)
                                           ((lambda (/ tab item)
                                              (repeat (setq tab  nil
                                                            item (sslength selset)
                                                            ) ;_ end setq
                                                (setq tab (cons (ssname selset (setq item (1- item))) tab))
                                                ) ;_ end of repeat
                                              tab
                                              ) ;_ end of lambda
                                            )
                                           ) ;_ end of mapcar
                            ) ;_ end of setq
                      ) ;_ end of length
              2
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
      (setq out (car (vl-sort selset (function (lambda (a b) (< (vla-get-area a) (vla-get-area b))))))
            res (car (vlax-safearray->list
                       (vlax-variant-value
                         (vla-offset
                           out
                           (* 0.5
                              (distance
                                (setq start (vlax-curve-getpointatparam out 0.5))
                                (vlax-curve-getclosestpointto (car (vl-remove out selset)) start)
                                ) ;_ end of distance
                              ) ;_ end of *
                           ) ;_ end of vla-offset
                         ) ;_ end of vlax-variant-value
                       ) ;_ end of vlax-safearray->list
                     ) ;_ end of car
            ) ;_ end of setq
      (foreach prop prop_lst
        (if (vl-catch-all-error-p
              (setq err (vl-catch-all-apply
                          (function
                            (lambda ()
                              (vlax-put-property res (car prop) (cdr prop))
                              ) ;_ end of lambda
                            ) ;_ end of function
                          ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of vl-catch-all-error-p
          (princ
            (strcat "\nCan't set property " (strcase (car prop) t) " to value " (vl-princ-to-string (cdr prop)))
            ) ;_ end of princ
          ) ;_ end of if
        ) ;_ end of foreach
      (vla-endundomark adoc)
      ) ;_ end of progn
    ) ;_ end of if
  res
  ) ;_ end of defun
----- добавлено через ~3 мин. -----
По идее еще надо добавить проверку на "концентрическость" полилиний, но мне лениво.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2014, 11:11
#8
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Jonas, а у меня, например, osmode не 951. Почему это я должен твое значение использовать? А если в файле нет слоя "осевые"? А если у меня cecolor / celweight / celtype нестандартные?
Вы мне ни чего конечно не должны а ответы сами знаете.
А вообще я не программист поэтому вопросы лучше не задавать а вот пожелания, советы буду рад услышать.
__________________
Из честолюбия или чувства долга не может родиться ни чего ценного. А. Эйнштейн
Jonas вне форума  
 
Непрочитано 21.07.2014, 11:15
#9
Кулик Алексей aka kpblc
Moderator

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


Свой вариант я уже показал...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2014, 13:00
#10
Do$

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


Цитата:
Сообщение от Jonas Посмотреть сообщение
поэтому вопросы лучше не задавать а вот пожелания, советы буду рад услышать.
Это как раз "правильные" вопросы, которые содержат скрытые советы.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 21.07.2014, 18:11
#11
kurstep


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


Спасибо всем за помощь
kurstep вне форума  
 
Непрочитано 21.07.2014, 18:49
#12
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


Вариант - команда MPL из PLTOOLS. Вполне адекватно работает, если не завышать параметр "количество опорных точек". В отличие от решения, предложенного в #7, строит среднюю полилинию, равноудаленную от обеих исходных, а не "оффсет" внутренней, поэтому результаты иногда выглядят интересно
После построения необходимо "прополоть" результат командой PL-VxRdc.
kp+ вне форума  
 
Непрочитано 21.07.2014, 22:35
#13
VVA

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


Цитата:
Сообщение от kp+ Посмотреть сообщение
поэтому результаты иногда выглядят интересно
Есть другой алгоритм - "Rollin Ball". Дает адекватные рузультаты, но более ресурсоемкий
Как видно из названия - использует метод "катящегося мяча"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите написать лисп чтобы посередине между концентрических замкнутых полилиний появлялась еще одна на другом слое(или другим цветом)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Как отразить звуки от распахнутого окна квартиры? trel Архитектура 44 18.06.2015 06:11