วันพฤหัสบดีที่ 17 ธันวาคม พ.ศ. 2563

Get Area3

 

(defun rtoc ( n p / d i l x );; n = any number  p = precision

    (setq l (vl-string->list (rtos n 2 p))

          x (cond ((cdr (member 46 (reverse l)))) ((reverse l)))

          i 0

    )

    (vl-list->string

        (append

            (reverse

                (apply 'append

                    (mapcar

                       '(lambda ( a b )

                            (if (and (zerop (rem (setq i (1+ i)) 3)) b)

                                (list a 44)

                                (list a)

                            )

                        )

                        x (append (cdr x) '(nil))

                    )

                )

            )

            (member 46 l)

        )

    )

);end

 

(defun c:GAR()

(setq old_cmdecho  (getvar "cmdecho"))

(setvar "cmdecho" 0)

 

(initget "1 2")

       (setq opt_ar (getkword "\nSelect Options : \n [1  Rai-Ngan-Wah / 2  square metre.] <1> "))

       (if (= opt_ar "")(setq opt_ar "1"))

(initget "1 2")

       (setq opt (getkword "\nSelect Options : \n [1  Pick in Area. / 2  Select Polyline Closed.] <1> "))

       (if (= opt "")(setq opt "1"))

(setq txtH 10.0); Current height

(setq txtS (getvar "textstyle")); Current Style

(setq ins 1)

(setq tot_area 0.0)

 

(if (= opt "1")

(while (setq ins (getpoint "\nPick in Area: "))

       (command "_boundary" ins "")   

       (command "_area" "o" "l")

       (command "_erase" "l" "")

       (setq tot_area (+ tot_area (getvar "area")))

);while

);if opt "1"

(if (= opt "2")

       (if (setq ss1 (ssget '((-4 . "<OR")

                         (0 . "POLYLINE")

                         (0 . "LWPOLYLINE")

                         (0 . "CIRCLE")

                         (0 . "ELLIPSE")

                         (0 . "SPLINE")

                         (0 . "REGION")

                         (-4 . "OR>")

                        )

                                  )

              )

              (progn

                     (setq nr 0)

                     (setq en (ssname ss1 nr))

                     (while en

                           (command "._area" "_O" en)

                           (setq tot_area (+ tot_area (getvar "area")))

                           (setq nr (1+ nr))

                           (setq en (ssname ss1 nr))

                     );while

              )

       )

);if opt "2"

(if (= opt_ar "1")

       (setq txt (areath tot_area))

       (setq txt (strcat (rtoc tot_area 2)" m\U+00B2")) ;add , comma

)     

       (setq pt (getpoint "\n Pick Area Location: "))

       (entmake

              (list

                     '(0 . "MTEXT")

                     '(100 . "AcDbEntity")

                     '(100 . "AcDbMText")

                     (cons 10 pt)

                     (cons 7  txtS)

                     (cons 40 txtH) 

                     (cons 41 0) ; 0 Width = no wrap

                     (cons 71 5) ; 1=Top Left   /2=Top Center   /3= Top Right

                                         ; 4=Middle Left/5=Middle Center/6=Middle Right

                                         ; 7=Bottom Left/8=Bottom Center/9=Bottom Right

                     (cons 50 0.0) ; rotation angle

                     (cons 1 txt)

              )

       )

(setvar "cmdecho" old_cmdecho)

(princ)

)

(prompt "\nEnter GAR to Start Get Area.")

 

(defun areath (sqm / rl_r rl_ng rl_wa th_area)

       (setq rl_r (fix(/ sqm 1600)))

       (setq rl_ng (fix(/ (- sqm (* rl_r 1600)) 400)))

       (setq rl_wa (/ (- sqm (+ (* rl_r 1600) (* rl_ng 400))) 4))

       (setq th_area (strcat (rtos rl_r 2 0) "-"(rtos rl_ng 2 0) "-" (rtos rl_wa 2 2)))                                   

)


Get Area2

 

(defun rtoc ( n p / d i l x );; n = any number  p = precision

 

    (setq l (vl-string->list (rtos n 2 p))

          x (cond ((cdr (member 46 (reverse l)))) ((reverse l)))

          i 0

    )

 

    (vl-list->string

        (append

            (reverse

                (apply 'append

                    (mapcar

                       '(lambda ( a b )

                            (if (and (zerop (rem (setq i (1+ i)) 3)) b)

                                (list a 44)

                                (list a)

                            )

                        )

                        x (append (cdr x) '(nil))

                    )

                )

            )

            (member 46 l)

        )

    )

);end

(defun c:GAR()

(setq old_cmdecho  (getvar "cmdecho"))

(setvar "cmdecho" 0)

 (initget "1 2")

       (setq opt (getkword "\nSelect Options : \n [1  Pick in Area. / 2  Select Polyline Closed.] <1> "))

       (if (= opt "")(setq opt "1"))

(setq txtH 10.0); Current height

(setq txtS (getvar "textstyle")); Current Style

(setq ins 1)

(setq tot_area 0.0)

 

(if (= opt "1")

(while (setq ins (getpoint "\nPick in Area: "))

       (command "_boundary" ins "")   

       (command "_area" "o" "l")

       (command "_erase" "l" "")

       (setq tot_area (+ tot_area (getvar "area")))

);while

);if opt "1"

(if (= opt "2")

       (if (setq ss1 (ssget '((-4 . "<OR")

                         (0 . "POLYLINE")

                         (0 . "LWPOLYLINE")

                         (0 . "CIRCLE")

                         (0 . "ELLIPSE")

                         (0 . "SPLINE")

                         (0 . "REGION")

                         (-4 . "OR>")

                        )

                                  )

              )

              (progn

                     (setq nr 0)

                     (setq en (ssname ss1 nr))

                     (while en

                           (command "._area" "_O" en)

                           (setq tot_area (+ tot_area (getvar "area")))

                           (setq nr (1+ nr))

                           (setq en (ssname ss1 nr))

                     );while

              )

       )

);if opt "2"

       (setq txt (strcat (rtoc tot_area 2)" m\U+00B2")) ;add , comma

       (setq pt (getpoint "\n Pick Area Location: "))

       (entmake

              (list

                     '(0 . "MTEXT")

                     '(100 . "AcDbEntity")

                     '(100 . "AcDbMText")

                     (cons 10 pt)

                     (cons 7  txtS)

                     (cons 40 txtH) 

                     (cons 41 0) ; 0 Width = no wrap

                     (cons 71 5) ; 1=Top Left   /2=Top Center   /3= Top Right

                                         ; 4=Middle Left/5=Middle Center/6=Middle Right

                                         ; 7=Bottom Left/8=Bottom Center/9=Bottom Right

                     (cons 50 0.0) ; rotation angle

                     (cons 1 txt)

              )

       )

(setvar "cmdecho" old_cmdecho)

(princ)

)

(prompt "\nEnter GAR to Start Get Area.")


วันพุธที่ 16 ธันวาคม พ.ศ. 2563

Get Area

 


;----------Add Comma-------

(defun rtoc ( n p / d i l x );; n = any number  p = precision

    (setq l (vl-string->list (rtos n 2 p))

          x (cond ((cdr (member 46 (reverse l)))) ((reverse l)))

          i 0

    )

    (vl-list->string

        (append

            (reverse

                (apply 'append

                    (mapcar

                       '(lambda ( a b )

                            (if (and (zerop (rem (setq i (1+ i)) 3)) b)

                                (list a 44)

                                (list a)

                            )

                        )

                        x (append (cdr x) '(nil))

                    )

                )

            )

            (member 46 l)

        )

    )

);end

;----------Get Area----------

(defun c:GAR()

(setq old_cmdecho  (getvar "cmdecho"))

(setvar "cmdecho" 0)

(setq txtH 10.0); Current height

(setq txtS (getvar "textstyle")); Current Style

(setq ins 1)

(setq tot_area 0.0)

(while (setq ins (getpoint "\nPick in Area: "))

       (command "_boundary" ins "")   

       (command "_area" "o" "l")

       (command "_erase" "l" "")

       (setq tot_area (+ tot_area (getvar "area")))

);while

       (setq txt (strcat (rtoc tot_area 2)" m\U+00B2")) ;add , comma

       (setq pt (getpoint "\n Pick Area Location: "))

       (entmake

              (list

                     '(0 . "MTEXT")

                     '(100 . "AcDbEntity")

                     '(100 . "AcDbMText")

                     (cons 10 pt)

                     (cons 7  txtS)

                     (cons 40 txtH) 

                     (cons 41 0) ; 0 Width = no wrap

                     (cons 71 1) ; 1 = Top Left

                     (cons 50 0.0) ; rotation angle

                     (cons 1 txt)

              )

       )

(setvar "cmdecho" old_cmdecho)

(princ)

)

(prompt "\nEnter GAR to Start Get Area.")

วันอังคารที่ 8 ธันวาคม พ.ศ. 2563

Points to Blocks

 

;| 1.pick point

2.block name

3.select point

|;

(defun c:pt2blk (/ ss scale idx n entname edata)

(command "undo" "begin")

(setq old_cmdecho (getvar "cmdecho"))

(setq old_osnap (getvar "osmode"))

(setvar "cmdecho" 0)

(setvar "osmode" 37) ;1+4 1=endpoint 4=center 32= intersection

(while (setq pt (getpoint "\nPick Point : "))

(command "_point" pt)

)

(setq blktemp (getstring (strcat "\nBlock Name <" (cond (blk) ("Point1")) ">: "))

blk (cond ((/= blktemp "") blktemp) (blk) ("Point1"))

); setq

(setvar "osmode" 0)

(if (setq ss (ssget '((0 . "POINT"))))

(progn

(setq idx 0)

(setq n (sslength ss))

(repeat n

(setq entname (ssname ss idx))

(setq edata (entget entname))

(entmake

(list (cons 0 "INSERT")

(cons 2 blk)

(assoc 10 edata);;point

(cons 50 0)

)

)

(entdel entname)

(setq idx (1+ idx))

)

)

)

(setvar "cmdecho" old_cmdecho)

(setvar "osmode" old_osnap)

(command "undo" "end")

(princ)

);end

(prompt "\nEnter PT2BLK to start. ")

วันอาทิตย์ที่ 6 ธันวาคม พ.ศ. 2563

TEXT_VALS

 


(defun c:txtvl (/ ss i tv vl min_val max_val avg_val)

       (while (not ss)

        (princ "\nSelect Text To Calulate...")

        (setq ss (ssget '((0 . "TEXT,MTEXT"))))

       )

       (setq i (sslength ss))

       (while (not (minusp (setq i (1- i))))

              (setq tv (cdr (assoc 1 (entget (ssname ss i)))))

              (setq vl (cons (atof tv) vl))

       )

       (setq min_val (apply 'min vl)

                max_val (apply 'max vl)

                avg_val (/ (apply '+ vl) (length vl))

       )

       (setq txt   (strcat "\n Max. " (rtos max_val 2 2)

                                         "\n Avg. " (rtos avg_val 2 2)

                                         "\n Min. " (rtos min_val 2 2)

                           )     

       )

       (setq p1 (getpoint "\nText Position:"))

       (entmake

              (list

                     '(0 . "MTEXT")

                     '(100 . "AcDbEntity")

                     '(100 . "AcDbMText")

                     (cons 10 p1)

                     (cons 7  (getvar "TextStyle")) ; Current Style

                     (cons 40 (getvar "TextSize"))  ; Current height

                     (cons 41 0) ; 0 Width = no wrap

                     (cons 71 1) ; 1 = Top Left

                     (cons 50 0.0) ; rotation angle

                     (cons 1 txt)

              )

       )     

(princ)

);end

(prompt "\nEnter TXTVL to start. ")

วันพุธที่ 2 ธันวาคม พ.ศ. 2563

Polyline Join

 

;; converse line ,arc ,polyline join to Polyline

(defun C:PLJ (/ old_cmdecho old_peditaccept ss) ; = Polyline Join

    (setq old_cmdecho (getvar 'cmdecho) ;save variable

                old_peditaccept (getvar 'peditaccept)

       );setq

       (setvar 'cmdecho 0) ;setting variable

       (setvar 'peditaccept 1)

       (princ "\nSelect line,arc,polyline join to Polyline.")

       (setq ss (ssget '((0 . "LINE,ARC,*POLYLINE"))))  

       (if ss

              (if (= (sslength ss) 1)

                     (command "_.pedit" ss "_join" "_all" "" "");then

                     (command "_.pedit" "_multiple" ss "" "_join" "0.0" "");else

              );if

              (princ "\nCancle...")

       );if

       (setvar 'cmdecho old_cmdecho) ;old variable

       (setvar 'peditaccept old_peditaccept)

(princ)

);end

(prompt "\nEnter PLJ to start. ")

วันศุกร์ที่ 27 พฤศจิกายน พ.ศ. 2563

Point or Circle Closest To Text CC2TZD

 

;|     

       25-11-2020

       Point or Circle Closest To Text CC2TZD

       change text to mtext for 3D coordinate

       add table Z ( elevations)

       27-11-2020

       add table distance a1 to a2 in plan view

|;

 

(defun c:cc2tzd ( / points texts i j pt pb ind dst d result)

(setq old_cmdecho  (getvar "cmdecho"))

(setvar "cmdecho" 0)

       (setq txtH (getvar "TEXTSIZE"))

       (setq txtS (getvar "textstyle"))

(initget "1 2 3")

       (setq opt (getkword "\nSelect Options : \n [1  Pick points. / 2  Select object. / 3  Find All. ] <1> "))

       (if (= opt "")(setq opt "1"))

(if (or(= opt "1")(= opt "2"))

       (progn

;;-----------Enter String Symbol -----

       (if (null sta)(setq sta "A"))

       (setq statemp (getstring (strcat "\n Enter String Symbol <"  sta ">: ")))

       (if (eq statemp "")

              (setq statemp sta)

              (setq sta statemp)

       )

;;----------Number Start Count--------

       (or nma (setq nma 1))

        (setq nmatemp

            (getDist (strcat "\nEnter Number : <"

                             (rtos nma 2 0)

                                     ">: "

                     ) ;_ strcat

            ) ;_ getdist

        ) ;_ setq

    (and nmatemp (setq nma nmatemp))

       );;progn

);;if

;;------------------------------------ 

(setq pb nil)

(if (= opt "1")

       (progn

       (while(setq pt (getpoint "\nPick Points :"))          

              (if (= pb nil)(setq pb pt))

              (setq txt (strcat " " (strcase sta) (rtos nma 2 0)))

              (metxt pt 7 txth 0 txt)

              (setq result

                     (append result

                           (list

                                  (list

                                         txt          ;; text

                                         (car pt)      ;; x value of point

                                         (cadr pt)     ;; y value of point 

                                         (caddr pt)    ;; z value of point

                                         (distance (list (car pt)(cadr pt)) (list (car pb)(cadr pb)))

                                  )

                           )

                     )

              )

              (setq nma (1+ nma)

                       pb pt

              )

       )

       (setq lst1 result)

       )

);if = Pick   points

;;-----------------------------

(if (= opt "2")

       (progn

              (princ "\n Select circle mark.")

              (if (setq ss (ssget '((0 . "POINT,CIRCLE"))))

                     (progn

                           (setq ctr 0

                                    numss (sslength ss)

                           )

                           (repeat (setq in (sslength ss))

                                  (setq pt (cdr (assoc 10 (entget (ssname ss (setq in (1- in)))))))            

                                  (if (= pb nil)(setq pb pt))

                                  (setq txt (strcat " " (strcase sta) (rtos nma 2 0)))

                                  (metxt pt 7 txth 0 txt)

                                  (setq result

                                         (append result

                                                (list

                                                       (list

                                                              txt          ;; text

                                                              (car pt)      ;; x value of point

                                                              (cadr pt)     ;; y value of point 

                                                              (caddr pt)    ;; z value of point

                                                              (distance (list (car pt)(cadr pt)) (list (car pb)(cadr pb)))

                                                       )

                                                )

                                         )

                                  )

                                  (setq nma (1+ nma)

                                           pb pt

                                  )

                                  (setq ctr (1+ ctr))

                           )

                           (setq lst1 result)

                     )

              )

       )

)

;;-----------------------------

(if (= opt "3")

       (progn

       (initget "1 2")

       (setq opt1 (getkword "\nSelect Options : \n [ 1 Point / 2 Circle ] <1> "))

       (if (= opt1 "")(setq opt1 "1"))

       (if (= opt1 "1")

              (setq points (ssget "_X" '((0 . "POINT"))))

              (setq points (ssget "_X" '((0 . "CIRCLE"))))

       )

       (setq texts  (ssget "_X" (list (cons 0 "MTEXT,TEXT"))))

 

       (setq result (list))

       (setq pc nil)

       (repeat (setq im (sslength points))

              (setq ent (ssname points (setq im (1- im))));;;make reverse points

              (setq j 0)

              (setq dst nil)  ;; this will hold the closest distance. 

              (setq ind nil)

              (repeat (sslength texts)

                     (setq d (distance

                                         (setq pt (cdr (assoc 10 (entget ent))))    ;; insert point of the point

                                         (cdr (assoc 10 (entget (ssname texts j)))) ;; insert point of the text

                                  )

                     )

                    

                     (if (or (= dst nil) (< d dst))

                           (progn

                                  (setq dst d)

                                  (setq ind j)

                           )

                     )

                     (setq j (+ j 1))

              )

              (if (= pc nil)(setq pc pt))

              (setq result

                     (append result

                           (list

                                  (list

                                         (cdr (assoc 1 (entget (ssname texts ind))))   ;; text

                                         (nth 0 pt)                                    ;; x value of point

                                         (nth 1 pt)                                    ;; y value of point

                                         (nth 2 pt)                                                             ;; z value of point

                                         (distance (list (car pt)(cadr pt)) (list (car pc)(cadr pc)))

                                  )

                           )

                     )

              )

      

              (ssdel  (ssname texts ind) texts) 

              (setq pc pt)

       )

       (setq lst1 result);(reverse result)

       )

)

  (print_table lst1)

(setvar "cmdecho" old_cmdecho)

(princ)

 

);;end

(prompt "\nEnter CC2TZD to start Circle Closest to text.")

;;------------------------------------------------------

(defun metxt (pt pos txth ang txt);;Mtext Maker

              (entmake

                     (list

                           (cons 0 "MTEXT")

                           (cons 100 "AcDbEntity")

                           (cons 100 "AcDbMText")

                           (cons 7 "txtS");;fontstyle

                           (cons 8 "CC2T_NEZ");;Layer nmae

                           (cons 71 pos) ; 1=Top Left   /2=Top Center   /3= Top Right

                                                  ; 4=Middle Left/5=Middle Center/6=Middle Right

                                                  ; 7=Bottom Left/8=Bottom Center/9=Bottom Right

                            (cons 72 5)

                           (cons 73 1)

                           (cons 10 pt);;Text point

                           (cons 11 (list 1.0 0.0 0.0))

                           (cons 50 ang);;Angle Radial only

                           ;(cons 41 19.35)

                           (cons 40 TXTH);;Text Height

                           (cons 44 1.0)

                           (cons 1 TXT);;Text String

                     );list               

              );entmake

)

;;------------------------------------------------------

(defun print_table (lst / )

(setq old_osnap (getvar "osmode"))  ; osnap

(setq old_layer (getvar "clayer")) ;  layer

(setvar "osmode" 0)

       (setq pt0 (getpoint "\nPick a table point :")

                txth (getvar "TEXTSIZE")

                dec 3

                num 0

                nump (length lst)

       )

       (setq pt1  (list (+(car pt0)(* txth 10))(cadr pt0))

                ptx1 (list (+(car pt0)(* txth 5)) (-(cadr pt0)(* txth 1.0)))

                pt2  (list (+(car pt1)(* txth 10))(cadr pt1))

                ptx2 (list (+(car pt1)(* txth 5)) (-(cadr pt1)(* txth 1.0)))

                pt3  (list (+(car pt2)(* txth 10))(cadr pt2))

                ptx3 (list (+(car pt2)(* txth 5)) (-(cadr pt2)(* txth 1.0)))

                pt4  (list (+(car pt3)(* txth 10))(cadr pt3))                             ;;Z elevations

                ptx4 (list (+(car pt3)(* txth 5)) (-(cadr pt3)(* txth 1.0)))

                pt5  (list (+(car pt4)(* txth 10))(cadr pt4))                             ;;distance

                ptx5 (list (+(car pt4)(* txth 5)) (-(cadr pt4)(* txth 1.0)))

       )

       (setvar "clayer" "CC2T_NEZ")

       (command "_line" pt0 pt5 "")

       (metxt ptx1 5 txth 0 "SYMBOL")

       (metxt ptx2 5 txth 0 "NORTH")

       (metxt ptx3 5 txth 0 "EAST")

       (metxt ptx4 5 txth 0 "ELEVATIONS")

       (metxt ptx5 5 txth 0 "DISTANCE")

       (setq pt0b  (list (car pt0)(-(cadr pt0)(* txth 2.0)))

                pt1b  (list (car pt1)(-(cadr pt1)(* txth 2.0)))

                pt2b  (list (car pt2)(-(cadr pt2)(* txth 2.0)))

                pt3b  (list (car pt3)(-(cadr pt3)(* txth 2.0)))

                pt4b  (list (car pt4)(-(cadr pt4)(* txth 2.0)));;elevations

                pt5b  (list (car pt5)(-(cadr pt5)(* txth 2.0)));;distance

       )

       (command "_line" pt0b pt5b "")

       (repeat nump

              (setq ptx1 (list (car ptx1) (-(cadr ptx1)(* txth 2.0)))

                       ptx2 (list (car ptx2) (-(cadr ptx2)(* txth 2.0)))

                       ptx3 (list (car ptx3) (-(cadr ptx3)(* txth 2.0)))

                       ptx4 (list (car ptx4) (-(cadr ptx4)(* txth 2.0)))

                       ptx5 (list (car ptx5) (-(cadr ptx5)(* txth 2.0)))

              )

              (metxt ptx1 5 txth 0 (nth 0 (nth num lst)))

              (metxt ptx2 5 txth 0 (rtos (nth 2 (nth num lst))2 dec))

              (metxt ptx3 5 txth 0 (rtos (nth 1 (nth num lst))2 dec))

              (metxt ptx4 5 txth 0 (rtos (nth 3 (nth num lst))2 dec))

              (metxt ptx5 5 txth 0 (rtos (nth 4 (nth num lst))2 dec))

              (setq pt0b  (list (car pt0b)(-(cadr pt0b)(* txth 2.0)))

                       pt1b  (list (car pt1b)(-(cadr pt1b)(* txth 2.0)))

                       pt2b  (list (car pt2b)(-(cadr pt2b)(* txth 2.0)))

                       pt3b  (list (car pt3b)(-(cadr pt3b)(* txth 2.0)))

                       pt4b  (list (car pt4b)(-(cadr pt4b)(* txth 2.0)))

                       pt5b  (list (car pt5b)(-(cadr pt5b)(* txth 2.0)))

              )

              (command "_line" pt0b pt5b "")

              (setq num (1+ num))

       );repeat

       (command "_line" pt0 pt0b "")

       (command "_line" pt1 pt1b "")

       (command "_line" pt2 pt2b "")

       (command "_line" pt3 pt3b "")

       (command "_line" pt4 pt4b "")

       (command "_line" pt5 pt5b "")

(princ)      

(setvar "osmode" old_osnap) ; old_osnap

(setvar "clayer" old_layer) ; old_layer

(princ)

)