Jump to content

Recommended Posts

Posted (edited)

I don't know anything about lisp !

I found the lisp to calculate hach area on the web. I would like to ask you who understand lisp to help me calculate the area in m2.

area = 5000 x 5000 = 25m2

(defun C:hatcharea () (hatcharea))
(defun hatcharea ( / ss area i eo pt) 
(setq
    ss (ssget '((0 . "hatch")))
    area 0
    i 0
)
(cond 
    ((and(and ss) (> (sslength ss) 0))
        (repeat (sslength ss)
        (setq eo (vlax-ename->vla-object (ssname ss i)))
        (setq area (+ area (vlax-get eo 'Area)))
        (setq i (+ i 1))
        )
        (while (not pt)(setq pt (getpoint "\nSelect area text insertion point >")))
        (command "text" pt "" "" (strcat "Area = " (rtos area 2 2) " sq. units") "")
    )
)
(princ)
)

 

Edited by SLW210
Added Code Tags!!
Posted (edited)

Like this?

(defun C:hatcharea () (hatcharea))
  (defun hatcharea ( / ss area i eo pt) 
  (setq
      ss (ssget '((0 . "hatch")))
      area 0
      i 0
  )
  (cond 
      ((and(and ss) (> (sslength ss) 0))
          (repeat (sslength ss)
          (setq eo (vlax-ename->vla-object (ssname ss i)))
          (setq area (+ area (vlax-get eo 'Area)))
          (setq i (+ i 1))
          )
          (while (not pt)(setq pt (getpoint "\nSelect area text insertion point >")))
          (setq area (/ area 1000000.))
          (command "text" pt "" "" (strcat "Area = " (rtos area 2 2) " m2") "")
      )
  )
  (princ)
)

 

Edited by Isaac26a
Posted (edited)

thank you very much @Isaac26a

please see and help me

This lisp calculates the area of a closed polyline.

I want to record the result as you edited

area = 5000x5000 = 25m2

(defun rh:dxf (code lst) (cdr (assoc code lst)))

(defun c:plarea ( / cmde ent e_typ e_lst area vtx x_lst y_lst z_lst x_pt y_pt z_pt c_lst v_lst)

  (cond ( (/= 0 (getvar 'cmdecho)) (setq cmde (getvar 'cmdecho))  (setvar 'cmdecho 0)))

  (while (setq ss (ssget "_+.:E:S" '((0 . "POLYLINE,LWPOLYLINE") (-4 . "<OR") (70 . 1) (70 . 3) (70 . 5)(-4 . "OR>"))))
    (setq ent (ssname ss 0)
          e_typ (rh:dxf 0 (setq e_lst (entget ent)))
          area (getpropertyvalue ent "area")
          v_lst nil
    );end_setq

    (cond ( (= e_typ "POLYLINE")
            (setq ent (entnext ent)
                  vtx (rh:dxf 10 (entget ent))
            );end_setq
            (if (< (length vtx) 3) (setq vtx (reverse (cons 0.0 (reverse vtx)))))

            (while (/= "SEQEND" (cdr (assoc 0 (entget ent))))
              (setq v_lst (cons vtx v_lst)
                    ent (entnext ent)
                    vtx (rh:dxf 10 (entget ent))
              );end_setq
              (if (< (length vtx) 3) (setq vtx (reverse (cons 0.0 (reverse vtx)))))
            );end_while

            (setq x_pt (/ (apply '+ (mapcar '(lambda (x) (car x)) v_lst)) (length v_lst))
                  y_pt (/ (apply '+ (mapcar '(lambda (x) (cadr x)) v_lst)) (length v_lst))
            );end_setq

            (if (= (setq sum (apply '+ (mapcar '(lambda (x) (caddr x)) v_lst))) 0.0) (setq z_pt 0.0) (setq z_pt (/ sum (length v_lst))))
          )
          ( (= e_typ "LWPOLYLINE")
            (setq z_pt (rh:dxf 38 e_lst))
            (foreach pr e_lst
              (if (= (car pr) 10) (setq v_lst (cons (cdr pr) v_lst)))
            );end_foreach
            (setq x_pt (/ (apply '+ (mapcar '(lambda (x) (car x)) v_lst)) (length v_lst))
                  y_pt (/ (apply '+ (mapcar '(lambda (x) (cadr x)) v_lst)) (length v_lst))
            );end_setq
          )
    );end_cond
    (setq c_lst (list x_pt y_pt z_pt))

    (entmakex (list (cons 0 "MTEXT")
                    (cons 100 "AcDbEntity")
                    (cons 100 "AcDbMText")
                    (cons 10  c_lst)
                    (cons 40 (getvar 'textsize))
                    (cons 71 5)
                    (cons 72 5)
                    (cons 1 (rtos area 2 3))
              );end_list
    );end_entmakex
  );end_while
  (if cmde (setvar 'cmdecho cmde))
);end_defun

 

Edited by SLW210
Added Code Tags!!
Posted

This is a simple way to get a centroid of a pline.

 

(setq obj (vlax-ename->vla-object (car ent)))
(setq cpt (osnap (vlax-curve-getStartPoint obj) "gcen"))

 

 

Posted

Please use Code Tags and better titles for your threads.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...