วันจันทร์ที่ 28 กุมภาพันธ์ พ.ศ. 2565

Edit Left and Right Cross-Section Distance

 


;|    

      Edit Left and Right Cross-Section Distance

Designed and Created February 2022

      - Options Decimal

      - Add Number Bank(Taling)

      - Select object   

|;

(defun c:EDTD (/ ddata)

(setq old_dimzin (getvar "dimzin"))

(setvar "dimzin" 4)

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

(initget "0 0.0 0.00 0.000")

      (setq opt0 (getkword "\nOptions Decimal \n [  0 /  0.0 /  0.00 /  0.000 ] : <0> "))

      (if (= opt0 "") (setq opt0 "0"))

      (cond

            ((if (= opt0 "0")  (setq dec 0))) ;decimal 1

            ((if (= opt0 "0.0")  (setq dec 1))) ;decimal 1

            ((if (= opt0 "0.00")  (setq dec 2))) ;decimal 2

            ((if (= opt0 "0.000")  (setq dec 3))) ;decimal 3

      ); setq

;(setq dec 3)     

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

      (if (not addon) (setq addon 59.0))

      (setq txtMtemp

            (getdist (strcat "\nAdd Number Bank(Taling) : <"

                            (rtos addon 2 dec)

                                     "> : "

                                          ) ;_ strcat

            ) ;_ getdist

      ) ;_ setq

      (if (not txtMtemp) (setq txtMtemp addon) (setq addon txtMtemp))

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

      (princ "Select object (window) :")

      (if (setq dimss (ssget ":L" '((0 . "TEXT,MTEXT"))))

            (progn

                  (setq c -1)

                  (repeat (sslength dimss)

                        (setq ddata (entget (ssname dimss (setq c (1+ c))))

                                str (atof (cdr (assoc 1 ddata)))

                        )

                        (setq ddata (subst

                                                (cons 1 (if (= str addon)

                                                                  (if(= dec 0)(rtos 0.0 2 dec)            ;0

                                                                        (strcat "0"(rtos 0.0 2 dec))  ;0.0 0.00 0.000

                                                                  )

                                                                  (rtos (- str addon)2 dec)

                                                            )

                                                )

                                                (assoc 1 ddata)

                                                ddata

                                          ); subst

                        ); setq

                        (entmod ddata)

                  )

            );progn

      )    

(setvar "dimzin" old_dimzin) 

(princ)

); defun

(prompt "\nCreate and Design by SONGKHRAN JONGKUL February 2022")

(prompt "\nEnter EDTD to start. ")

วันพุธที่ 23 กุมภาพันธ์ พ.ศ. 2565

Add message Text or Dimension

 

;|     

       Add message Text or Dimension

       - Add message

       - front / behind

|;

(defun c:ADTD (/ dimss c ddata); = Dimension Text:

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

       (if (or (not addon) (/= (type addon) 'STR)) (setq addon "เมตร"))

       (setq txtMtemp

              (getstring T (strcat "\npecify text to add message <"

                             addon

                                     "> : "

                                                ) ;_ strcat

              ) ;_ getdist

       ) ;_ setq

       (if (= txtMtemp "") (setq txtMtemp addon) (setq addon txtMtemp))

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

(initget "front behind")

       (setq opt0 (getkword "\nAdd message \n[ front / behind ] : <front> "))

       (if (= opt0 "") (setq opt0 "front"))

       (setq dimss (ssget ":L" '((0 . "MTEXT,DIMENSION")))

                c -1

                dec 2 ;decimal

       ); setq

       (repeat (sslength dimss)

              (setq ddata (entget (ssname dimss (setq c (1+ c)))))

              (print (cdr (assoc 0 ddata)))

              (print addon)

              (cond

                     ((= (cdr (assoc 0 ddata)) "DIMENSION")    

                           (setq ddata (subst

                                                       (cons 1 (if (= opt0 "front")(strcat addon(rtos (cdr (assoc 42 ddata))2 dec))

                                                                                  (strcat (rtos (cdr (assoc 42 ddata))2 dec)addon)

                                                                     )

                                                       )

                                                       (assoc 1 ddata)

                                                       ddata

                                  ); subst & adjusted ddata

                           ); setq

                           (entmod ddata)             

                     );if

                     ((= (cdr (assoc 0 ddata)) "MTEXT")

                           (setq ddata (subst

                                                       (cons 1 (if (= opt0 "front")(strcat addon(cdr (assoc 1 ddata)))

                                                                                  (strcat(cdr (assoc 1 ddata)) "" addon)

                                                                     )

                                                       )

                                                       (assoc 1 ddata)

                                                       ddata

                                                ); subst & adjusted ddata

                           ); setq

                           (entmod ddata)

                     );if

              )

       ); repeat

       (princ)

); defun

(prompt "\nEnter ADTD to start. ")

วันเสาร์ที่ 5 กุมภาพันธ์ พ.ศ. 2565

irregular quadrilateral


|;

       irregular quadrilateral

       by Lengths and angle

       - Enter length 4 side and one angle

       - Create and Design by Songkhran Jongkul 04-02-2022

|;

       (defun tan (x)

       (/ (sin x)(cos x))

       )

       (defun arsin (x)

       (setq y (sqrt (- 1 (* x x))))

       (atan x y)

       )

       (defun arcos (x)

       (- (/ pi 2)(arsin x))

       )

       (defun rtod (x)

       (/ (* x 180) pi)

       )

       (defun dtor (x)

       (* x (/ pi 180))

       )

(defun c:irrq ()

(setq old_cmdecho  (getvar "cmdecho"))

(setq old_osnap (getvar "osmode"))

 

(setvar "cmdecho" 0)

(setvar "osmode" 0)

       (or la (setq la 138.82))     

       (setq latemp (getdist (strcat "\nLength A <" (rtos la 2 2) ">: ")))

       (if (not latemp)(setq latemp la)

              (setq la latemp)

       )

       (or lb (setq lb 83.88))     

       (setq lbtemp (getdist (strcat "\nLength B <" (rtos lb 2 2) ">: ")))

       (if (not lbtemp)(setq lbtemp b)

              (setq lb lbtemp)

       )

       (or lc (setq lc 104.10))    

       (setq lctemp (getdist (strcat "\nLength C <" (rtos lc 2 2) ">: ")))

       (if (not lctemp)(setq lctemp lc)

              (setq lc lctemp)

       )

       (or ld (setq ld 74.7))

       (setq ldtemp (getdist (strcat "\nLength D <" (rtos ld 2 2) ">: ")))

       (if (not ldtemp)(setq ldtemp ld)

              (setq ld ldtemp)

       )

       (or anga (setq anga 88.53)) 

       (setq angatemp (getdist (strcat "\nAngle A <" (rtos anga 2 2) "\U+00B0>: ")))

       (if (not angatemp)(setq angatemp anga)

              (setq anga angatemp)

       )

;----------Calculator length and angle inside--------------------------------

       (setq bd (sqrt(-(+(expt la 2)(expt lb 2))(* 2 la lb (cos (dtor anga))))))

       (setq angd  (rtod(arcos(/(-(+(expt bd 2)(expt la 2))(expt lb 2))(* 2 la bd))))

                angd2 (rtod(arcos(/(-(+(expt ld 2)(expt bd 2))(expt lc 2))(* 2 ld bd))))

                angadc (+ angd angd2)

                angb  (- 180.0(+ anga angd))

                angb2 (rtod(arcos(/(-(+(expt lc 2)(expt bd 2))(expt ld 2))(* 2 lc bd))))

                angabc (+ angb angb2)

                angbcd (- 360.0(+ anga angabc angadc))

       )

;----------------Draw irregular quadrilateral -------------------------------

       (setq pa (getpoint "\n Pick a point a :"))

       (setq pb (polar pa (dtor anga) lb)

                pd (polar pa 0 la)

                pc (polar pd (dtor (- 180.0 angadc)) ld)

       )

       (command "_pline" pa pd pc pb "c")

(setvar "cmdecho" old_cmdecho)

(setvar "osmode" old_osnap)

(princ)

)

(prompt "\nEnter IRRQ to start irregular quadrilateral")

(prompt "\nCreate and Design by Songkhran Jongkul 04-02-2022")


วันเสาร์ที่ 22 มกราคม พ.ศ. 2565

fillet radius

 

(defun c:FP (/ ss)

 ;; Alan J. Thompson, 08.31.10

(setq old_cmdecho  (getvar "cmdecho"))

(setvar "cmdecho" 0)

(initget 4)

(setvar 'filletrad

    (cond

        ((getdist (strcat "\nSpecify fillet radius <" (rtos (getvar 'filletrad)) ">: ")))

        ((getvar 'filletrad))

    )

)

(if (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))

      ((lambda (i / e)

            (while (setq e (ssname ss (setq i (1+ i))))

                  (command "_.fillet" "_polyline" e)

            )

      )

     -1

      )

)

(princ)

(setvar "cmdecho" old_cmdecho)

)

วันอังคารที่ 4 มกราคม พ.ศ. 2565

Make Hidden Line.

;;make hidden line.

;;Test by AutoCAD and CADTHAI 

(defun c:mkhl ()

(setq old_cmdecho  (getvar "cmdecho"))

(setq old_osnap (getvar "osmode"))

(setvar "cmdecho" 0)

(setvar "osmode" 0)

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

(or ltl (setq ltl 5.0))

(setq ltltemp

(getdist (strcat "\nEnter Dash length :  <"

(rtos ltl 2 2)

">: "

) ;_ strcat

) ;_ getdist

) ;_ setq

(and ltltemp (setq ltl ltltemp))

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

(or ltd (setq ltd 1.0))

(setq ltdtemp

(getdist (strcat "\nEnter Spacing :  <"

(rtos ltd 2 2)

">: "

) ;_ strcat

) ;_ getdist

) ;_ setq

(and ltdtemp (setq ltd ltdtemp))

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

(while (and 

(setq pt1 (getpoint "\nPick Start Point : "))

(setq pt2 (getpoint pt1 "\nPick End Point : "))

)

    (progn


(setq dis (distance pt1 pt2)

  ang (angle pt1 pt2)

)

(repeat (setq i (fix(/ dis (+ ltl ltd))))

(setq p1 pt1

  p2 (polar p1 ang ltl) 

  p3 (polar p2 ang ltd)

)

(command "_line" p1 p2 "")

(setq pt1 p3)

        )

)

)

(setvar "cmdecho" old_cmdecho)

(setvar "osmode" old_osnap)

(princ)

)

(prompt "\nEnter MKHL to start make hidden line. ")

วันจันทร์ที่ 1 พฤศจิกายน พ.ศ. 2564

Closed Boundary Selection

 

;| 

    closed boundary in the  selection                                            

|;

(defun my_error (msg)

(setvar "cmdecho" old_cmdecho)

(if

  (or

    (= msg "Function cancelled")

    (= msg "quit / exit abort")

  )

 (princ)

 (princ (strcat "\nError: " msg))

)

(if msg (Alert (strcat "\nApplication error: " msg)))

      (setvar "cmdecho" old_cmdecho)

      (setvar "osmode" old_osnap)

      (setvar "snapmode" old_snap)

      (setvar "orthomode" old_ortho)

      (setvar "dimdec" old_dimdec)

      (setq *error* old_error)

       

(princ)

);;end my_error

 

(defun c:cbs (/ clayer pa pb dis ay by th th0 lp rp inter1 inter1mid inter2 inter2mid i len plboundary)

(setq old_cmdecho(getvar "cmdecho"))

(setq old_osnap  (getvar "osmode"))

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

(setq old_error   *error*)

(setq *error* my_error )

 

(setvar "cmdecho" 0)

(setvar "osmode" 0)

 

      (command "_undo" "_be")

      (setq old_layer (getvar "clayer"))

      (if (not (tblsearch "LAYER" "mybound"))

            (command "._layer" "_M" "mybound" "_Color" "3" "" "LType" "Continuous" "" "")

      )

      (setq pa (getpoint "\n Pick the left up point"))

      (setq pb (getcorner pa "\n Pick the bottom right point"))

      (setq dis (getdist "\n Enter minimum distance"))

 

      (setq ay (nth 1 pa)

          by (nth 1 pb)

      )

      (setq th by)

      (setq th0 dis)

(while (< th ay)

    (setq lp (list (nth 0 pa) th 0))

    (setq rp (list (nth 0 pb) th 0))

    (grdraw lp rp 249)

    (setq inter1 (vl-Get-Int-Pt lp rp "mybound" 0))

    (setq inter1mid (midlist inter1))

    (setq inter2 (vl-Get-Int-Pt lp rp "mybound" 1)

          inter2mid (midlista inter2)

    )

      (setvar "clayer" "mybound")

    (setq i 0

          len (length inter1)

    )

    (repeat (1- len)

            (setq midpoint (nth i inter1mid))   

            (if (not (member1 midpoint inter2mid))

                  (progn

                        (setq plboundary (STD-BPOLY midpoint nil))

                        (if plboundary

                              (setq inter2 (vl-Get-Int-Pt lp rp "bound" 1)

                                      inter2mid (midlista inter2)

                              )

                        )

                  )

            )

            (setq i (1+ i))

    )

    (setvar "clayer" old_layer)

    (setq th (+ th th0))

)

  (command "_undo" "_e"

               "_redraw"

  )

(setvar "cmdecho" old_cmdecho)

(setvar "osmode" old_osnap)

(setvar "clayer" old_layer)

(setq *error* old_error)

(princ)

)

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

(prompt "\n Enter CBS to Start closed boundary in the selection.")

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

(defun member1 (a b / res)

  (if b

    (foreach x b

      (if (< (distance x a) 0.01)

        (progn

          (setq res T)

        )                      ; (setq res nil)

      )

    )                          ; (setq res nil)

  )

  res

)

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

(defun midlist (lst / len lst1 midpoint i)

  (setq i 0

        len (length lst)

  )

  (repeat (1- len)

    (setq midpoint (midp (nth i lst) (nth (1+ i) lst)))

    (setq lst1 (append

                 lst1

                 (list midpoint)

               )

    )

    (setq i (1+ i))

  )

  lst1

)

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

(defun midlista (lst / len lst1 midpoint i)

  (setq i 0

        len (length lst)

  )

  (repeat (/ len 2)

    (setq midpoint (midp (nth i lst) (nth (1+ i) lst)))

    (setq lst1 (append

                 lst1

                 (list midpoint)

               )

    )

    (setq i (+ i 2))

  )

  lst1

)

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

(defun STD-BPOLY (pt ss / ele)

  (cond

    ((member (type C:BPOLY) '(SUBR EXRXSUBR EXSUBR))

      (if ss

        (C:BPOLY pt ss)               ; old arx or ads function

        (C:BPOLY pt)

      )

    )

    (pt                              ; >=r14: native command

        (setvar "CMDDIA" 0)

        (setq ele (entlast))          ; (std-break-command)

        (command "_BPOLY" "_A" "_I" "_N" "") ; advanced options

                               ; without island detection

        (if ss

          (command "_B" "_N" ss "")

        )                      ; define boundary set if ss

        (command "" pt "") (setvar "CMDDIA" 1)

        (if (/= (entlast) ele)

          (entlast)

        )

    )                          ; return created BPOLY

    (T

      (alert "command _BPOLY not available")

    )

  )

)

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

(defun vl-Get-Int-Pt (FirstPoint SecondPoint lay layindex / acadDocument

                                 mSpace SSetName SSets SSet reapp ex obj

                                 Baseline

                     )

  (vl-load-com)

  (setq acadDocument (vla-get-ActiveDocument (vlax-get-acad-object)))

  (setq mSpace (vla-get-ModelSpace acadDocument))

  (setq SSetName "MySSet")

  (setq SSets (vla-get-SelectionSets acadDocument))

  (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list SSets

                                                               SSetName

                                                         )

                            )

      )

    (vla-clear (vla-Item SSets SSetName))

  )

  (setq SSet (vla-Item SSets SSetName))

  (setq Baseline (vla-Addline mspace (vlax-3d-point FirstPoint)

                              (vlax-3d-point SecondPoint)

                 )

  )

  (vla-SelectByPolygon SSet acSelectionSetFence

                       (kht:list->safearray (append

                                              FirstPoint

                                              SecondPoint

                                            ) 'vlax-vbdouble

                       )

  )

  (vlax-for obj sset (if (setq ex (kht-intersect

                                                 (vlax-vla-object->ename BaseLine)

                                                 (vlax-vla-object->ename obj)

                                                 lay layindex

                                  )

                         )

                       (setq reapp (append

                                     reapp

                                     ex

                                   )

                       )

                     )

  )

  (vla-delete BaseLine)

  (setq reapp (vl-sort reapp '(lambda (e1 e2)

                                (< (car e1) (car e2))

                              )

              )

  )

  reapp

)

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

(defun kht-intersect (en1 en2 lay layindex / a b x ex ex-app c d e la2)

  (vl-load-com)

  (setq c (cdr (assoc 0 (entget en1)))

        d (cdr (assoc 0 (entget en2)))

        la2 (cdr (assoc 8 (entget en2)))

  )

  (if (or

        (= c "TEXT")

        (= d "TEXT")

        (= c "SPLINE")

        (= d "SPLINE")

      )

    (setq e -1)

  )

  (if (= layindex 0)

    (if (= la2 lay)

      (setq e -1)

    )

  )

  (if (= layindex 1)

    (if (/= la2 lay)

      (setq e -1)

    )

  )

  (setq En1 (vlax-ename->vla-object En1))

  (setq En2 (vlax-ename->vla-object En2))

  (setq a (vla-intersectwith en1 en2 acExtendNone))

  (setq a (vlax-variant-value a))

  (setq b (vlax-safearray-get-u-bound a 1))

  (if (= e -1)

    (setq b e)

  )

  (if (/= b -1)

    (progn

      (exapp a)

    )

    nil

  )

)

 

(defun exapp (a)

  (setq a (vlax-safearray->list a))

  (repeat (/ (length a) 3)

    (setq ex-app (append

                   ex-app

                   (list (list (car a) (cadr a) (caddr a)))

                 )

    )

    (setq a (cdr (cdr (cdr a))))

  )

  ex-app

)

(defun kht:list->safearray (lst datatype)

  (vlax-safearray-fill (vlax-make-safearray (eval datatype) (cons 0

                                                                  (1-

                                                                      (length lst)

                                                                  )

                                                            )

                       ) lst

  )

)

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

;;; |           midpoint function                            |

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

(defun midp (p1 p2)

  (mapcar

    '(lambda (x)

       (/ x 2.)

     )

    (mapcar

      '+

      p1

      p2

    )

  )

)