Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп. Подсчет линий на модели с коэффициентом запаса и занесение в таблицу в пространстве листа.

Лисп. Подсчет линий на модели с коэффициентом запаса и занесение в таблицу в пространстве листа.

Ответ
Поиск в этой теме
Непрочитано 29.03.2012, 09:42 #1
Лисп. Подсчет линий на модели с коэффициентом запаса и занесение в таблицу в пространстве листа.
antiponf
 
Регистрация: 11.01.2012
Сообщений: 38

Здравствуйте. Я думаю этот лисп поможет многим проектировщикам. Суть следующая: запускаешь лисп, появляется сообщение "введите коэффициент запаса", вводишь число, появляется сообщение "укажите ячейку таблицы в пространстве листа", указываешь ячейку, появляется сообщение "выделите примитивы на модели", выделяешь примитивы (полилиния, отрезок) , нажимаешь ентер и сумма длин всех примитивов умноженная на коэффициент запаса попадает в ячейку, а программа готова к выделению новых отрезков (полилиний) и занесения их в ячейку ниже. Завершение лиспа по клавише ескейп или можно свою команд какую нить придумать.
Заранее благодарен за помощь.
Просмотров: 6050
 
Непрочитано 29.03.2012, 13:00
#2
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


http://forum.dwg.ru/showthread.php?t=57484

Гораздо более полезная весчь!
angel-fear вне форума  
 
Автор темы   Непрочитано 29.03.2012, 13:28
#3
antiponf


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


Цитата:
Сообщение от angel-fear Посмотреть сообщение
http://forum.dwg.ru/showthread.php?t=57484

Гораздо более полезная весчь!
Ага знаю. Благодарю за подсказку, но последние изменения еще не выложили, а в том виде в котором она сейчас пока не подходит
antiponf вне форума  
 
Непрочитано 29.03.2012, 14:08
#4
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Как-то так:

Код:
[Выделить все]
 (defun C:ls (/ echo sen ent lay Nab len da)
  (setq echo (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (princ "\n Определение слоя по объекту.")
  (setq sen (entsel " Выберите нужный объект: "))
  (if sen
    (progn (setq ent (entget (car sen)))
           (setq lay (cdr (assoc 8 ent)))
           (setvar "CLAYER" lay)
           (setq Nab (ssget "_X" (list (cons 8 lay))))
           (setq len (sslength Nab))
           (sssetfirst nil Nab)a
           (sssetfirst Nab Nab)
           (princ "\n Слой: ")
           (princ lay)
           (princ "  Количество объектов = ")
           (princ len)
    ) ;_ end of progn
    (princ "\n Объект не выбран!")
  ) ; if sen
  (setvar "cmdecho" echo)
  (if (> Nab nil)
    (progn (setq Sum 0
                 i 0
           ) ;_ end of setq
           (repeat (sslength Nab)
             (setq Curve (vlax-ename->vla-object (ssname Nab i))
                   i     (1+ i)
                   Param (vl-catch-all-apply 'vlax-curve-getendparam (list Curve))
             ) ;_ end of setq
             (if (not (vl-catch-all-error-p Param))
               (setq Sum (+ Sum (vlax-curve-getdistatparam Curve Param)))
             ) ;_ end of if
           ) ;_ end of repeat
    ) ;_ end of progn
    (setq Sum 0)
  ) ;_ end of if
  (princ "\n")
  (setq index (getreal "Введите коэффициентом запаса (Enter = 1):"))
  (if (eq index nil)
    (setq index 1)
  ) ;_ end of if
  (setq Cable-Sum (rtos (* index Sum) 2 2))
  (princ (strcat "\n*** Кабелей: " (rtos (sslength Nab)) " Сумма длин: " Cable-Sum))
  (setq *TEXTSIZE* (getvar "TEXTSIZE"))
  (setvar "cmdecho" 0)
  (setq tstyle (getvar "TEXTSTYLE")) ;_Стиль текста Стиль должен существовать
 ;_ Создаем текст
  (if (= (cdr (assoc 40 (tblsearch "STYLE" tstyle))) 0.0)
    ;; нулевая высота текста
    (vl-cmdf "_.-TEXT" "_S" tstyle "_none" '(0 0 0) *TEXTSIZE* 0 Cable-Sum)
    (vl-cmdf "_.-TEXT" "_S" tstyle "_none" '(0 0 0) 0)
  ) ;_ end of if
  (setq txt (entlast))
 
  (princ "\n Укажите точку вставки текста или ячейку таблицы:")
  (vl-cmdf "_.copybase" (trans '(0 0 0) 0 1) txt "" "_.erase" txt "" "_.pasteclip" "_none" pause)
 ;_ В txt примитив текста в pt точка вставки  
  (setq txt (entlast)
        pt  (getvar "LASTPOINT")
  ) ;_ end of setq
  (or
    (and ;_Проверяем, попала ли точка в ячейку таблицы
      (setq tblobj nil
            tblset (ssget "_X" '((0 . "ACAD_TABLE")))
      ) ;_ end of setq
      (setq lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex tblset)))))
      (mapcar '(lambda (x)
                 (or tblobj
                     (and
                       (= :vlax-true
                          (vla-hittest
                            x
                            (vlax-3d-point (trans pt 1 0))
                            (vlax-3d-point (trans (getvar "VIEWDIR") 1 0))
                            'row
                            'col
                          ) ;_ end of vla-HitTest
                       ) ;_ end of =
                       (setq tblobj x)
                     ) ;_ end of and
                 ) ;_ end of or
               ) ;_ end of lambda
              lst
      ) ;_ end of mapcar
      tblobj
      row
      col
      (or (vla-settext tblobj row col Cable-Sum) t)
      (entdel txt)
    ) ;_ end of and
    (and ;_Не попала, рисуем текст с полем
      (setq txt (vlax-ename->vla-object txt))
      (vlax-write-enabled-p txt)
      (vlax-property-available-p txt 'TextString)
      (vlax-put txt 'TextString Cable-Sum)
    ) ;_ end of and
  ) ;_ end of or
)
 
Придут гуры - подправят..
Nike на форуме  
 
Автор темы   Непрочитано 29.03.2012, 15:48
#5
antiponf


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


Цитата:
Сообщение от Nike Посмотреть сообщение
Как-то так:



Придут гуры - подправят..
Не немножко не так.. У вас идет проверка по слою, и выделение всего на слое, а хотелось бы чтоб выделялось на слое не все, а чтоб я сам бы выделил, и значение чтобы заносилось именно в таблицу autocad, причем после занесения программа бы переходила к следующему подсчету линий для ячейки ниже, с тем же коэффициентом запаса.
antiponf вне форума  
 
Непрочитано 29.03.2012, 15:59
#6
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


такого нету
Nike на форуме  
 
Непрочитано 29.03.2012, 21:20
#7
gomer

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


убрать _X
gomer вне форума  
 
Автор темы   Непрочитано 29.03.2012, 22:03
#8
antiponf


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


Цитата:
Сообщение от gomer Посмотреть сообщение
убрать _X
простите не понял
antiponf вне форума  
 
Непрочитано 29.03.2012, 23:47
#9
gomer

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


чтоб ssget выбирал не все объекты а только выбранные пользователем нужно убрать _Х из
Код:
[Выделить все]
 (setq Nab (ssget "_X" (list (cons 8 lay))))
вставка в таблицу - вообще мрак, если есть имя примитива (таблицы) то зачем выбирать все таблицы и проверять их??? Вообще лучше было бы распараллелить вставку в текст и вставку в таблицу
ну и апофигей всего апофеоза выбор на разных вкладках, это что скакать как газель туда сюда или вставлять вслепую?
gomer вне форума  
 
Автор темы   Непрочитано 30.03.2012, 07:38
#10
antiponf


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


Цитата:
Сообщение от gomer Посмотреть сообщение
чтоб ssget выбирал не все объекты а только выбранные пользователем нужно убрать _Х из
Код:
[Выделить все]
 (setq Nab (ssget "_X" (list (cons 8 lay))))
вставка в таблицу - вообще мрак, если есть имя примитива (таблицы) то зачем выбирать все таблицы и проверять их??? Вообще лучше было бы распараллелить вставку в текст и вставку в таблицу
ну и апофигей всего апофеоза выбор на разных вкладках, это что скакать как газель туда сюда или вставлять вслепую?
как раз таки наоборот, чтоб не прыгать между моделью и листом лучше все эти значения вслепую просуммировать, и разместить в таблице. даже если был выбран не тот столбик, значения то никуда не денутся и их легко можно будет скопировать в нужный столбик.
antiponf вне форума  
 
Непрочитано 30.03.2012, 10:30
#11
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Откуда программа будет знать, в какие листы ей надо прыгать?
Или у тебя лист один? Какой тогда смысл таблицу в лист вытаскивать?
Размести ее в модели и не надо будет никуда прыгать.
Nike на форуме  
 
Автор темы   Непрочитано 30.03.2012, 10:49
#12
antiponf


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


Цитата:
Сообщение от Nike Посмотреть сообщение
Откуда программа будет знать, в какие листы ей надо прыгать?
Или у тебя лист один? Какой тогда смысл таблицу в лист вытаскивать?
Размести ее в модели и не надо будет никуда прыгать.
Лист один. На модели все находится в масштабе один к одному, все что на листе отмасштабированно. С таблицей просто не удобно работать в пространстве модели
antiponf вне форума  
 
Непрочитано 30.03.2012, 10:51
#13
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


Чем не удобно? Заполни её в модели и перенеси потом в лист..
Nike на форуме  
 
Автор темы   Непрочитано 30.03.2012, 11:25
#14
antiponf


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


Цитата:
Сообщение от Nike Посмотреть сообщение
Чем не удобно? Заполни её в модели и перенеси потом в лист..
ок. если так легче сделать, то хотя бы так...
antiponf вне форума  
 
Непрочитано 30.03.2012, 11:30
#15
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


нее, я не говорил, что смогу это сделать..
Я про то, что эта прога достаточна для выполнения задачи.

Выбрал нужное - кликнул в ячейку, выбрал нужное - кликнул в ячейку и т.д..
Nike на форуме  
 
Автор темы   Непрочитано 30.03.2012, 16:51
#16
antiponf


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


Цитата:
Сообщение от Nike Посмотреть сообщение
нее, я не говорил, что смогу это сделать..
Я про то, что эта прога достаточна для выполнения задачи.

Выбрал нужное - кликнул в ячейку, выбрал нужное - кликнул в ячейку и т.д..
нет... нужно чтоб именно шло заполнение в одном столбце. выделил линии, нажал энтер, автоматически записалось, опять выделил линии, опять нажал энтер.. записалось ячейкой ниже... ескейп выход из программы
antiponf вне форума  
 
Непрочитано 30.03.2012, 16:57
#17
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


ну тогда жди, может кто поможет.
А я на такое не способен, увы
Nike на форуме  
 
Непрочитано 30.03.2012, 23:08
#18
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


antiponf,

а что именно не хватает в программке по просчету плана трасс? Я собираю идеи, и если они многим окажутся полезными, попробую добавить в функционал проги.
Frigate вне форума  
 
Непрочитано 13.01.2017, 17:07 Подсчет кол-ва полилиний с занесением рез-та в поле
#19
allar8


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


Возможен ли вариант подсчета кол-ва примитивов (в частности полилиний ) с занесением результата не в ячейку таблицы а просто в текст или в поле, что еще лучше. Т.е значение поля как бы зависит от кол-ва первоначально выбранных объектов и если из это набора объектов удалить часть полилиний то значение поля автоматически или после обновления тоже изменится. К тому же хотелось бы чтоб значение данного поля тоже менялось в случае нового выбора объектов. Может что то подобное и в стандартных средствах или в Express есть - незнаю. Может кто уже задавался подобным вопросом?
allar8 вне форума  
 
Непрочитано 15.01.2017, 15:40
1 | #20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


allar8, что-то похожее, кажется, было в теме Связь графических объектов и текста.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп. Подсчет линий на модели с коэффициентом запаса и занесение в таблицу в пространстве листа.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа в пространстве листа Traum AutoCAD 42 14.08.2014 05:57
Значение поля(field) в Пространстве Листа и Пространстве Модели различаются. Автокад 2009-2010 wetr AutoCAD 2 06.05.2009 02:33
Научите правильно чертить Dr_Zlo AutoCAD 112 03.03.2009 08:31
Отображение разных типов линий в пространстве листа. Dmitsan AutoCAD 4 11.12.2008 20:35
LTscale в пространстве модели и листа Georg AutoCAD 9 24.11.2006 11:24