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

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

AutoLisp Площадь фигуры

Ответ
Поиск в этой теме
Непрочитано 15.02.2012, 13:09 #1
AutoLisp Площадь фигуры
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья, нужно сделать лиспик для подсчета площади фигуры, нарисованной полилинией. Полилинию должен рисовать сам. В общем то написал такой код, но у меня почему то вначале команда pline пропускается, делается все что ниже, ругается, а потом предлагает нарисовать. Как это исправить? Заранее спасибо!

Код:
[Выделить все]
(vl-load-com)
(defun C:aaa ()

  (command "pline")
  
  (setq lst (ssget "L")) 
  (setq theobj (entget (entlast)))
  (setq theobj (cdr (assoc -1 theobj)))
  (setq theobj (vlax-ename->vla-object theobj))
  (setq area (vla-get-area theobj))

)
Просмотров: 2541
 
Непрочитано 15.02.2012, 13:18
1 | #2
Кулик Алексей aka kpblc
Moderator

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


(vl-cmdf "_.pline")
(while (/= (getvar "cmdactive") 0)
(vl-cmdf pause))
(setq theobj (entget (entlast)))

Ну и так далее...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.02.2012, 13:27
#3
Zaghim


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


Алексей, спасибо большое! Знал, что есть пауза, но присобачивать ее не доводилось ни разу. Еще раз спасибо!
Теперь правда не могу подкопаться, что бы зациклить эту процедуру... куда воткнуться, что бы вывалится из цикла?

Опишу в общем задачу полностью. Есть фасад, на нем окна. Нужно что бы запустил прогу, ввел высоту текста, обвел первое окно полилинией (может быть произвольной формы) и автоматом в его центр поставилась площадь, далее в циклее все остальные окна пока не прервусь.

В общем навоял сам... если кому понадобится, выкладываю код

Код:
[Выделить все]
(vl-load-com)
(defun C:ob ()

  (command "_-layer" "n" "tabl_ok" "s" "tabl_ok" "c" "1" "" "")

  ;(setq c2 0)
  (if (= a nil)
    (progn
      (setq vist (getint "Введи высоту текста: "))
      (setq angt 0)
      (setq a 1)
    )
  )

  (setq p 1)
  (while p
    
    (setq mm 1)
    (setq metka 0)
    (setq cl 1) 
    (setq pl 1)
    (setq sk -1)
    (setq sd -1)
    (setq ls_pt nil)
    (setq ls_dst nil)
    (setq ls_ang nil)
    (setq ls_lst nil)
    (setq perimetr 0)
    (setq xp 0)
    (setq yp 0)
  
    (setq pp (getpoint "\nТыкай точку или <Enter>:"))
    (if (= pp nil)
      (setq p nil)
      (progn
    (setq sk (1+ sk))
        (setq ls_pt (cons pp ls_pt))
        (while cl
          (setq pt (getpoint pp "\nТыкай точку или <Enter>:"))
          (if (= pt nil)
            (setq cl nil)
          (progn
            (setq dst (distance pp pt))
        
        (setq perimetr (+ dst perimetr))
                (setq xper (nth 0 pt))
        (setq xper (* xper dst))
        (setq xp (+ xp xper))
        (setq yper (nth 1 pt))
        (setq yper (* yper dst))
        (setq yp (+ yp yper))
        
            (setq ls_dst (cons dst ls_dst))
                (setq ang (angle pp pt))
            (setq ls_ang (cons ang ls_ang))
            (setq sd (1+ sd))
            (setq sk (1+ sk))
                (setq ls_pt (cons pt ls_pt))
            (command "_line" pp pt "")
                (setq lst (ssget "l"))
            (setq lsta (entget (entlast)))
                (setq theobj (cdr (assoc -1 lsta)))
            (setq ls_lst (cons theobj ls_lst))
            (setq zn (nth 0 ls_pt))
            (setq pp zn)
              )
            )
          )
    (setq xp (/ xp perimetr))
    (setq yp (/ yp perimetr))
    (setq pointcentr (list xp yp))

        (setq pN ls_pt)
        (apply 'vl-cmdf (append (list "_.PLINE" (car pN) "_W" 0 0) (cdr pN) '("")))

    (setq lstam (entget (entlast)))
        (setq bplstam (cdr (assoc 10 lstam)))
        (setq theobjm (cdr (assoc -1 lstam)))

        (setq theobj1m (vlax-ename->vla-object theobjm))
        (setq area (vla-get-area theobj1m))

        (setq aream (/ area 1000000))
        (setq aream (rtos aream 2 2))
    
        (command "-text" pointcentr vist angt aream)

        (while mm
          (if (= metka 0)
            (progn
              (setq lobj (nth sk ls_lst))
              (setq sk (1- sk))
              (command "_erase" lobj "")
          (if (= sk -1)
            (setq mm nil)
          )  
            )
          )
        ) 
      )
    )
  )
      
)

Последний раз редактировалось Zaghim, 16.02.2012 в 09:33.
Zaghim вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp Площадь фигуры



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка раздела "Энергоэффективность". Какие программы посоветуете? Голубев Алексей Прочее. Программное обеспечение 8 30.09.2016 11:49
Расчет площадей здания в соответствии приказом №531 от 30 сентября 2011 года. Makson Архитектура 24 05.05.2015 20:52
Как вычислить площадь фигуры с помощью команды massprop ? Tronel AutoCAD 1 08.09.2010 19:45
Площадь фигуры ugly girl AutoCAD 20 02.06.2008 16:57
Как определить площадь боковой поверхность сложной 3Д фигуры Georg AutoCAD 2 31.10.2004 14:52