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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Модернизация программы подсчёта пощадей.

Модернизация программы подсчёта пощадей.

Ответ
Поиск в этой теме
Непрочитано 02.12.2008, 14:42 #1
Модернизация программы подсчёта пощадей.
Borikv
 
Регистрация: 24.10.2007
Сообщений: 108

Со старых времён есть симпатичный лисп для подсчёта площадей. Проблема, что только для POLYLINE .Как его приспособить и для LWPOLYLINE?

Код:
[Выделить все]
(defun C:WR (/ SS N L H NAME P1 P2 POLY PT)
;Write AREA of Polylines
   (setq *ERROR* STOP)
   (princ "\nSelect Polylines for Area: ")
   (setq SS (ssget)
         N 0
         L (sslength SS)
   )
   (initget 1)
   (setvar "cmdecho" 1)
   (setq H (* 500 (getvar "DimTXT")))
   (if (not (tblsearch "STYLE" "H"))
       (command "style" "h" "standard" "" "1" "" "" "" "")
   )
   (repeat L
      (setq NAME (ssname SS N)
            P1 (cdr (assoc 10 (entget (entnext NAME))))
            P2 (cdr (assoc 10 (entget (entnext (entnext (entnext NAME))))))
            PT (MIDPT P1 P2)
            POLY (list (ssname SS N) P1)
      )
      (command "area" "e" POLY)
      (setq S (getvar "AREA")
            $AREA (rtos (/ S 10000) 2 2)
            N (1+ N)
      )
      (command "text" "style" "h" "c" PT H "0" $AREA)
   )
   (setvar "cmdecho" 1)
   (princ)
)
;
(defun MIDPT (PT1 PT2)
   (mapcar '(lambda (x y) (/ (+ x y) 2)) PT1 PT2)
)
;
(defun STOP (msg)
   (cond
      ((or (eq msg "console break")
           (eq msg "Function cancelled")
           (eq msg "quit / exit abort")
        )
        (terpri)
      )
      (T
          (princ "error: ")
          (princ msg)
      )
   )
   (setq *error* nil)
   (PrinC)
)
;
(C:WR)
Тэги [cоde] опять для меня оставлены на проставление? /kpblc/

Последний раз редактировалось Кулик Алексей aka kpblc, 02.12.2008 в 15:00.
Просмотров: 2548
 
Непрочитано 02.12.2008, 17:04
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Как-то так
Код:
[Выделить все]
(defun C:WR (/ SS N L H NAME P1 P2 POLY PT *ERROR*)
  (defun *ERROR* (msg)
   (cond
      ((or (eq msg "console break")
           (eq msg "Function cancelled")
           (eq msg "quit / exit abort")
        )
        (terpri)
      )
      (T
          (princ "error: ")
          (princ msg)
      )
   )
   (setq *error* nil)
   (PrinC)
)
  (vl-load-com)
;Write AREA of Polylines
   
   (princ "\nSelect Polylines for Area: ")
   (setq SS (ssget '((0 . "*POLYLINE")))
         N 0
         L (sslength SS)
   )
   (initget 1)
   (setvar "cmdecho" 1)
   (setq H (* 500 (getvar "DimTXT")))
   (if (not (tblsearch "STYLE" "H"))
       (command "_-style" "h" "standard" "" "1" "" "" "" "")
   )
   (repeat L
      (setq NAME (ssname SS N)
            POLY (vlax-ename->vla-object NAME)
            P1 (vlax-curve-getPointAtParam POLY 0)
            P2 (if(>(vlax-curve-getEndParam POLY) 1)(vlax-curve-getPointAtParam POLY 2)(vlax-curve-getPointAtParam POLY 1))
            PT (trans (mapcar '(lambda (x y) (* (+ x y) 0.5)) P1 P2) 0 1)
      )
      (setq S (vla-get-area POLY)
            $AREA (rtos (/ S 10000) 2 2)
            N (1+ N)
      )
      (command "_-text" "_style" "h" "_c" PT H "0" $AREA)
   )
   (setvar "cmdecho" 1)
   (princ)
)
;
(C:WR)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.12.2008, 09:54
#3
Borikv


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


Спасибо, чудно работает.
Borikv вне форума  
 
Автор темы   Непрочитано 03.12.2008, 10:37
#4
Borikv


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


Иногда почему-то не срабатывает на Pline. Пишет "Automation Error. Invalid class". Но если просто скопировать этот же контур, то на копии всё срабатыает.
Borikv вне форума  
 
Непрочитано 04.12.2008, 12:56
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Я с таким встречался, если в сеансе сконвертивать 2d POLYLINE в LWPOLYLINE командами _convert или _convertpoly, то в dxf представлении она становится LWPOLYLINE, а в объектном остается прежней 2d POLYLINE. Отсюда при попытке взять свойсво и выскакивает "Automation Error. Invalid class".
PS Сказанное справедливо и для PLINETYPE = 2
Просто ради подтверждения сказанного, если еще раз встретится такой случай, попробуй просто сохранить чертеж, закрыть и открыть снова. Результат опубликуй здесь
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 04.12.2008 в 15:07.
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Модернизация программы подсчёта пощадей.

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите чайнику удобные и недорогие программы Kuznkuz Прочее. Программное обеспечение 5 23.08.2010 11:05
Ссылки на программы для расчета стр.конструкций(и не только) X-DeViL Конструкции зданий и сооружений 40 21.10.2008 23:25
VBA-AutoCAD программы для геодезистов, маркшейдеров Sergey Klimkin Программирование 5 05.09.2008 22:55
Запуск пользовательской программы из лиспа vosh LISP 2 16.03.2008 22:16
Помогите с отменой действия программы! 480725 Программирование 63 10.10.2007 20:43