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

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

Нужен LISP для суммы длин отрезков линни

Ответ
Поиск в этой теме
Непрочитано 26.02.2004, 10:13 #1
Нужен LISP для суммы длин отрезков линни
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

Подскажити где можно скачать или поделитись если у кого есть такое.

Полилиния не подходит т.к. эти отрезки разбросаны по всему чертежу, а надобы выбрав несколько линий узнать их общую длинну.
Просмотров: 140465
 
Непрочитано 26.02.2004, 11:29
#2
master_vlad


 
Сообщений: n/a


Okonechnikov A.N.
FOCAL V1.0
 
 
Непрочитано 26.02.2004, 11:34
#3
Dima

инженер
 
Регистрация: 30.08.2003
Одесса-Мама
Сообщений: 172
Отправить сообщение для Dima с помощью Skype™


А куда намылить?
__________________
vinum
Dima вне форума  
 
Автор темы   Непрочитано 26.02.2004, 11:41
#4
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


[email protected]
ilka_t вне форума  
 
Непрочитано 26.02.2004, 12:12
#5
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Если только для отрезков, то вот простая щелкалка:
Код:
[Выделить все]
(defun c:llen (/ ent_set sum_len cur_ent vla_obj obj_dump len)
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq ent_set (ssadd))
  (setq sum_len 0.0)
  (while T
    (setq cur_ent (car(entsel "Select Line: ")))
    (if (= cur_ent nil)(alert "Nothing entity selected!"))
    (sssetfirst nil (ssadd cur_ent ent_set))
    (setq vla_obj (vlax-ename->vla-object cur_ent))
    (if(= T (vlax-property-available-p vla_obj "Length"))
      (progn 
      (setq len (vla-get-length vla_obj)
 	    sum_len (+ sum_len len))
      );end progn
      (progn
      (ssdel cur_ent ent_set)
      (alert "Selected entity is not Line!")
      );end progn
      );end if
    (terpri)
    (princ (strcat "**** Sum length="(rtos sum_len)" ****"))
    (terpri)
    );end while
  (princ)
  )
{Smirnoff} вне форума  
 
Непрочитано 26.02.2004, 12:56 Сметанка
#6
Сметанка


 
Регистрация: 14.10.2003
Москва
Сообщений: 25
<phrase 1=


http://www.prodtp.ru/modules.php?op=...ownload&sid=22
Сметанка вне форума  
 
Автор темы   Непрочитано 26.02.2004, 14:10
#7
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


Спасибо....
ilka_t вне форума  
 
Непрочитано 26.02.2004, 15:18
#8
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


Нашёл у себя такой лиспик:
Код:
[Выделить все]
(defun C:SUMLINES ()
(setq total 0)

(setq p nil)
(gc)

(prompt "\nSelect the lines you want to sum the lengths of: ")
(setq p (ssget))
(if p 
   (progn
     (setq n (sslength p))
     (setq l 0)
       (while (< l n)
           (if (= "LINE" (cdr (assoc 0 (setq elist (entget (ssname p l))))))
              (progn
                (setq start (cdr (setq as (assoc 10 elist))))
                (setq finish (cdr (setq as (assoc 11 elist))))
                (setq delta (distance start finish))
                (grdraw start finish -1)
                (setq total (+ total delta))
                (grtext -2 (strcat "Total: " (rtos total)))
              )
           )
            (setq l (1+ l))
          )
    )  
)
(print)
(write-line (strcat "Variable TOTAL has the sum of the length of the lines: " (rtos total)))
(graphscr)
)
__________________
С уважением,
Влад Гринзайд.
Grinzaid вне форума  
 
Непрочитано 26.02.2004, 15:24
#9
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


А вот и еще... http://www.autocad.ru/docs/doc_3098.htm
Подсчитывает общую длину указанных примитивов (не только линий, но полилиний, дуг и т.д.).
Впрочем приведу код здесь:
Код:
[Выделить все]
(vl-load-com)
(defun entLen (/ set:OfEnts int:l rea:LengthOfEnts)
  (setq  set:OfEnts (ssget)
  int:l 0
  rea:LengthOfEnts
   0.0
  ) ;_ setq
  (while (< int:l (sslength set:OfEnts))
    (setq rea:LengthOfEnts
     (+ rea:LengthOfEnts
        (vlax-curve-getDistAtParam
    (vlax-ename->vla-object (ssname set:OfEnts int:l))
    (vlax-curve-getEndParam (ssname set:OfEnts int:l))
        ) ;_ vlax-curve-getDistAtParam
     ) ;_ +
    ) ;_ setq
    (setq int:l (1+ int:l))
  ) ;_ while
  (princ (strcat "\nПримитивов: - "
     (itoa (sslength set:OfEnts))
     "\nОбщая длина: - "
     (rtos rea:LengthOfEnts)
   ) ;_ strcat
  ) ;_ princ
  (prin1)
) ;_ defun
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Автор темы   Непрочитано 26.02.2004, 16:03
#10
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


Всем спасибо
ilka_t вне форума  
 
Непрочитано 26.02.2004, 17:55
#11
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


http://cadhlp.kulichki.com/pg2/focall.zip
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Непрочитано 26.02.2004, 23:36
#12
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Браво! На примере Kos, видно отличие ЛИСП-программиста, от нас ЛИСП-любителей... :?
{Smirnoff} вне форума  
 
Непрочитано 27.02.2004, 11:22
#13
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Сообщение от Fantomas
Браво! На примере Kos, видно отличие ЛИСП-программиста, от нас ЛИСП-любителей... :?
Заблуждение. Я тоже любитель, только с большим стажем...

Модератору (или кто там за это отвечает): зачем прикрепили эту тему? Если кому нужно и интересно - есть поиск. С прикрепленными темами - перебор (ИМХО). Я в них даже не лажу (может и зря), надоедает читать одно и то же...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 06.04.2004, 12:27
#14
lee


 
Регистрация: 28.02.2004
43
Сообщений: 1,796
<phrase 1=


Поддерживаю kos. С закрепленными темами перебор
lee вне форума  
 
Непрочитано 03.06.2004, 17:57 как эти тектсы применять?
#15
Ilya


 
Сообщений: n/a


Здравствуйте.
Я не лисп-программист, хотя что за штака такая - знаю. Сохранил текст в файл *.lsp, запустил через ap. .. а какой командой каоькулятор-то запускать?
в тексте не нашел
 
 
Непрочитано 03.06.2004, 19:10
#16
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Найдите (defun и гляньте, что написано дальше....

Если нечто вроде (defun entLen .... - то для запуска нужно набрать в командной строке (entLen) - именно так, со скобками, хотя регистр символов не имеет значения.

Если нечто вроде (defun C:SUMLINES .... - то для запуска нужно набрать в командной строке SUMLINES - без скобок

Если Вы имели в виду что то другое - то уточните проблему
vk вне форума  
 
Непрочитано 08.06.2004, 17:57 Спасибо vk:)
#17
Ilya


 
Сообщений: n/a


Спасибо vk
 
 
Непрочитано 10.08.2004, 04:45
#18
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Kos> Твой лисп почти не имеет изъянов. Кроме одного. Если в Selection set попадает, например, блок, то он ругается и не желает считать. Получается, что надо специально готовить экран для работы программы. Поясню на своем примере. На плане этажа в разных направлениях проходят, огибая препятствия, множество труб для электричества, закладываемых в бетон перекрытия. Трубы нескольких диаметров и заканчиваются они кружком, полым или сплошным, показывающим куда выводить конец трубы-вверх или вниз. Эти кружки-блоки. Каждый диаметр расположен в своем слое. Итак, надо подсчитать погонную длину, например, труб диам. 1 дюйм. Выделяю этот слой и получаю здесь линии, дуги и блоки. Далее, прежде чем применить лисп для подсчета суммарной длины (а это можно сделать рамкой всего за 2 щелчка) надо временно удалить блоки. (А в другом случае надо и другие детали удалять). Можно ли сделать так, чтобы программа игнорировала все, что она не умеет считать и выдавала бы сообщение: я подсчитала сумму того и сяго only!
Vova вне форума  
 
Непрочитано 10.08.2004, 14:02
#19
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Сообщение от Vova
Kos> Твой лисп почти не имеет изъянов. Кроме одного.
Неправда. Можно накопать гораздо больше. При желании. Потому что это не законченный продукт, а заготовка.
Цитата:
Сообщение от Vova
Если в Selection set попадает, например, блок, то он ругается и не желает считать.
Да, обсчитываются только примитивы, подпадающие под определение "курва" (curve). Т.е. линейные примимтивы. Блок к ним не относится.
Цитата:
Сообщение от Vova
Можно ли сделать так, чтобы программа игнорировала все, что она не умеет считать и выдавала бы сообщение: я подсчитала сумму того и сяго only!
Можно. Но не сейчас. Я в отпуске, на работу уже два дня хожу по _крайней необходимости_. Надеюсь, что завтра уже этой необходимости не будет.

И я буду 8)
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 20.09.2004, 14:50
1 | #20
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Ну, вот отпуск и кончился...
Код:
[Выделить все]
(vl-load-com)
(defun entLen ( / set:entities int:allEntities int:curveEntities int:l rea:length)
  (setq set:entities (ssget))
  (if set:entities
    (progn
      (setq int:allEntities (sslength set:entities)	; количество выбранных примитивов
	    int:curveEntities 0				; счетчик линейных примитивов
	    int:l 0					; счетчик
	    rea:length 0.0				; общая длина линейных примитивов
      ) ;_  setq
      (while (< int:l (sslength set:entities))
	(if (not
	      (vl-catch-all-error-p
		(vl-catch-all-apply
		  'vlax-curve-getStartPoint
		  (list (vlax-ename->vla-object (ssname set:entities int:l)))
		) ;_  vl-catch-all-apply
	      ) ;_  vl-catch-all-error-p
	    ) ;_  not
	  (setq	int:curveEntities (1+ int:curveEntities)
		rea:length	  (+ rea:length
				     (vlax-curve-getDistAtParam
				       (vlax-ename->vla-object (ssname set:entities int:l))
				       (vlax-curve-getEndParam (ssname set:entities int:l))
				     ) ;_  vlax-curve-getDistAtParam
				  ) ;_  +
	  ) ;_  setq
	) ;_  if
	(setq int:l (1+ int:l))
      ) ;_  while
      (princ (strcat "\n Выбрано примитивов: " (itoa int:allEntities)
		     ", из них линейных: " (itoa int:curveEntities)
		     "\n Общая длина линейных примитивов: " (rtos rea:length)
		     )
	     )
    ) ;_  progn
    (alert "Примитивы не выбраны!")
  ) ;_  if
(prin1)
) ;_  defun
Пробуйте...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен LISP для суммы длин отрезков линни

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

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