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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Можно ли написать лисп для обозначения проёма?

Можно ли написать лисп для обозначения проёма?

Ответ
Поиск в этой теме
Непрочитано 11.09.2013, 20:54 #1
Можно ли написать лисп для обозначения проёма?
zz212243
 
ПГС
 
Санкт-Петербург
Регистрация: 11.05.2011
Сообщений: 133

Можете помочь, написать лисп на такую операцию?
Ситуация: есть сотни прямоугольников, нужно в них проставить обозначения "проём", т.е. ломанную полилинию из двух отрезков, см. рисунок.
Я лисп-программированием к сожалению не владею.. надеюсь, когда-нибудь и изучу.
Можно ли написать такой лисп, чтобы одним махом во всех выбранных прямоугольниках ставилось это обозначение?
Спасибо.

Изображения
Тип файла: jpg untitled.JPG (31.2 Кб, 505 просмотров)

Просмотров: 3938
 
Непрочитано 11.09.2013, 21:26
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Можно ли? Можно.
ЗЫ.
У самого часто возникает потребность в таком скрипте, но руки не доходят...
Boxa вне форума  
 
Непрочитано 12.09.2013, 09:09
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zz212243 Посмотреть сообщение
Можно ли написать такой лисп, чтобы одним махом во всех выбранных прямоугольниках ставилось это обозначение?
Чем не устроил вариант с расстановкой вхождений динамического блока? В этом случае, при желании, можно так же будет программно узнать, сколько каких проёмов в чертеже и создать их ведомость (при необходимости).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.09.2013, 10:14
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


2 hwd
Бывает от архов или инженеров получаешь план с отверстиями и перечерчивать просто нет времени.
Хотя ты наверное прав, проще вместо обозначения, программно вставлять дин. блок соответственно его изменяя.
Boxa вне форума  
 
Непрочитано 12.09.2013, 11:47
#5
Дима_

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


Offtop: Решил размяться с утреца и аж 2 (правда одинаковых) навоял
proem-line - добавляет полилинию к прямоугольникам, proem-block удалит прямоугольник и создаст на его месте блок с соответствующими коэффицентами растяжения. Нормально работать будет только с "правилно" соориентированными в пространстве (паралелно осям) прямоугольниками.
Код:
[Выделить все]
 (vl-load-com)
(defun c:proem-line()
  ((lambda (doc lst-ent)
     (vla-startundomark doc)
     (mapcar '(lambda (lst)
                ((lambda (minx maxx miny maxy)
                   (entmakex (append '((0 . "LWPOLYLINE")(100 . "AcDbEntity")(100 . "AcDbPolyline") (90 . 3))
                                     (mapcar '(lambda (pt) (cons 10 pt))
                                             (list (list minx miny)
                                                   (list (+ minx (* 0.2(- maxx minx)))
                                                         (+ miny (* 0.8(- maxy miny))))
                                                   (list maxx maxy))))))
                 (apply 'min (mapcar 'car lst))
                 (apply 'max (mapcar 'car lst))
                 (apply 'min (mapcar 'cadr lst))
                 (apply 'max (mapcar 'cadr lst))))
             lst-ent)
     (vla-endundomark doc))
   (vla-get-activedocument (vlax-get-acad-object))
   (mapcar '(lambda (ent) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))))
           (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LWPOLYLINE") (90 . 4) (70 . 1)))))))))

(defun c:proem-block()
  ((lambda (doc lst-ent)
     (vla-startundomark doc)
     (if (not (tblsearch "block" "proem-block"))
         (vla-AddLightweightPolyline
            (vla-add (vla-get-blocks doc) (vlax-3d-point '(0 0 0)) "proem-block")
            (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 13)) '(1 1 0 1 0 0 1 0 1 1 0.2 0.8 0 0))))
     (mapcar '(lambda (lst)
                ((lambda (minx maxx miny maxy)
                   (entmakex (append '((0 . "INSERT") (100 . "AcDbEntity") (100 . "AcDbBlockReference") (2 . "proem-block"))
                                      (list (list 10 minx miny) (cons 41 (- maxx minx)) (cons 42 (- maxy miny))))))
                 (apply 'min (mapcar 'car lst))
                 (apply 'max (mapcar 'car lst))
                 (apply 'min (mapcar 'cadr lst))
                 (apply 'max (mapcar 'cadr lst))))
             (mapcar 'car lst-ent))
     (mapcar 'entdel (mapcar 'cdr lst-ent))
     (vla-endundomark doc))
   (vla-get-activedocument (vlax-get-acad-object))
   (mapcar '(lambda (ent) (cons (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent))) ent))
           (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LWPOLYLINE") (90 . 4) (70 . 1)))))))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 12.09.2013 в 15:14.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.09.2013, 15:02
#6
zz212243

ПГС
 
Регистрация: 11.05.2011
Санкт-Петербург
Сообщений: 133


Спасибо, Дмитрий, опробуем
zz212243 вне форума  
 
Непрочитано 12.09.2013, 15:17
#7
Дима_

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


Исправил ошибку (блоки всегда создавались в модели - строка 32 - убрал пару (67 . 0) - лишку из определения скопипастил).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.09.2013, 20:05
#8
zz212243

ПГС
 
Регистрация: 11.05.2011
Санкт-Петербург
Сообщений: 133


шик!
zz212243 вне форума  
 
Непрочитано 12.09.2013, 23:44
#9
LynxM


 
Регистрация: 17.08.2010
Kyiv
Сообщений: 688
<phrase 1= Отправить сообщение для LynxM с помощью Skype™


Чуть-чуть не то что просит автор темы, но для тех кто пользуется СПДС графиксом надеюсь что пригодится. Делал для себя параметрический объект для обозначения приема. Описание и ссылка для загрузки: http://roof-facade.blogspot.com/2013...-SPDS.html?m=1
__________________
Лучше не обещать, чем обещать и не исполнять.
LynxM вне форума  
 
Непрочитано 13.09.2013, 19:33
#10
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,103


Дима_, мощно! Захотелось поменять ник
SetQ вне форума  
 
Непрочитано 13.09.2013, 20:49
#11
Дима_

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


Ну в этом контексте твой ник можно интерпритировать как созданный для глобальных вещей.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.09.2013, 22:13
#12
gomer

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


ой мне б ваши проблемы...
gomer вне форума  
 
Непрочитано 08.11.2013, 08:07
#13
Никита Ремизов


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


Можно ли как-то отредактировать этот лисп, чтобы в нем определялась короткая сторона проема и отношение (0,2 0,8) высчитывалось относительно нее, как это сделано в динмическом блоке (см. картинку)?
Миниатюры
Нажмите на изображение для увеличения
Название: проем.PNG
Просмотров: 110
Размер:	11.7 Кб
ID:	115924  
Никита Ремизов вне форума  
 
Непрочитано 08.11.2013, 09:21
#14
Дима_

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


С обычными блоками так не сделать (т.к. соотношение сторон будет уникальным для каждого блока - коэффицентами растяжения не подогнать), с линией можно - (мне сейчас не проверить - только вечером посмотреть смогу) - вместо строк
Код:
[Выделить все]
 (list (+ minx (* 0.2(- maxx minx)))
       (+ miny (* 0.8(- maxy miny))))
вставить:
Код:
[Выделить все]
 ((lambda (g2) (list (+ minx g2) (- maxy g2)))
  (* 0.2 (min (- maxx minx) (- maxy miny))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 08.11.2013 в 09:32.
Дима_ вне форума  
 
Непрочитано 08.11.2013, 10:17
#15
Никита Ремизов


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


Отлично, спасибо!
А нельзя чтоб еще и заливка этой области делалась?)

Последний раз редактировалось Никита Ремизов, 08.11.2013 в 10:33.
Никита Ремизов вне форума  
 
Непрочитано 08.11.2013, 15:35
#16
Дима_

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


Так можно бесконечно подправлять - делай дин. блок с 2 параметрами (длинна, ширина), которые будет лисп раставлять.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 08.11.2013, 15:38
#17
Никита Ремизов


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


Динамический блок сделан, но ему каждый раз нужно менять размер под каждый проем, а с лиспом можно сразу все выделить и готово - так удобнее.
Никита Ремизов вне форума  
 
Непрочитано 29.01.2014, 16:01
#18
Полусолнце

Конструктор
 
Регистрация: 13.03.2012
ЮФО
Сообщений: 112
<phrase 1=


Цитата:
Сообщение от Никита Ремизов Посмотреть сообщение
Динамический блок сделан, но ему каждый раз нужно менять размер под каждый проем, а с лиспом можно сразу все выделить и готово - так удобнее.
Не могли бы вы дать ссылочку на данный блок. Перерыл все что можно.
Лисп удобный, но не штрихует, либо я что то не правильно делаю.
__________________
С уважением PDF
Полусолнце вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Можно ли написать лисп для обозначения проёма?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Как можно макрос с кнопки прописать в лисп и закинуть в автозагрузку? dextron3 LISP 5 12.10.2009 09:50
Где можно посмотреть пример обозначения сварных сеток? РастОК Поиск литературы, чертежей, моделей и прочих материалов 1 26.08.2009 12:11
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46