Thứ Tư, 23 tháng 11, 2011

Lisp vẽ hình chữ nhật và 4 hình tròn ở góc.

*Theo yêu cầu của bạn LAMPV bên mục viết lisp mình tạo bài này.
-Nguyên văn câu hỏi:
Trích dẫn(Lampv)
chao anh. em nhờ anh viết cho em cái lisp. như trong bản vẽ nhé cảm ơn anh
http://www.mediafire.com/?6j9kk3g3xsv2zlb

-Tạm thời mình chưa set layer, color, Ltype và vẽ cụ thể. Chỉ vẽ hình chữ nhật, 2 đường trục, hình tròn ở giữa, cặp 4 vòng tròn chính 4 góc.
-Chờ bạn LAMPV có yêu cầu xem đã hòm hòm chưa thì mình viết tiếp, về cơ bản là vẽ được nguyên cái hình đấy.
Bạn copy nội dung và tạo file lisp hoặc tải về phía dưới nhé!

(defun c:VCN ( )
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))

(setq a (getpoint "\nChon tam hinh chu nhat: "))
(setvar "osmode" 0)

(or canhngang (setq canhngang 230))
(setq canhngang (cond ((getreal (strcat "\nCanh ngang hinh chu nhat < " (rtos canhngang 2 2) " >:")))(canhngang)))

(or canhdung (setq canhdung 200))
(setq canhdung (cond ((getreal (strcat "\nCanh dung hinh chu nhat < " (rtos canhdung 2 2) " >:")))(canhdung)))

(setq aphai (polar a pi (/ canhngang 2)))
(setq atrai (polar a (* pi 2) (/ canhngang 2)))
(setq atren (polar a (/ pi 2) (/ canhdung 2)))
(setq aduoi (polar a (* (/ pi 2) 3) (/ canhdung 2)))

(setq bphai (polar aphai pi 3))
(setq btrai (polar atrai (* pi 2) 3))
(setq btren (polar atren (/ pi 2) 3))
(setq bduoi (polar aduoi (* (/ pi 2) 3) 3))

(setq gocduoitrai (polar atrai (* (/ pi 2) 3) (/ canhdung 2)))
(setq goctrenphai (polar aphai (/ pi 2) (/ canhdung 2)))




(command ".RECTANG" gocduoitrai goctrenphai)
(command ".LINE" bphai btrai "")
(command ".LINE" btren bduoi "")

(or rgiua (setq rgiua 17))
(command ".CIRCLE" a rgiua)
(setq rgiua (cond ((getreal (strcat "\nBan kinh hinh tron nay < " (rtos rgiua 2 2) " >:")))(rgiua)))
(command "UNDO" "1")
(command ".CIRCLE" a rgiua)

(or kcngang (setq kcngang 67))
(setq kcngang (cond ((getreal (strcat "\nKhoang cach vong tron goc voi tim ngang < " (rtos kcngang 2 2) " >:")))(kcngang)))
(command ".LINE" atren aduoi "")
(setq linengang (entlast))
(command ".MOVE" linengang "" a (polar a pi kcngang))
(command ".MIRROR" linengang "" atren aduoi "N")
(setq linengangphai (entlast))

(or kcdoc (setq kcdoc 77))
(setq kcdoc (cond ((getreal (strcat "\nKhoang cach vong tron goc voi tim doc < " (rtos kcdoc 2 2) " >:")))(kcdoc)))
(command ".LINE" aphai atrai "")
(setq linedoc (entlast))
(command ".MOVE" linedoc "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" linedoc "" atrai aphai "N")
(setq linedocphai (entlast))

(or rtrong (setq rtrong 10))
(command ".CIRCLE" a rtrong)
(setq trontrentrai (entlast))
(command ".MOVE" "last" "" a (polar a pi kcngang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" "last" "" atren aduoi "N")
(setq trontrenphai (entlast))

(command ".MIRROR" "last" "" atrai aphai "N")
(setq tronduoitrai (entlast))

(command ".MIRROR" "last" "" atren aduoi "N")
(setq tronduoiphai (entlast))

(setq rtrong (cond ((getreal (strcat "\nBan kinh hinh tron nay < " (rtos rtrong 2 2) " >:")))(rtrong)))

(command "erase" trontrenphai trontrentrai tronduoiphai tronduoitrai "")
(command ".CIRCLE" a rtrong)
(command ".MOVE" "last" "" a (polar a pi kcngang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" "last" "" bphai btrai "N")
(command ".MIRROR" "last" "Previous" "" btren bduoi "N")


(or rngoai (setq rngoai 12))
(command ".CIRCLE" a rngoai)
(setq tronngoaitrentrai (entlast))
(command ".MOVE" "last" "" a (polar a pi kcngang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" "last" "" atren aduoi "N")
(setq tronngoaitrenphai (entlast))

(command ".MIRROR" "last" "" atrai aphai "N")
(setq tronngoaiduoitrai (entlast))

(command ".MIRROR" "last" "" atren aduoi "N")
(setq tronngoaiduoiphai (entlast))

(setq rngoai (cond ((getreal (strcat "\nBan kinh hinh tron nay < " (rtos rngoai 2 2) " >:")))(rngoai)))

(command "erase" tronngoaitrenphai tronngoaitrentrai tronngoaiduoiphai tronngoaiduoitrai "")
(command ".CIRCLE" a rngoai)
(command ".MOVE" "last" "" a (polar a pi kcngang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" "last" "" bphai btrai "N")
(command ".MIRROR" "last" "Previous" "" btren bduoi "N")

(setq aphaitam (polar a pi (+ rngoai 3)))
(setq atraitam (polar a (* pi 2) (+ rngoai 3)))
(setq atrentam (polar a (/ pi 2) (+ rngoai 3)))
(setq aduoitam (polar a (* (/ pi 2) 3) (+ rngoai 3)))

(command ".LINE" aphaitam atraitam "")
(command ".MOVE" "last" "" a (polar a pi kcngang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" "last" "" bphai btrai "N")
(command ".MIRROR" "last" "Previous" "" btren bduoi "N")

(command ".LINE" atrentam aduoitam "")
(command ".MOVE" "last" "" a (polar a pi kcngang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoc))
(command ".MIRROR" "last" "" bphai btrai "N")
(command ".MIRROR" "last" "Previous" "" btren bduoi "N")


(command "erase" linedocphai linedoc linengangphai linengang "")



(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ))


-Bạn LAMPV có yêu cầu gì thì nêu ở đây, hôm qua bạn yêu cầu sai bài viết mình đã dời về mục yêu cầu lisp mong bạn lần sau nêu yêu cầu đúng chổ nếu không mình sẽ xoá nhé.



*Cập nhật ngày 02/12/2011 theo yêu cầu của bạn Lampv.
-Đã đã vẽ nguyên cái hình đấy trên 1 layer hiện hành.
-Chưa đánh kích thước và set layer + Ltype.
Bạn copy nội dung và tạo file lisp hoặc tải về phía dưới nhé!


(defun c:VCN ( )
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))

(setq a (getpoint "\nChon tam hinh chu nhat: "))
(setvar "osmode" 0)

(command ".XLINE" a (polar a pi 3) (polar a (/ pi 2) 3) "")

(or canhngang (setq canhngang 230))
(setq canhngang (cond ((getreal (strcat "\nCanh ngang hinh chu nhat < " (rtos canhngang 2 2) " >:")))(canhngang)))

(or canhdung (setq canhdung 200))
(setq canhdung (cond ((getreal (strcat "\nCanh dung hinh chu nhat < " (rtos canhdung 2 2) " >:")))(canhdung)))

(setq aphai (polar a pi (/ canhngang 2)))
(setq atrai (polar a (* pi 2) (/ canhngang 2)))
(setq atren (polar a (/ pi 2) (/ canhdung 2)))
(setq aduoi (polar a (* (/ pi 2) 3) (/ canhdung 2)))

(setq bphai (polar aphai pi 3))
(setq btrai (polar atrai (* pi 2) 3))
(setq btren (polar atren (/ pi 2) 3))
(setq bduoi (polar aduoi (* (/ pi 2) 3) 3))

(setq gocduoitrai (polar atrai (* (/ pi 2) 3) (/ canhdung 2)))
(setq goctrenphai (polar aphai (/ pi 2) (/ canhdung 2)))

(command ".undo" "1")

(command ".RECTANG" gocduoitrai goctrenphai)
(command ".LINE" bphai btrai "")
(command ".LINE" btren bduoi "")

;;;;;;;;
(or rgiua (setq rgiua 17))
(setq bankinhve1 rgiua)
(duy:hien1tron)
(setq rgiua (cond ((getreal (strcat "\nBan kinh hinh tron < " (rtos rgiua 2 2) " >:")))(rgiua)))
(setq bankinhve1 rgiua)
(duy:ve1tron)
;;;;;;;;
;;;;;;;;
(or dngangl (setq dngangl 90))
(setq kcdoingang (/ dngangl 2))
(duy:hien2line)
(setq dngangl (cond ((getreal (strcat "\nKich thuoc bang giua < " (rtos dngangl 2 2) " >:")))(dngangl)))
(setq kcdoingang (/ dngangl 2))
(duy:ve2line)
;;;;;;;;
;;;;;;;;
(or dngangln (setq dngangln 25))
(setq kcdoingang (- (/ canhngang 2) dngangln))
(duy:hien2line)
(setq dngangln (cond ((getreal (strcat "\nKhoang cach bang ben voi mep ngoai < " (rtos dngangln 2 2) " >:")))(dngangln)))
(setq kcdoingang (- (/ canhngang 2) dngangln))
(duy:ve2line)
;;;;;;;;
;;;;;;;;
(or dnganglt (setq dnganglt 43))
(setq kcdoingang (- (/ canhngang 2) (+ dngangln dnganglt)))
(duy:hien2line)
(setq dnganglt (cond ((getreal (strcat "\nKich thuoc bang ben < " (rtos dnganglt 2 2) " >:")))(dnganglt)))
(setq kcdoingang (- (/ canhngang 2) (+ dngangln dnganglt)))
(duy:ve2line)
;;;;;;;;
;;;;;;;;
(or rgcoc (setq rgoc 10))
(or dngang (setq dngang 67))
(or ddoc (setq ddoc 77))
(setq bankinhve4 rgoc)
(setq kcdoingang dngang)
(setq kcdoidoc ddoc)
(duy:hien4tron)
(setq rgoc (cond ((getreal (strcat "\nBan kinh hinh tron goc trong < " (rtos rgoc 2 2) " >:")))(rgoc)))
(setq dngang (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dngang 2 2) " >:")))(dngang)))
(setq ddoc (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddoc 2 2) " >:")))(ddoc)))
(setq bankinhve4 rgoc)
(setq kcdoingang dngang)
(setq kcdoidoc ddoc)
(duy:ve4tron)
;;;;;;;;
;;;;;;;;
(or rgcocn (setq rgocn (+ rgoc 3)))
(setq bankinhve4 rgocn)
(duy:hien4tron)
(setq rgocn (cond ((getreal (strcat "\nBan kinh hinh tron goc ngoai < " (rtos rgocn 2 2) " >:")))(rgocn)))
(setq bankinhve4 rgocn)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;
;;;;;;;;
(or rgcocm (setq rgocm 5))
(or dngangm (setq dngangm 72))
(or ddocm (setq ddocm 42))
(setq bankinhve5 rgocm)
(setq kcdoingang dngangm)
(setq kcdoidoc ddocm)
(duy:hien4lucgiac)
(setq rgocm (cond ((getreal (strcat "\nBan kinh hinh luc giac < " (rtos rgocm 2 2) " >:")))(rgocm)))
(setq dngangm (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dngangm 2 2) " >:")))(dngangm)))
(setq ddocm (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddocm 2 2) " >:")))(ddocm)))
(setq bankinhve5 rgocm)
(setq kcdoingang dngangm)
(setq kcdoidoc ddocm)
(duy:ve4lucgiac)
;;;;;;;;
;;;;;;;;
(or rgcocnm (setq rgocnm (+ rgocm 3)))
(setq bankinhve4 rgocnm)
(duy:hien4tron)
(setq rgocnm (cond ((getreal (strcat "\nBan kinh hinh tron goc ngoai < " (rtos rgocnm 2 2) " >:")))(rgocnm)))
(setq bankinhve4 rgocnm)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;
;;;;;;;;
(or rgcocg (setq rgocg 2.5))
(or dngangg (setq dngangg 36))
(or ddocg (setq ddocg 91))
(setq bankinhve4 rgocg)
(setq kcdoingang dngangg)
(setq kcdoidoc ddocg)
(duy:hien4tron)
(setq rgocg (cond ((getreal (strcat "\nBan kinh hinh tron goc trong < " (rtos rgocg 2 2) " >:")))(rgocg)))
(setq dngangg (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dngangg 2 2) " >:")))(dngangg)))
(setq ddocg (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddocg 2 2) " >:")))(ddocg)))
(setq bankinhve4 rgocg)
(setq kcdoingang dngangg)
(setq kcdoidoc ddocg)
(duy:ve4tron)
;;;;;;;;
;;;;;;;;
(or rgcocng (setq rgocng (+ rgocg 0.5)))
(setq bankinhve4 rgocng)
(duy:hien4tron)
(setq rgocng (cond ((getreal (strcat "\nBan kinh hinh tron goc ngoai < " (rtos rgocng 2 2) " >:")))(rgocng)))
(setq bankinhve4 rgocng)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;
;;;;;;;;
(or rgcocgd (setq rgocgd 6))
(or dnganggd (setq dnganggd 24))
(or ddocgd (setq ddocgd 82))
(setq bankinhve4 rgocgd)
(setq kcdoingang dnganggd)
(setq kcdoidoc ddocgd)
(duy:hien4tron)
(setq rgocgd (cond ((getreal (strcat "\nBan kinh hinh tron < " (rtos rgocgd 2 2) " >:")))(rgocgd)))
(setq dnganggd (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dnganggd 2 2) " >:")))(dnganggd)))
(setq ddocgd (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddocgd 2 2) " >:")))(ddocgd)))
(setq bankinhve4 rgocgd)
(setq kcdoingang dnganggd)
(setq kcdoidoc ddocgd)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;


(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien1tron ( )
(command ".CIRCLE" a bankinhve1)
(setq doituongxoa (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve1tron ( )
(command ".erase" doituongxoa "")
(command ".CIRCLE" a bankinhve1)
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien4tron ( )
(command ".CIRCLE" a bankinhve4)
(setq doituongxoa (entlast))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" doituongxoa "" atren aduoi "N")
(setq doituongxoa1 (entlast))
(command ".MIRROR" doituongxoa "" atrai aphai "N")
(setq doituongxoa2 (entlast))
(command ".MIRROR" doituongxoa2 "" atren aduoi "N")
(setq doituongxoa3 (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve4tron ( )
(command ".erase" doituongxoa doituongxoa1 doituongxoa2 doituongxoa3 "")
(command ".CIRCLE" a bankinhve4)
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" "last" "" atren aduoi "N")
(command ".MIRROR" "last" "" atrai aphai "N")
(command ".MIRROR" "last" "" atren aduoi "N")
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien4lucgiac ( )
(command ".POLYGON" "6" a "c" (polar a (/ pi 2) bankinhve5))
(setq doituongxoa (entlast))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" doituongxoa "" atren aduoi "N")
(setq doituongxoa1 (entlast))
(command ".MIRROR" doituongxoa "" atrai aphai "N")
(setq doituongxoa2 (entlast))
(command ".MIRROR" doituongxoa2 "" atren aduoi "N")
(setq doituongxoa3 (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve4lucgiac ( )
(command ".erase" doituongxoa doituongxoa1 doituongxoa2 doituongxoa3 "")
(command ".POLYGON" "6" a "c" (polar a (/ pi 2) bankinhve5))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" "last" "" atren aduoi "N")
(command ".MIRROR" "last" "" atrai aphai "N")
(command ".MIRROR" "last" "" atren aduoi "N")
(Princ))
;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve4cong ( )
(command ".line" (polar a pi (+ bankinhve4 3)) (polar a (* pi 2) (+ bankinhve4 3)) "")
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" "last" "" atren aduoi "N")
(command ".MIRROR" "last" "" atrai aphai "N")
(command ".MIRROR" "last" "" atren aduoi "N")
(command ".line" (polar a (/ pi 2) (+ bankinhve4 3)) (polar a (/ (* pi 3) 2) (+ bankinhve4 3)) "")
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" "last" "" atren aduoi "N")
(command ".MIRROR" "last" "" atrai aphai "N")
(command ".MIRROR" "last" "" atren aduoi "N")
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien2line ( )
(command ".line" atren aduoi "")
(setq doituongxoa (entlast))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MIRROR" doituongxoa "" atren aduoi "N")
(setq doituongxoa1 (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve2line ( )
(command ".erase" doituongxoa doituongxoa1 "")
(command ".line" atren aduoi "")
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MIRROR" "last" "" atren aduoi "N")
(Princ))





*Cập nhật ngày 05/12/2011 theo yêu cầu copy thêm chi tiết vừa vẽ ra 1 vị trí mới của bạn Lampv.
-Tạm thời mình copy ra mà không tạo thành block.
-Nếu ko có nhu cầu thống kê thì theo mình để đối tượng rời thế cho tiện.
Bạn copy nội dung và tạo file lisp hoặc tải về phía dưới nhé!


(defun c:vcn (/ tbl)
(setq a (getpoint "\nChon tam hinh chu nhat: "))
(duy:vechitietcokhi)
(setq b (getpoint "\nChon tam hinh chu nhat tiep theo: "))
(command ".copy" tbl "" a b "")
(Princ))


;;;;;;;;;;;;;;;;;;
(defun duy:vechitietcokhi ( )
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)

(command ".XLINE" a (polar a pi 3) (polar a (/ pi 2) 3) "")

(or canhngang (setq canhngang 230))
(setq canhngang (cond ((getreal (strcat "\nCanh ngang hinh chu nhat < " (rtos canhngang 2 2) " >:")))(canhngang)))

(or canhdung (setq canhdung 200))
(setq canhdung (cond ((getreal (strcat "\nCanh dung hinh chu nhat < " (rtos canhdung 2 2) " >:")))(canhdung)))

(setq aphai (polar a pi (/ canhngang 2)))
(setq atrai (polar a (* pi 2) (/ canhngang 2)))
(setq atren (polar a (/ pi 2) (/ canhdung 2)))
(setq aduoi (polar a (* (/ pi 2) 3) (/ canhdung 2)))

(setq bphai (polar aphai pi 3))
(setq btrai (polar atrai (* pi 2) 3))
(setq btren (polar atren (/ pi 2) 3))
(setq bduoi (polar aduoi (* (/ pi 2) 3) 3))

(setq gocduoitrai (polar atrai (* (/ pi 2) 3) (/ canhdung 2)))
(setq goctrenphai (polar aphai (/ pi 2) (/ canhdung 2)))

(command ".undo" "1")

(command ".RECTANG" gocduoitrai goctrenphai)
(setq tbl (ssget "l"))
(command ".LINE" bphai btrai "")
(duy:themvaotbl)
(command ".LINE" btren bduoi "")
(duy:themvaotbl)

;;;;;;;;
(or rgiua (setq rgiua 17))
(setq bankinhve1 rgiua)
(duy:hien1tron)
(setq rgiua (cond ((getreal (strcat "\nBan kinh hinh tron < " (rtos rgiua 2 2) " >:")))(rgiua)))
(setq bankinhve1 rgiua)
(duy:ve1tron)
;;;;;;;;
;;;;;;;;
(or dngangl (setq dngangl 90))
(setq kcdoingang (/ dngangl 2))
(duy:hien2line)
(setq dngangl (cond ((getreal (strcat "\nKich thuoc bang giua < " (rtos dngangl 2 2) " >:")))(dngangl)))
(setq kcdoingang (/ dngangl 2))
(duy:ve2line)
;;;;;;;;
;;;;;;;;
(or dngangln (setq dngangln 25))
(setq kcdoingang (- (/ canhngang 2) dngangln))
(duy:hien2line)
(setq dngangln (cond ((getreal (strcat "\nKhoang cach bang ben voi mep ngoai < " (rtos dngangln 2 2) " >:")))(dngangln)))
(setq kcdoingang (- (/ canhngang 2) dngangln))
(duy:ve2line)
;;;;;;;;
;;;;;;;;
(or dnganglt (setq dnganglt 43))
(setq kcdoingang (- (/ canhngang 2) (+ dngangln dnganglt)))
(duy:hien2line)
(setq dnganglt (cond ((getreal (strcat "\nKich thuoc bang ben < " (rtos dnganglt 2 2) " >:")))(dnganglt)))
(setq kcdoingang (- (/ canhngang 2) (+ dngangln dnganglt)))
(duy:ve2line)
;;;;;;;;
;;;;;;;;
(or rgcoc (setq rgoc 10))
(or dngang (setq dngang 67))
(or ddoc (setq ddoc 77))
(setq bankinhve4 rgoc)
(setq kcdoingang dngang)
(setq kcdoidoc ddoc)
(duy:hien4tron)
(setq rgoc (cond ((getreal (strcat "\nBan kinh hinh tron goc trong < " (rtos rgoc 2 2) " >:")))(rgoc)))
(setq dngang (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dngang 2 2) " >:")))(dngang)))
(setq ddoc (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddoc 2 2) " >:")))(ddoc)))
(setq bankinhve4 rgoc)
(setq kcdoingang dngang)
(setq kcdoidoc ddoc)
(duy:ve4tron)
;;;;;;;;
;;;;;;;;
(or rgcocn (setq rgocn (+ rgoc 3)))
(setq bankinhve4 rgocn)
(duy:hien4tron)
(setq rgocn (cond ((getreal (strcat "\nBan kinh hinh tron goc ngoai < " (rtos rgocn 2 2) " >:")))(rgocn)))
(setq bankinhve4 rgocn)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;
;;;;;;;;
(or rgcocm (setq rgocm 5))
(or dngangm (setq dngangm 72))
(or ddocm (setq ddocm 42))
(setq bankinhve5 rgocm)
(setq kcdoingang dngangm)
(setq kcdoidoc ddocm)
(duy:hien4lucgiac)
(setq rgocm (cond ((getreal (strcat "\nBan kinh hinh luc giac < " (rtos rgocm 2 2) " >:")))(rgocm)))
(setq dngangm (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dngangm 2 2) " >:")))(dngangm)))
(setq ddocm (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddocm 2 2) " >:")))(ddocm)))
(setq bankinhve5 rgocm)
(setq kcdoingang dngangm)
(setq kcdoidoc ddocm)
(duy:ve4lucgiac)
;;;;;;;;
;;;;;;;;
(or rgcocnm (setq rgocnm (+ rgocm 3)))
(setq bankinhve4 rgocnm)
(duy:hien4tron)
(setq rgocnm (cond ((getreal (strcat "\nBan kinh hinh tron goc ngoai < " (rtos rgocnm 2 2) " >:")))(rgocnm)))
(setq bankinhve4 rgocnm)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;
;;;;;;;;
(or rgcocg (setq rgocg 2.5))
(or dngangg (setq dngangg 36))
(or ddocg (setq ddocg 91))
(setq bankinhve4 rgocg)
(setq kcdoingang dngangg)
(setq kcdoidoc ddocg)
(duy:hien4tron)
(setq rgocg (cond ((getreal (strcat "\nBan kinh hinh tron goc trong < " (rtos rgocg 2 2) " >:")))(rgocg)))
(setq dngangg (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dngangg 2 2) " >:")))(dngangg)))
(setq ddocg (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddocg 2 2) " >:")))(ddocg)))
(setq bankinhve4 rgocg)
(setq kcdoingang dngangg)
(setq kcdoidoc ddocg)
(duy:ve4tron)
;;;;;;;;
;;;;;;;;
(or rgcocng (setq rgocng (+ rgocg 0.5)))
(setq bankinhve4 rgocng)
(duy:hien4tron)
(setq rgocng (cond ((getreal (strcat "\nBan kinh hinh tron goc ngoai < " (rtos rgocng 2 2) " >:")))(rgocng)))
(setq bankinhve4 rgocng)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;
;;;;;;;;
(or rgcocgd (setq rgocgd 6))
(or dnganggd (setq dnganggd 24))
(or ddocgd (setq ddocgd 82))
(setq bankinhve4 rgocgd)
(setq kcdoingang dnganggd)
(setq kcdoidoc ddocgd)
(duy:hien4tron)
(setq rgocgd (cond ((getreal (strcat "\nBan kinh hinh tron < " (rtos rgocgd 2 2) " >:")))(rgocgd)))
(setq dnganggd (cond ((getreal (strcat "\nKhoang cach voi truc dung < " (rtos dnganggd 2 2) " >:")))(dnganggd)))
(setq ddocgd (cond ((getreal (strcat "\nkhoang cach voi truc ngang < " (rtos ddocgd 2 2) " >:")))(ddocgd)))
(setq bankinhve4 rgocgd)
(setq kcdoingang dnganggd)
(setq kcdoidoc ddocgd)
(duy:ve4tron)
(duy:ve4cong)
;;;;;;;;


(setvar "osmode" luubatdiem)
(command "undo" "end")
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien1tron ( )
(command ".CIRCLE" a bankinhve1)
(setq doituongxoa (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve1tron ( )
(command ".erase" doituongxoa "")
(command ".CIRCLE" a bankinhve1)
(duy:themvaotbl)
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien4tron ( )
(command ".CIRCLE" a bankinhve4)
(setq doituongxoa (entlast))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" doituongxoa "" atren aduoi "N")
(setq doituongxoa1 (entlast))
(command ".MIRROR" doituongxoa "" atrai aphai "N")
(setq doituongxoa2 (entlast))
(command ".MIRROR" doituongxoa2 "" atren aduoi "N")
(setq doituongxoa3 (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve4tron ( )
(command ".erase" doituongxoa doituongxoa1 doituongxoa2 doituongxoa3 "")
(command ".CIRCLE" a bankinhve4)
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atrai aphai "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien4lucgiac ( )
(command ".POLYGON" "6" a "c" (polar a (/ pi 2) bankinhve5))
(setq doituongxoa (entlast))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(command ".MIRROR" doituongxoa "" atren aduoi "N")
(setq doituongxoa1 (entlast))
(command ".MIRROR" doituongxoa "" atrai aphai "N")
(setq doituongxoa2 (entlast))
(command ".MIRROR" doituongxoa2 "" atren aduoi "N")
(setq doituongxoa3 (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve4lucgiac ( )
(command ".erase" doituongxoa doituongxoa1 doituongxoa2 doituongxoa3 "")
(command ".POLYGON" "6" a "c" (polar a (/ pi 2) bankinhve5))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atrai aphai "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(Princ))
;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve4cong ( )
(command ".line" (polar a pi (+ bankinhve4 3)) (polar a (* pi 2) (+ bankinhve4 3)) "")
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atrai aphai "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(command ".line" (polar a (/ pi 2) (+ bankinhve4 3)) (polar a (/ (* pi 3) 2) (+ bankinhve4 3)) "")
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MOVE" "last" "" a (polar a (/ pi 2) kcdoidoc))
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atrai aphai "N")
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:hien2line ( )
(command ".line" atren aduoi "")
(setq doituongxoa (entlast))
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(command ".MIRROR" doituongxoa "" atren aduoi "N")
(setq doituongxoa1 (entlast))
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:ve2line ( )
(command ".erase" doituongxoa doituongxoa1 "")
(command ".line" atren aduoi "")
(command ".MOVE" "last" "" a (polar a pi kcdoingang))
(duy:themvaotbl)
(command ".MIRROR" "last" "" atren aduoi "N")
(duy:themvaotbl)
(Princ))

;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:themvaotbl ( )
(command "Select" tbl "last" "")
(setq tbl (ssget "P"))
(Princ))


14 nhận xét:

  1. CHÀO ANH DUY.
    RẤT CẢM ƠN ANH VỀ CÁI LISP NÀY.
    NHƯ VẬY LÀ ĐÚNG YÊU CẦU CỦA EM RỒI.
    CẢM ƠN ANH.

    ANH DUY.
    EM MUỐN VẼ THÊM 6 CÁI NÉT KHUẤT DỌC LUÔN DƯỢC KHÔNG ANH.

    EM DANG NGHIÊN CỨU BÀI GIẢNG VIẾT LISP CỦA ANH,
    HAY QUÁ TRỜI NHƯNG EM VẪN CHƯA LÀM DDUOCJ GÌ NHIỀU CẢ.
    MONG ANH CHỈ GIÁO THÊM.

    Trả lờiXóa
  2. Ý là vẽ được nguyên cái hình đấy vẩn 0k nưng mình dừng lại chờ vì nghi là hình tròn góc có phải nằm chính giửa hai nét khuất 43 đó không, và khoàng cách giửa 2 nét khuất sát nahu í là cố định bao nhiêu hay nhập vào.
    Đến đây mình cần bạn yêu vầu rỏ sẽ hỏi kích thước gì, tính ra sao để vẽ thì mới viết tiếp.

    Trả lờiXóa
  3. chào anh.
    4 đường tròn kích thước và khoản cách là mình nhập vào.
    nó không nằm giửa đâu.
    6 cái nét khuất đó mình cũng nhập vào tùy từng chủng loại.
    em load lên nguyên cái file khai triển để anh dễ hình dung.
    http://www.mediafire.com/?7szv7wjni9wskih
    http://www.mediafire.com/?xmd2pebeggr23jr
    những cái này là giống nhau chỉ khác kích thước thôi.
    tại vì ngày nào cung làm di làm lại cái này hoài nên em muốn viết cái lisp cho nó chạy luôn.
    đở sai sót

    Trả lờiXóa
  4. Được rồi thong thả mình làm cho quả hộp thoại nhập 1 phát vẽ luôn ko phải ỏi han chi nửa.
    Chỉ là vấn đề load nét cho layer có vướng nên mình viết lisp chạy trên bản vẽ mẫu đã tạo sẳn layer nhé.

    Trả lờiXóa
  5. anh duy.
    2 cái nét khuất gần nhau đó là khe hở giửa gối 43 và tấm 90.
    tấm 90 đó mình cũng nhập vào.
    gối 43 thì đối xứng qua tâm.
    khoản cách 43 mình cũng nhập vào.
    4 lổ bulon mình cung nhập khoan cách vào.
    nhưng có bộ tới 6 con lận.
    anh cố gắn giúp em với.
    cảm ơn anh rất là nhiều.
    hay anh viết cho em từng lisp riêng cũng được.
    -vidụ:
    -vẽ hình vuông ngoài.
    -vẽ 4 lổ ở góc.
    -vẽ tấm 90+4 lổ 4 góc tấm 90.
    -vẽ 4 hoặc 6 bulon.
    -vẽ 2 gối 43.
    như vậy là ok rồi.
    em cảm ơn anh trước nhé.

    Trả lờiXóa
  6. -Gối 43 đối xứng qua tâm nhưng khoảng cách tim gối 43 có trùng với tim 4 lổ góc không hay khoảng cách này cũng nhập vào?
    -Bộ 6 bulon thì có 2 con ở giữa trục đối xứng ngang phải không?

    Trả lờiXóa
  7. chào anh Duy
    khoảng cách gối 43 không trùng với tim 4 lổ, mình phải nhập vào khoảng cách gối 43 đó, có loại không gối không phải 43 mà 48 chẳng hạn, khoảng cách từ tâm đến gối mình cũng nhập vào. thường thì gối cách mép ngoài của hình chử nhật là 25mm cho tất cả các loại, chỉ 1 số trường hợp đặc biệt thì khoảng cách từ mép ngoài của hình chử nhật mới khác thôi.
    anh cứ cho khoảng cách từ mép ngoài của hình chữ nhật vào đến mép của gối là 25mm, rồi cho nhập vào gối là 43 hay ?? tùy mình anh nhé.
    6 bulon là 2 con giữa đối xứng ngang qua X.

    rất cảm ơn anh.

    Trả lờiXóa
  8. Cập nhật lisp vào bài viết trên rồi nha bạn!

    Trả lờiXóa
  9. chao Anh duy.
    nhu vậy là ok rồi.
    rất cảm ơn anh nhé.
    bây giờ em muốn cái hình vừa vẽ thành 1 block và copy thành 1 hình nữa được không anh.

    Trả lờiXóa
  10. Nhiều đối tượng quá mình đóng thành block không nổi. Còn muốn 1 cái giống y thì bạn thực hiện lệnh lại lần nửa và chọn điểm xong enter 21 lần là ok vì lisp nhớ các giá trị trước.

    Trả lờiXóa
  11. Đã tìm ra cách gom nhóm đối tượng. Làm theo yêu cầu bạn thì được nhưng nếu đóng thành block thì có sinh nhiều block quá không, bạn chọn phương án xem:
    +Tạo thành block rồi copy ra vị trí thứ 2.
    +Copy ra vị trí thứ 2 mà không tạo block.
    +Số lần copy ra cố định là 2 lần hay có thay đổi.

    Trả lờiXóa
  12. chào anh Duy.
    em muốn copy ra vị trí thứ 2 mà không cần tạo block.
    số lần copy chỉ cần 2 là đủ.
    anh cố gắn giúp em với nhé.
    cho em hỏi riêng tí là: anh Duy đang làm ở quảng ngãi hay ở đâu.

    Trả lờiXóa
  13. -Yêu cầu trên thì mình cập nhật sẳn trên bài viết rồi đấy bạn.
    -Mình làm ở Cty CP tư vấn XD&ĐT Quảng Ngãi.

    Trả lờiXóa
  14. chao anh.
    lúc trước em làm cho PTSC quảng ngãi.
    nhưng giờ thì chạy vào sài gòn rồi.
    tưởng anh ở sài gòn thì mời anh đi nhậu.
    còn ở quảng ngãi thì chịu rồi.
    hồi anh Duy học lisp ở đâu vậy.
    em nghiên cứ hoài mà không ngộ ra dc tí nào.
    chỉ làm ba cái vớ vẩn thôi.
    có diệp nào nhờ anh Duy chỉ cho vài chiêu.
    cảm ơn anh về cái lisp.

    Trả lờiXóa

Khi viết nhận xét mong bạn không đứng vai trò nặc danh! Bạn có thể chọn Name/Url trong đó Url là http://duy782006.blogspot.com/ như vậy hay hơn nặc danh bạn nhé.