Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2849 replies to this topic

#461 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 30 September 2009 - 11:41 AM

Cảm ơn phamthanhbinh và Tue_NV đã quan tâm.
Theo như giải thích của 2 bạn là lisp trên đã có khoảng trắng. Nhưng mình không hiểu sao khi sử dụng lisp trên lại không có khoảng trắng (không biết có phải do lỗi lisp hay do lỗi máy của mình).
Khi sửa lại theo ý của phamthanhbinh thì OK không có vấn đề gì.
Một lần nữa cảm ơn hai bạn đã quan tâm.

Bạn sử dụng Lisp này Tue_NV viết thêm thử xem :
-> sẽ hiện lên hộp thoại Edit text : Bạn muốn thêm bớt gì thì tuỳ thích nhé :

;; copyright by Tue_NV
(defun c:shbv(/ dau tong po po1 ent i pre cao)
(prompt "\n Danh so hieu ban ve dang n/m ")
(setvar "cmdecho" 0)

(command "style" "CADVIET" "Vhelven.TTF" "2" "1" "0" "n" "n")
(if (not caoo) (setq caoo 2))
(setq cao (getreal (strcat "\n Nhap chieu cao chu :")))
(if (not cao) (setq cao caoo) (setq caoo cao))

(setq pre "< KC, CN KT>: ")
(wtxt pre '(0 0 0))
(command "ddedit" (entlast) "")
(setq pre (cdr(assoc 1 (entget(entlast)))))
(entdel (entlast))
(setq dau (getint "\n Danh so bat dau (n):"))
(setq tong (getint "\n Danh so tong (m):") i 1)

(setq po (getpoint
(strcat "\n Cho diem chen cua so: " (if (< dau 10) (strcat pre "0" (itoa dau)) (itoa dau)) "/" (itoa tong))))
(wtxt (strcat (if (< dau 10) (strcat pre "0" (itoa dau)) (itoa dau)) "/" (itoa tong)) po)

(Repeat (- tong dau)
(setq po1 (getpoint po
(strcat "\n Cho diem chen cua so: " (if (< (+ dau i) 10) (strcat pre "0" (itoa (+ dau i))) (itoa (+ dau i))) "/" (itoa tong))))

(command "copy" "L" "" po po1)
(setq ent (entget(entlast)))
(setq ent
(subst
(cons 1 (strcat (if (< (+ dau i) 10) (strcat pre "0" (itoa (+ dau i))) (itoa (+ dau i))) "/" (itoa tong))) (assoc 1 ent) ent))
(entmod ent)
(setq i (1+ i))
(setq po po1)
)
(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h (cdr (assoc 40 d)))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p)
(cons 72 1) (cons 73 2)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

Chổ mình có bão nhưng may mắn không việc gì. Cảm ơn bạn đã quan tâm.
Mình cũng cầu chúc cho bạn và các bạn trên diễn đàn luôn được mạnh khoẻ
Thanks
  • 1

#462 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 30 September 2009 - 01:19 PM

Nhân tiện cái lisp của bác Hoangson614 các anh cho em hỏi, có biến hệ thống nào giúp lisp viết những số nguyên từ -9 đến 9 mà có thêm số 0 ở trước không? VD: 01, 02..
Chúng ta hay sử dụng cách viết này cho một số trường hợp. chẳng hạn đánh số thứ tự bản vẽ. Hiện tại em cũng đang fải lợi dụng hàm if cho việc này. về kết quả nhận đươc thì ko sao, nhưng em cứ lăn tăn khi fải dùng cách này.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#463 chandatn

chandatn

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 01 October 2009 - 02:30 PM

mình viết thử và muốn thêm đối tượng tạo ra cuối cùng trong cad (khi coppy gõ "copy" "last") nhưng bi lỗi nhờ các cao thủ kiểm tra và chỉnh hộ. Vì trình độ abc nên có khi mắc lỗi cơ bản mong các cao thủ chiếu cố và bỏ qua:

(defun c:12 ()
(setq ss (ssadd) lstName (list))

(while (setq sel (entsel "\nChon doi tuong them vao tap hop SS : "))
(setq obj (car sel))
(if (= (type obj) 'ENAME)
(progn
(ssadd obj ss)

(setq obl ent)
(ssadd obl ss)

)

)
)
(princ (strcat "\nTap hop SS co " (itoa (sslength ss)) " doi tuong."))




)
  • 0

#464 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 01 October 2009 - 03:11 PM

mình viết thử và muốn thêm đối tượng tạo ra cuối cùng trong cad (khi coppy gõ "copy" "last") nhưng bi lỗi nhờ các cao thủ kiểm tra và chỉnh hộ. Vì trình độ abc nên có khi mắc lỗi cơ bản mong các cao thủ chiếu cố và bỏ qua:
...........

Bạn dùng hàm (entlast) để lấy đối tuợng tạo ra cuối cùng trong bản vẽ.
(defun c:test ()
(if (setq ent (entlast))
(alert (strcat "Doi tuong cuoi cung la : "(cdr (assoc 0 (entget ent))))) )
(princ)
)

  • 0

#465 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 01 October 2009 - 08:33 PM

Mình có lisp được một anh bạn cho (vẽ trắc dọc ống cấp nước). Lisp sử dụng rất tốt nhưng có những cái chưa hoàn thiện lắm và rất còn bất tiện cho người sử dụng
Đối với lisp mình chỉ mới bắt đầu tìm hiểu nên còn lơ mơ lắm. Có vấn đề muốn nhờ các bạn trên diễn đàn chỉ bảo thêm (mình chưa hiểu lắm đừng cười mình nha)
Mình trích một đoạn code (của đoạn code dưới) như thế này:
.........
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)

........
Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat
"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.
Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả

;--------------------------------
;;function set parameter
(defun Init ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "ANGBASE" 0)
);;
;--------------------------------
;;function return parameter
(defun Reinit ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 1)
(setvar "ANGBASE" 0)
)
;--------------------------------
;;function change degree to radian
(defun doi (a)
(* PI (/ a 180))
)
;--------------------------------
;function set corner by radian
(defun doi1 ()
(setq a 1.5707965 a45 0.78539825
b 3.141593 b45 -0.78539825
c 4.7123895
)
)
;--------------------------------
;;function change radian to degree
(defun doi2 (d)
(* 180 (/ d pi))
)
;;
;--------------------------------
; make layer
(defun taolop ()
(command
"-OSNAP" "OFF"
"layer" "m" "manh" "c" "252" "" "l" "continuous" "manh" "lw" "0.2" "" ""
"layer" "m" "giong" "c" "252" "" "l" "continuous" "giong" "lw" "0.2" "" ""
"layer" "m" "bao" "c" "1" "" "l" "continuous" "bao" "lw" "0.25" "" ""
"layer" "m" "ong" "c" "5" "ong" "l" "continuous" "ong" "lw" "0.3" "" ""
"layer" "m" "chua" "c" "3" "" "l" "continuous" "" ""
"layer" "m" "dat" "c" "16" "" "l" "continuous" "dat" "lw" "0.1" "" ""
"layer" "m" "chuv" "c" "3" "" "l" "continuous" "" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
)
)
;
;--------------------------------
;---------------------------------
;1 ENDP 2 MID 4 CEN 8 NODE 16 QUA 32 INT 64 INS 128 PER 256 TAN 512 NEA 1024 QUI
;;ONAP ENDP INT(MID) NEAR
(defun onap ()
(setvar "OSMODE" (+ 1 32 512))
)
;;;;ONAP ENDP INT(MID) CEN
(defun onap1 ()
(setvar "OSMODE" (+ 1 4 32))
)
;;;
;;;;ONAP ENDP INT(MID) CEN
(defun onap2 ()
(setvar "OSMODE" (+ 1 2 4 16 32 128 512))
)
;;;;;;
(defun ofnap ()
(command "-OSNAP" "OFF" )
)
;----------------------------(ofnap) (onap2)
(defun COCSS()
(doi1)
(setq
i 1
j 0
Ess1 (+ Ess 1)
Ptssx (polar Ptss 0 -1) Ptssx1 (polar Ptssx a (* Esn Td))
Ptssy (polar Ptss 0 1) Ptssy1 (polar Ptssy a (* Esn Td))
)
(Repeat Esn
(setq Ess2 (rtos Ess1 2 2)
Ptss2 (polar Ptss 0 (* i 0.5))
Ptss21 (polar Ptss2 a (* j Td)) Ptss22 (polar Ptss21 a Td)
Ptss3 (polar Ptss 0 -1)
Ptss31 (polar Ptss3 a (+ (* j Td) Td)) Ptss32 (polar Ptss31 0 -5)
Ptss33 (polar Ptss32 0 -1)
)
(command
"layer" "s" "manh" ""
"pline" Ptss21 "w" 1.0 1.0 Ptss22 ""
"line" Ptss31 Ptss32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mr" Ptss33 2.5 0.0 (strcat Ess2)
)
(setq
i (* i -1)
j (+ j 1)
Ess1 (+ Ess1 1)
)
);endrepeat
(command "layer" "s" "manh" "" "pline" Ptssx "w" 0.0 0.0 Ptssx1 Ptssy1 Ptssy ""
)
);end function comparation (princ lis)
;==========================
;function main
(defun C:STD ()
(setvar "dimzin" 0)
(Init)
(taolop)
(doi1)
;-----------------------------------------
;-----------------------------------------
(Princ "\n**Day la chuong trinh ve TRAC DOC duoc viet boi Anh NGUYEN NGOC QUANG**")
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)
;-----------------------------------------
(setq LisLkcd1 nil LisLkcd nil
LisLkcdo nil)
(initget "Moi Tieptuc")
(Princ "\n")
(setq Ansertt (getint "\nVe moi hay tiep tuc <1.Moi/2.Tieptuc> :")
)
(cond
((= Ansertt 1)
(setq
Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
Kcd 0 LisLkcd1 (cons Kcd LisLkcd1)
LisLkcd LisLkcdo)
)
((= Ansertt 2)
(setq
Kcdo (getreal "\nChieu dai tai coc tiep theo (m):");distance 2 station
Kcd (* Kcdo Tn) ; distance
LisLkcd (cons (- Kcdo Kcdo) LisLkcd)
LisLkcdo (cons Kcdo LisLkcdo)
LisLkcd1 (cons Kcd LisLkcd1))
)
)
(progn
;------------------------------------(princ lis)
(onap)
(setq Pta (getpoint "\nChon diem bat dau ve :")
Pta1 (polar pta 0 60)
Pta2 (polar pta 0 5)
Pta3 (polar pta 0 60)
Pta4 (polar pta 0 14.75)
Pta5 (polar pta2 a 95)
Pta6 (polar pta4 a 90)
Ptss1 (polar pta 0 57)
Ptss (polar Ptss1 a 70)
Ptsg1 (polar pta 0 60)
Ptsg (polar Ptsg1 a 15)
Ess (getreal "\nCao do so sanh :")
Esn (getint "\nSo moc so sanh :")
Es (rtos Ess 2 2)
VL (getint "\nVat lieu ong <0.STK/1.uPVC/2.THEP/3.GANG/4.BE TONG/5.BTCT/6.SANH/7.HDPE>:")
D (getreal "\nDuong kinh ong :")
Ho (getreal "\nDo sau chon ong ban dau (m):")
kcong (getreal "\nThe hien MAT CAT DOC ONG :") ;;;;;;duyvietthem;;;;;;;;;;
i 0
LisCSS '("[STAKE NO.]" "TEÂN COÏC"
"[ANGLE OF DIRECTION]" "GOÙC QUAY MAËT BAÈNG (0%%176)"
"[ACCU. DISTANCE]" "KHOAÛNG CAÙCH COÄNG DOÀN (m)"
"[DIA - GRADIENT.]" "ÑÖÔØNG KÍNH - ÑOÄ DOÁC (%)"
"[DEPTH .]" "ÑOÄ SAÂU CHOÂN OÁNG (m)"
"[PIPE BOTTOM ELEV.]" "CAO ÑOÄ ÑAÙY OÁNG (m)"
"[GROUND ELEV.]" "CAO ÑOÄ MAËT ÑAÁT (m)"
"[DATUM.]" "COÁT SO SAÙNH")
LisTs '("Cot mat dat coc so" "Do doc doan ong giua hai coc"
"Khoang cach giua hai coc"
"Goc quay mat bang coc so")
LisVL '("STK" "uPVC" "THEÙP" "GANG" "BEÂ TOÂNG" "BTCT" "SAØNH" "HDPE")
Lismd nil Lisdo nil LisHo nil Lisi nil Lisio nil LisLkc nil LisLkco nil
LisTcoc nil LisGoc nil LisDeltaMD nil LisdeltaDO nil
)
(ofnap)
;--------
;-------------------------------------------
;data stake no.
(Princ "\n**Neu khong muon ky tu dau cua Coc la mot Chu Cai (VD:A, B...) ma la mot so thuc
(VD:1, 2...) thì nhan phim Space bar de tiep tuc**")
(setq k (getint "\nSo coc:")
CTc (getstring "\nKy tu dau cua coc:")
Tcoc (getint "\nTen coc dau tien hoac tiep theo:")
Ki Tcoc
i1 Tcoc
i2 Tcoc
i3 Tcoc
i4 Tcoc
i5 Tcoc
)
(repeat k
(progn
(setq
LisTcoc (cons Tcoc LisTcoc)
Tcoc (1+ Tcoc)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisTcoc (reverse LisTcoc))
;-------------------------------------------
;data ground level.
(repeat k
(progn
(print (nth 0 LisTs)) (prin1 CTc) (prin1 Ki)
(setq
Cmdo (getreal "\nCao do mat dat (m) :")
Cmd Cmdo
Lismd (cons Cmd Lismd)
Ki (1+ Ki)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lismd (reverse Lismd))
;-------------------------------------------
;data gradient.
(repeat (- k 1)
(progn
(print (nth 1 LisTs)) (prin1 CTc) (prin1 i1) (prin1 CTc) (prin1 (+ i1 1))
(setq
io (getreal "\nDo doc dat ong <+ doc xuoi/- doc nguoc> (%) :")
io1 (/ io 1) Lisi (cons io1 Lisi)
io2 (* io 1000) Lisio (cons io2 Lisio)
i1 (1+ i1)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lisi (reverse Lisi) Lisio (reverse Lisio))
;-------------------------------------------
;data distance.
(repeat (- k 1)
(progn
(print (nth 2 LisTs)) (prin1 CTc) (prin1 i2) (prin1 CTc) (prin1 (+ i2 1))
(setq
Kco (getreal "\nKhoang cach giua hai coc (m):");distance 2 station
Kc (* Kco Tn) ; distance
LisLkco (cons Kco LisLkco)
LisLkc (cons Kc LisLkc)
i2 (1+ i2)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisLkc (reverse LisLkc) LisLkco (reverse LisLkco))
;----------------------------------------
;mapcar Kcdo Kcd1
(setq n1 0 Kcd1 0)
;Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
;Kcd 0 LisLkcd1 (cons Kcd LisLkcd1))
(mapcar
'(lambda (Kco Kc)
(setq
Kcdo (+ Kcdo (nth n1 LisLkco)) LisLkcdo (cons Kcdo LisLkcdo)
Kcd (+ Kcd (nth n1 LisLkc)) LisLkcd1 (cons Kcd LisLkcd1)
Kcd1 (+ Kcd1 (nth n1 LisLkc)) LisLkcd (cons Kcd1 LisLkcd)
n1 (1+ n1)
)
);endlambda
LisLkco LisLkc
);endmapcar
(setq LisLkcdo (reverse LisLkcdo) LisLkcd1 (reverse LisLkcd1) LisLkcd (reverse LisLkcd))
;----------------------------------------
;mapcar deltaMD deltaDO
(setq n2 1
n3 0
LisHo (cons Ho LisHo)
Cdo (- (nth 0 Lismd) Ho) Lisdo (cons Cdo Lisdo)
DeltaMD (* (- (nth 0 Lismd) Ess) Td) DeltaDO (* (- (nth 0 Lismd) Ess Ho) Td)
LisDeltaMD (cons DeltaMD LisDeltaMD) LisDeltaDo (cons DeltaDo LisDeltaDo))
(mapcar
'(lambda (Cmd io1 Kco)
(setq
Cdo (- Cdo (* Kco (nth n3 Lisi))) Lisdo (cons Cdo Lisdo)
Ho (- (nth n2 Lismd) Cdo) LisHo (cons Ho LisHo)
DeltaMD (* (- (nth n2 Lismd) Ess) Td) LisDeltaMD (cons DeltaMD LisDeltaMD)
DeltaDO (- deltaDO (* (nth n3 LisLkco) (nth n3 Lisi) Td))
LisDeltaDO (cons DeltaDO LisDeltaDO)
n2 (1+ n2)
n3 (1+ n3)
)
);endlambda
Lismd Lisi LisLkco
);endmapcar
(setq LisDeltaMD (reverse LisDeltaMD) LisDeltaDO (reverse LisDeltaDO)
LisHo (reverse LisHo) Lisdo (reverse Lisdo))
;-------------------------------------------
;data cornor.
(repeat k
(progn
(print (nth 3 LisTs)) (prin1 CTc) (prin1 i3)
(setq
Gmb (getreal "\nGoc quay mat bang :")
LisGoc (cons Gmb LisGoc)
i3 (1+ i3)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisGoc (reverse LisGoc))
;-------------------------------------------
(Repeat 8
(setq Ptb (polar Pta a (* i 10))
Ptc (polar Pta1 a (* i 10))
ptd (polar pta2 a (+ (* i 10) 3.5))
)
(command
"layer" "s" "manh" ""
"line" Ptb Ptc ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "ml" ptd 2.5 0.0 (nth (+ (* i 2) 1) LisCSS)
)
(setq i (+ i 1))
);endrepeat
(command
"layer" "s" "manh" ""
"line" Pta Ptb ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" "" ""
"text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))
;------------------------
(COCSS)
;draw one
(setq LisPTcoc nil PTcoc (polar Pta1 a 5) LisPTcoc (cons PTcoc LisPTcoc)
LisPGmb nil PGmb (polar Ptss1 a 15) LisPGmb (cons PGmb LisPGmb)
LisPGmb nil PGmb (polar Ptsg1 a 17) LisPGmb (cons PGmb LisPGmb)
LisPGmb1 nil PGmb1 (polar Pta1 a 13) LisPGmb1 (cons PGmb1 LisPGmb1)
LisPKc nil PKc (polar Pta1 a 25) LisPKc (cons PKc LisPKc)
LisPdd nil Pdd (polar Pta1 a 30) LisPdd (cons Pdd LisPdd)
Pddi (polar pta1 a 30)
LisPho nil Pho (polar Pta1 a 45) LisPho (cons Pho LisPho)
LisPmd nil Pmd (polar Pta1 a 65) LisPmd (cons Pmd LisPmd)
LisPdo nil Pdo (polar Pta1 a 55) LisPdo (cons Pdo LisPdo)
LisPss nil Pss (polar Pta1 a 70) LisPss (cons Pss LisPss)
LisPsg nil Psg (polar Pta1 a 15) LisPsg (cons Psg LisPsg)
LisPssd nil LisPssd1 nil LisPssdo nil LisPssdo1 nil
V 0
)
(mapcar
'(lambda (Kc)
(setq
PTcoc (polar PTcoc 0 (nth V LisLkc)) LisPTcoc (cons PTcoc LisPTcoc)
PGmb (polar PGmb 0 (nth V LisLkc)) LisPGmb (cons PGmb LisPGmb)
PGmb1 (polar PGmb1 0 (nth V LisLkc)) LisPGmb1 (cons PGmb1 LisPGmb1)
PKc (polar PKc 0 (nth V LisLkc)) LisPKc (cons PKc LisPKc)
Pdd (polar Pdd 0 (nth V LisLkc)) LisPdd (cons Pdd LisPdd)
Pho (polar Pho 0 (nth V LisLkc)) LisPho (cons Pho LisPho)
Pmd (polar Pmd 0 (nth V LisLkc)) LisPmd (cons Pmd LisPmd)
Pdo (polar Pdo 0 (nth V LisLkc)) LisPdo (cons Pdo LisPdo)
Pss (polar Pss 0 (nth V LisLkc)) LisPss (cons Pss LisPss)
V (1+ V)
)
)
LisLkc
)
(setq LisPTcoc (reverse LisPTcoc)
LisPGmb (reverse LisPGmb) LisPGmb1 (reverse LisPGmb1)
LisPKc (reverse LisPKc)
LisPdd (reverse LisPdd)
LisPHo (reverse LisPHo) LisPmd (reverse LisPmd) LisPdo (reverse LisPdo)
LisPss (reverse LisPss)
V1 0)
;-----------
(mapcar
'(lambda (PTcoc PGmb PGmb1 PKc Pho Pmd Pdo Pss
Tcoc Gmb Kcdo Ho Cmd Cdo deltaMD deltaDO)
(setq
;parameter draw rotational corner
PGmb11 (polar PGmb1 0 -3.5) PGmb14 (polar PGmb1 0 3.5)
PGmb12 (polar PGmb1 a 2) PGmb122 (polar PGmb12 0 -3.5) PGmb13 (polar PGmb12 0 3.5);90
PGmb133 (polar PGmb13 a 2.5) PGmb144 (polar PGmb13 a 4.5)
PGmb2 (polar PGmb1 a 2) PGmb21 (polar PGmb2 0 -3.5);<180
PGmb22 (polar PGmb2 a45 4.5) PGmb23 (polar PGmb2 a45 6.5);<180
PGmb24 (polar PGmb2 0 3.5) PGmb25 (polar PGmb2 0 6);=180
PGmb26 (polar PGmb2 b45 4) PGmb27 (polar PGmb2 b45 6.5);>180
PGmb3 (polar PGmb1 a 2) PGmb31 (polar PGmb3 0 -3.5) PGmb32 (polar PGmb3 0 3.5);270
PGmb33 (polar PGmb32 c 2.5) PGmb34 (polar PGmb32 c 4.5)
;end draw rotational corner
;parameter comparation
Pssd (polar Pss a (nth V1 LisDeltaMD)) LisPssd (cons Pssd LisPssd)
Pssdo (polar Pss a (nth V1 LisDeltaDO)) LisPssdo (cons Pssdo LisPssdo))
(command
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PTcoc 4.5 0.0 (strcat CTc (itoa (nth V1 LisTcoc)))
"text" "j" "mc" PKc 2.2 90.0 (rtos (nth V1 LisLkcdo) 2 2)
"text" "j" "mc" Pho 2.2 90.0 (rtos (nth V1 LisHo) 2 2)
"text" "j" "mc" Pmd 2.2 90.0 (rtos (nth V1 Lismd) 2 2)
"text" "j" "mc" Pdo 2.2 90.0 (rtos (nth V1 Lisdo) 2 2)
"layer" "s" "chua" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
"text" "j" "mc" PGmb 2.0 0.0 (strcat (rtos (nth V1 LisGoc) 2 0) "%%d")
"layer" "s" "bao" ""
"circle" PTcoc "5"
"layer" "s" "giong" ""
"line" Pss Pssd ""
"layer" "s" "manh" "")
(cond
((= Gmb 90) (command "pline" PGmb122 PGmb13 PGmb133 "w" "1.0" "0" PGmb144 ""))
((< Gmb 180) (command "pline" PGmb21 PGmb2 PGmb22 "w" "1.0" "0" PGmb23 ""))
((= Gmb 180) (command "pline" PGmb21 PGmb24 "w" "1.0" "0" PGmb25 ""))
((or (and (> Gmb 180) (< Gmb 270)) (and (> Gmb 270) (< Gmb 360)))
(command "pline" PGmb21 PGmb2 PGmb26 "w" "1.0" "0" PGmb27 ""))
((= Gmb 270) (command "pline" PGmb31 PGmb32 PGmb33 "w" "1.0" "0" PGmb34 ""))
)
(setq V1 (1+ V1))
);endlambda
LisPTcoc LisPGmb LisPGmb1 LisPKc LisPho LisPmd LisPdo LisPss
LisTcoc LisGoc LisLkcdo LisHo Lismd Lisdo LisdeltaMD LisdeltaDO
);endmapcar (princ lis)
;-----
;draw two
(setq lisdd (cdr LisLkcd)
Pdd1 (polar Pddi a 3.5) Pdd2 (polar Pddi a 6.5) Pdd3 (polar Pddi a 10)
Pdd4 (polar Pddi a 5)
PKcd (polar Pta1 a 25)
)
(command "layer" "s" "manh" "" "line" pddi pdd3 "")
(setq V4 0)
(repeat (length Lisdd)
(setq
;parameter gradient
Pddi1 (polar Pddi 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi2 (polar Pdd3 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi3 (polar Pdd4 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pdd11 (polar Pdd1 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd12 (polar Pdd1 0 (- (nth V4 Lisdd) 10))
Pdd21 (polar Pdd2 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd22 (polar Pdd2 0 (- (nth V4 Lisdd) 10))
Pdd31 (polar Pdd3 0 (nth V4 Lisdd))
Pdd32 (polar Pddi 0 (nth V4 Lisdd))
Pdd41 (polar Pdd4 0 (nth V4 Lisdd))
PKcd1 (polar PKcd 0 (- (nth V4 Lisdd) (/ (nth V4 LisLkc) 2)))
)
(cond
((> (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi2 Pdd32 Pdd31 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((= (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi3 Pdd41 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((< (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi1 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd12 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd21 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
)
(setq V4 (1+ V4))
)
;--draws ground and pipe bottom level line
(setq
LisPssd (reverse LisPssd)
LisPssd1 (append (cdr LisPssd) (car LisPssd))
LisPssdo (reverse LisPssdo)
LisPssdo1 (append (cdr LisPssdo) (car LisPssdo))
V2 0 V3 0
)
;;;;;;doan nay di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;
(repeat 8
(setq Ptdao (polar Pta1 a 70)
Ptda1 (polar Ptdao c (* V3 10))
Ptda2 (polar Pss c (* V3 10)))
(command "layer" "s" "manh" "" "line" Ptda1 Ptda2 "")
(setq V3 (1+ V3))
);repeat;;;;;;;;;;;;;ket thuc doan di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;;;;;
(repeat (- (length LisPssd) 1)
(setq gocxeoa(angle (nth V2 LisPssdo) (nth V2 LisPssdo1)));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq a (polar (nth V2 LisPssdo) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq b (polar (nth V2 LisPssdo1) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(command
"layer" "s" "manh" ""
"line" (nth V2 LisPssd) (nth V2 LisPssd1) ""
"layer" "s" "ong" ""
"line" (nth V2 LisPssdo) (nth V2 LisPssdo1) ""
"line" a b "";;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
)
(chenkyhieudat) ;;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq V2 (1+ V2))
)

;--end draws ground and pipe bottom level line
(onap2)
);progn
);end function STD
;--------------------
;;;;;;;;;;;;;;duy viet them phan chen ky hieu dat;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chenkyhieudat ()
(setq daiab(distance (nth V2 LisPssd) (nth V2 LisPssd1)))
(setq gocxeo(angle (nth V2 LisPssd) (nth V2 LisPssd1)))
(setq solan (- (fix (/ daiab 30)) 1))
(setq c (polar (nth V2 LisPssd) gocxeo 30))
(command "layer" "s" "dat" "")
(command ".INSERT" "ky hieu dat 5" (nth V2 LisPssd) 1 1 (nth V2 LisPssd1))
(repeat solan
(command "copy" "last" "" (nth V2 LisPssd) c "")
)
);;;;;;;;;;;;;;ket thuc phan duy viet them;;;;;;;;;;;;;;;;;;;;;;

  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#466 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 02 October 2009 - 11:14 AM

Mình có lisp được một anh bạn cho (vẽ trắc dọc ống cấp nước). Lisp sử dụng rất tốt nhưng có những cái chưa hoàn thiện lắm và rất còn bất tiện cho người sử dụng
Đối với lisp mình chỉ mới bắt đầu tìm hiểu nên còn lơ mơ lắm. Có vấn đề muốn nhờ các bạn trên diễn đàn chỉ bảo thêm (mình chưa hiểu lắm đừng cười mình nha)
Mình trích một đoạn code (của đoạn code dưới) như thế này:
.........
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)

........
Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat
"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.
Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả


;--------------------------------
;;function set parameter
(defun Init ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "ANGBASE" 0)
);;
;--------------------------------
;;function return parameter
(defun Reinit ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 1)
(setvar "ANGBASE" 0)
)
;--------------------------------
;;function change degree to radian
(defun doi (a)
(* PI (/ a 180))
)
;--------------------------------
;function set corner by radian
(defun doi1 ()
(setq a 1.5707965 a45 0.78539825
b 3.141593 b45 -0.78539825
c 4.7123895
)
)
;--------------------------------
;;function change radian to degree
(defun doi2 (d)
(* 180 (/ d pi))
)
;;
;--------------------------------
; make layer
(defun taolop ()
(command
"-OSNAP" "OFF"
"layer" "m" "manh" "c" "252" "" "l" "continuous" "manh" "lw" "0.2" "" ""
"layer" "m" "giong" "c" "252" "" "l" "continuous" "giong" "lw" "0.2" "" ""
"layer" "m" "bao" "c" "1" "" "l" "continuous" "bao" "lw" "0.25" "" ""
"layer" "m" "ong" "c" "5" "ong" "l" "continuous" "ong" "lw" "0.3" "" ""
"layer" "m" "chua" "c" "3" "" "l" "continuous" "" ""
"layer" "m" "dat" "c" "16" "" "l" "continuous" "dat" "lw" "0.1" "" ""
"layer" "m" "chuv" "c" "3" "" "l" "continuous" "" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
)
)
;
;--------------------------------
;---------------------------------
;1 ENDP 2 MID 4 CEN 8 NODE 16 QUA 32 INT 64 INS 128 PER 256 TAN 512 NEA 1024 QUI
;;ONAP ENDP INT(MID) NEAR
(defun onap ()
(setvar "OSMODE" (+ 1 32 512))
)
;;;;ONAP ENDP INT(MID) CEN
(defun onap1 ()
(setvar "OSMODE" (+ 1 4 32))
)
;;;
;;;;ONAP ENDP INT(MID) CEN
(defun onap2 ()
(setvar "OSMODE" (+ 1 2 4 16 32 128 512))
)
;;;;;;
(defun ofnap ()
(command "-OSNAP" "OFF" )
)
;----------------------------(ofnap) (onap2)
(defun COCSS()
(doi1)
(setq
i 1
j 0
Ess1 (+ Ess 1)
Ptssx (polar Ptss 0 -1) Ptssx1 (polar Ptssx a (* Esn Td))
Ptssy (polar Ptss 0 1) Ptssy1 (polar Ptssy a (* Esn Td))
)
(Repeat Esn
(setq Ess2 (rtos Ess1 2 2)
Ptss2 (polar Ptss 0 (* i 0.5))
Ptss21 (polar Ptss2 a (* j Td)) Ptss22 (polar Ptss21 a Td)
Ptss3 (polar Ptss 0 -1)
Ptss31 (polar Ptss3 a (+ (* j Td) Td)) Ptss32 (polar Ptss31 0 -5)
Ptss33 (polar Ptss32 0 -1)
)
(command
"layer" "s" "manh" ""
"pline" Ptss21 "w" 1.0 1.0 Ptss22 ""
"line" Ptss31 Ptss32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mr" Ptss33 2.5 0.0 (strcat Ess2)
)
(setq
i (* i -1)
j (+ j 1)
Ess1 (+ Ess1 1)
)
);endrepeat
(command "layer" "s" "manh" "" "pline" Ptssx "w" 0.0 0.0 Ptssx1 Ptssy1 Ptssy ""
)
);end function comparation (princ lis)
;==========================
;function main
(defun C:STD ()
(setvar "dimzin" 0)
(Init)
(taolop)
(doi1)
;-----------------------------------------
;-----------------------------------------
(Princ "\n**Day la chuong trinh ve TRAC DOC duoc viet boi Anh NGUYEN NGOC QUANG**")
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)
;-----------------------------------------
(setq LisLkcd1 nil LisLkcd nil
LisLkcdo nil)
(initget "Moi Tieptuc")
(Princ "\n")
(setq Ansertt (getint "\nVe moi hay tiep tuc <1.Moi/2.Tieptuc> :")
)
(cond
((= Ansertt 1)
(setq
Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
Kcd 0 LisLkcd1 (cons Kcd LisLkcd1)
LisLkcd LisLkcdo)
)
((= Ansertt 2)
(setq
Kcdo (getreal "\nChieu dai tai coc tiep theo (m):");distance 2 station
Kcd (* Kcdo Tn) ; distance
LisLkcd (cons (- Kcdo Kcdo) LisLkcd)
LisLkcdo (cons Kcdo LisLkcdo)
LisLkcd1 (cons Kcd LisLkcd1))
)
)
(progn
;------------------------------------(princ lis)
(onap)
(setq Pta (getpoint "\nChon diem bat dau ve :")
Pta1 (polar pta 0 60)
Pta2 (polar pta 0 5)
Pta3 (polar pta 0 60)
Pta4 (polar pta 0 14.75)
Pta5 (polar pta2 a 95)
Pta6 (polar pta4 a 90)
Ptss1 (polar pta 0 57)
Ptss (polar Ptss1 a 70)
Ptsg1 (polar pta 0 60)
Ptsg (polar Ptsg1 a 15)
Ess (getreal "\nCao do so sanh :")
Esn (getint "\nSo moc so sanh :")
Es (rtos Ess 2 2)
VL (getint "\nVat lieu ong <0.STK/1.uPVC/2.THEP/3.GANG/4.BE TONG/5.BTCT/6.SANH/7.HDPE>:")
D (getreal "\nDuong kinh ong :")
Ho (getreal "\nDo sau chon ong ban dau (m):")
kcong (getreal "\nThe hien MAT CAT DOC ONG :") ;;;;;;duyvietthem;;;;;;;;;;
i 0
LisCSS '("[STAKE NO.]" "TEÂN COÏC"
"[ANGLE OF DIRECTION]" "GOÙC QUAY MAËT BAÈNG (0%%176)"
"[ACCU. DISTANCE]" "KHOAÛNG CAÙCH COÄNG DOÀN (m)"
"[DIA - GRADIENT.]" "ÑÖÔØNG KÍNH - ÑOÄ DOÁC (%)"
"[DEPTH .]" "ÑOÄ SAÂU CHOÂN OÁNG (m)"
"[PIPE BOTTOM ELEV.]" "CAO ÑOÄ ÑAÙY OÁNG (m)"
"[GROUND ELEV.]" "CAO ÑOÄ MAËT ÑAÁT (m)"
"[DATUM.]" "COÁT SO SAÙNH")
LisTs '("Cot mat dat coc so" "Do doc doan ong giua hai coc"
"Khoang cach giua hai coc"
"Goc quay mat bang coc so")
LisVL '("STK" "uPVC" "THEÙP" "GANG" "BEÂ TOÂNG" "BTCT" "SAØNH" "HDPE")
Lismd nil Lisdo nil LisHo nil Lisi nil Lisio nil LisLkc nil LisLkco nil
LisTcoc nil LisGoc nil LisDeltaMD nil LisdeltaDO nil
)
(ofnap)
;--------
;-------------------------------------------
;data stake no.
(Princ "\n**Neu khong muon ky tu dau cua Coc la mot Chu Cai (VD:A, B...) ma la mot so thuc
(VD:1, 2...) thì nhan phim Space bar de tiep tuc**")
(setq k (getint "\nSo coc:")
CTc (getstring "\nKy tu dau cua coc:")
Tcoc (getint "\nTen coc dau tien hoac tiep theo:")
Ki Tcoc
i1 Tcoc
i2 Tcoc
i3 Tcoc
i4 Tcoc
i5 Tcoc
)
(repeat k
(progn
(setq
LisTcoc (cons Tcoc LisTcoc)
Tcoc (1+ Tcoc)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisTcoc (reverse LisTcoc))
;-------------------------------------------
;data ground level.
(repeat k
(progn
(print (nth 0 LisTs)) (prin1 CTc) (prin1 Ki)
(setq
Cmdo (getreal "\nCao do mat dat (m) :")
Cmd Cmdo
Lismd (cons Cmd Lismd)
Ki (1+ Ki)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lismd (reverse Lismd))
;-------------------------------------------
;data gradient.
(repeat (- k 1)
(progn
(print (nth 1 LisTs)) (prin1 CTc) (prin1 i1) (prin1 CTc) (prin1 (+ i1 1))
(setq
io (getreal "\nDo doc dat ong <+ doc xuoi/- doc nguoc> (%) :")
io1 (/ io 1) Lisi (cons io1 Lisi)
io2 (* io 1000) Lisio (cons io2 Lisio)
i1 (1+ i1)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lisi (reverse Lisi) Lisio (reverse Lisio))
;-------------------------------------------
;data distance.
(repeat (- k 1)
(progn
(print (nth 2 LisTs)) (prin1 CTc) (prin1 i2) (prin1 CTc) (prin1 (+ i2 1))
(setq
Kco (getreal "\nKhoang cach giua hai coc (m):");distance 2 station
Kc (* Kco Tn) ; distance
LisLkco (cons Kco LisLkco)
LisLkc (cons Kc LisLkc)
i2 (1+ i2)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisLkc (reverse LisLkc) LisLkco (reverse LisLkco))
;----------------------------------------
;mapcar Kcdo Kcd1
(setq n1 0 Kcd1 0)
;Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
;Kcd 0 LisLkcd1 (cons Kcd LisLkcd1))
(mapcar
'(lambda (Kco Kc)
(setq
Kcdo (+ Kcdo (nth n1 LisLkco)) LisLkcdo (cons Kcdo LisLkcdo)
Kcd (+ Kcd (nth n1 LisLkc)) LisLkcd1 (cons Kcd LisLkcd1)
Kcd1 (+ Kcd1 (nth n1 LisLkc)) LisLkcd (cons Kcd1 LisLkcd)
n1 (1+ n1)
)
);endlambda
LisLkco LisLkc
);endmapcar
(setq LisLkcdo (reverse LisLkcdo) LisLkcd1 (reverse LisLkcd1) LisLkcd (reverse LisLkcd))
;----------------------------------------
;mapcar deltaMD deltaDO
(setq n2 1
n3 0
LisHo (cons Ho LisHo)
Cdo (- (nth 0 Lismd) Ho) Lisdo (cons Cdo Lisdo)
DeltaMD (* (- (nth 0 Lismd) Ess) Td) DeltaDO (* (- (nth 0 Lismd) Ess Ho) Td)
LisDeltaMD (cons DeltaMD LisDeltaMD) LisDeltaDo (cons DeltaDo LisDeltaDo))
(mapcar
'(lambda (Cmd io1 Kco)
(setq
Cdo (- Cdo (* Kco (nth n3 Lisi))) Lisdo (cons Cdo Lisdo)
Ho (- (nth n2 Lismd) Cdo) LisHo (cons Ho LisHo)
DeltaMD (* (- (nth n2 Lismd) Ess) Td) LisDeltaMD (cons DeltaMD LisDeltaMD)
DeltaDO (- deltaDO (* (nth n3 LisLkco) (nth n3 Lisi) Td))
LisDeltaDO (cons DeltaDO LisDeltaDO)
n2 (1+ n2)
n3 (1+ n3)
)
);endlambda
Lismd Lisi LisLkco
);endmapcar
(setq LisDeltaMD (reverse LisDeltaMD) LisDeltaDO (reverse LisDeltaDO)
LisHo (reverse LisHo) Lisdo (reverse Lisdo))
;-------------------------------------------
;data cornor.
(repeat k
(progn
(print (nth 3 LisTs)) (prin1 CTc) (prin1 i3)
(setq
Gmb (getreal "\nGoc quay mat bang :")
LisGoc (cons Gmb LisGoc)
i3 (1+ i3)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisGoc (reverse LisGoc))
;-------------------------------------------
(Repeat 8
(setq Ptb (polar Pta a (* i 10))
Ptc (polar Pta1 a (* i 10))
ptd (polar pta2 a (+ (* i 10) 3.5))
)
(command
"layer" "s" "manh" ""
"line" Ptb Ptc ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "ml" ptd 2.5 0.0 (nth (+ (* i 2) 1) LisCSS)
)
(setq i (+ i 1))
);endrepeat
(command
"layer" "s" "manh" ""
"line" Pta Ptb ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" "" ""
"text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))
;------------------------
(COCSS)
;draw one
(setq LisPTcoc nil PTcoc (polar Pta1 a 5) LisPTcoc (cons PTcoc LisPTcoc)
LisPGmb nil PGmb (polar Ptss1 a 15) LisPGmb (cons PGmb LisPGmb)
LisPGmb nil PGmb (polar Ptsg1 a 17) LisPGmb (cons PGmb LisPGmb)
LisPGmb1 nil PGmb1 (polar Pta1 a 13) LisPGmb1 (cons PGmb1 LisPGmb1)
LisPKc nil PKc (polar Pta1 a 25) LisPKc (cons PKc LisPKc)
LisPdd nil Pdd (polar Pta1 a 30) LisPdd (cons Pdd LisPdd)
Pddi (polar pta1 a 30)
LisPho nil Pho (polar Pta1 a 45) LisPho (cons Pho LisPho)
LisPmd nil Pmd (polar Pta1 a 65) LisPmd (cons Pmd LisPmd)
LisPdo nil Pdo (polar Pta1 a 55) LisPdo (cons Pdo LisPdo)
LisPss nil Pss (polar Pta1 a 70) LisPss (cons Pss LisPss)
LisPsg nil Psg (polar Pta1 a 15) LisPsg (cons Psg LisPsg)
LisPssd nil LisPssd1 nil LisPssdo nil LisPssdo1 nil
V 0
)
(mapcar
'(lambda (Kc)
(setq
PTcoc (polar PTcoc 0 (nth V LisLkc)) LisPTcoc (cons PTcoc LisPTcoc)
PGmb (polar PGmb 0 (nth V LisLkc)) LisPGmb (cons PGmb LisPGmb)
PGmb1 (polar PGmb1 0 (nth V LisLkc)) LisPGmb1 (cons PGmb1 LisPGmb1)
PKc (polar PKc 0 (nth V LisLkc)) LisPKc (cons PKc LisPKc)
Pdd (polar Pdd 0 (nth V LisLkc)) LisPdd (cons Pdd LisPdd)
Pho (polar Pho 0 (nth V LisLkc)) LisPho (cons Pho LisPho)
Pmd (polar Pmd 0 (nth V LisLkc)) LisPmd (cons Pmd LisPmd)
Pdo (polar Pdo 0 (nth V LisLkc)) LisPdo (cons Pdo LisPdo)
Pss (polar Pss 0 (nth V LisLkc)) LisPss (cons Pss LisPss)
V (1+ V)
)
)
LisLkc
)
(setq LisPTcoc (reverse LisPTcoc)
LisPGmb (reverse LisPGmb) LisPGmb1 (reverse LisPGmb1)
LisPKc (reverse LisPKc)
LisPdd (reverse LisPdd)
LisPHo (reverse LisPHo) LisPmd (reverse LisPmd) LisPdo (reverse LisPdo)
LisPss (reverse LisPss)
V1 0)
;-----------
(mapcar
'(lambda (PTcoc PGmb PGmb1 PKc Pho Pmd Pdo Pss
Tcoc Gmb Kcdo Ho Cmd Cdo deltaMD deltaDO)
(setq
;parameter draw rotational corner
PGmb11 (polar PGmb1 0 -3.5) PGmb14 (polar PGmb1 0 3.5)
PGmb12 (polar PGmb1 a 2) PGmb122 (polar PGmb12 0 -3.5) PGmb13 (polar PGmb12 0 3.5);90
PGmb133 (polar PGmb13 a 2.5) PGmb144 (polar PGmb13 a 4.5)
PGmb2 (polar PGmb1 a 2) PGmb21 (polar PGmb2 0 -3.5);<180
PGmb22 (polar PGmb2 a45 4.5) PGmb23 (polar PGmb2 a45 6.5);<180
PGmb24 (polar PGmb2 0 3.5) PGmb25 (polar PGmb2 0 6);=180
PGmb26 (polar PGmb2 b45 4) PGmb27 (polar PGmb2 b45 6.5);>180
PGmb3 (polar PGmb1 a 2) PGmb31 (polar PGmb3 0 -3.5) PGmb32 (polar PGmb3 0 3.5);270
PGmb33 (polar PGmb32 c 2.5) PGmb34 (polar PGmb32 c 4.5)
;end draw rotational corner
;parameter comparation
Pssd (polar Pss a (nth V1 LisDeltaMD)) LisPssd (cons Pssd LisPssd)
Pssdo (polar Pss a (nth V1 LisDeltaDO)) LisPssdo (cons Pssdo LisPssdo))
(command
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PTcoc 4.5 0.0 (strcat CTc (itoa (nth V1 LisTcoc)))
"text" "j" "mc" PKc 2.2 90.0 (rtos (nth V1 LisLkcdo) 2 2)
"text" "j" "mc" Pho 2.2 90.0 (rtos (nth V1 LisHo) 2 2)
"text" "j" "mc" Pmd 2.2 90.0 (rtos (nth V1 Lismd) 2 2)
"text" "j" "mc" Pdo 2.2 90.0 (rtos (nth V1 Lisdo) 2 2)
"layer" "s" "chua" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
"text" "j" "mc" PGmb 2.0 0.0 (strcat (rtos (nth V1 LisGoc) 2 0) "%%d")
"layer" "s" "bao" ""
"circle" PTcoc "5"
"layer" "s" "giong" ""
"line" Pss Pssd ""
"layer" "s" "manh" "")
(cond
((= Gmb 90) (command "pline" PGmb122 PGmb13 PGmb133 "w" "1.0" "0" PGmb144 ""))
((< Gmb 180) (command "pline" PGmb21 PGmb2 PGmb22 "w" "1.0" "0" PGmb23 ""))
((= Gmb 180) (command "pline" PGmb21 PGmb24 "w" "1.0" "0" PGmb25 ""))
((or (and (> Gmb 180) (< Gmb 270)) (and (> Gmb 270) (< Gmb 360)))
(command "pline" PGmb21 PGmb2 PGmb26 "w" "1.0" "0" PGmb27 ""))
((= Gmb 270) (command "pline" PGmb31 PGmb32 PGmb33 "w" "1.0" "0" PGmb34 ""))
)
(setq V1 (1+ V1))
);endlambda
LisPTcoc LisPGmb LisPGmb1 LisPKc LisPho LisPmd LisPdo LisPss
LisTcoc LisGoc LisLkcdo LisHo Lismd Lisdo LisdeltaMD LisdeltaDO
);endmapcar (princ lis)
;-----
;draw two
(setq lisdd (cdr LisLkcd)
Pdd1 (polar Pddi a 3.5) Pdd2 (polar Pddi a 6.5) Pdd3 (polar Pddi a 10)
Pdd4 (polar Pddi a 5)
PKcd (polar Pta1 a 25)
)
(command "layer" "s" "manh" "" "line" pddi pdd3 "")
(setq V4 0)
(repeat (length Lisdd)
(setq
;parameter gradient
Pddi1 (polar Pddi 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi2 (polar Pdd3 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi3 (polar Pdd4 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pdd11 (polar Pdd1 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd12 (polar Pdd1 0 (- (nth V4 Lisdd) 10))
Pdd21 (polar Pdd2 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd22 (polar Pdd2 0 (- (nth V4 Lisdd) 10))
Pdd31 (polar Pdd3 0 (nth V4 Lisdd))
Pdd32 (polar Pddi 0 (nth V4 Lisdd))
Pdd41 (polar Pdd4 0 (nth V4 Lisdd))
PKcd1 (polar PKcd 0 (- (nth V4 Lisdd) (/ (nth V4 LisLkc) 2)))
)
(cond
((> (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi2 Pdd32 Pdd31 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((= (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi3 Pdd41 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((< (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi1 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd12 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd21 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
)
(setq V4 (1+ V4))
)
;--draws ground and pipe bottom level line
(setq
LisPssd (reverse LisPssd)
LisPssd1 (append (cdr LisPssd) (car LisPssd))
LisPssdo (reverse LisPssdo)
LisPssdo1 (append (cdr LisPssdo) (car LisPssdo))
V2 0 V3 0
)
;;;;;;doan nay di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;
(repeat 8
(setq Ptdao (polar Pta1 a 70)
Ptda1 (polar Ptdao c (* V3 10))
Ptda2 (polar Pss c (* V3 10)))
(command "layer" "s" "manh" "" "line" Ptda1 Ptda2 "")
(setq V3 (1+ V3))
);repeat;;;;;;;;;;;;;ket thuc doan di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;;;;;
(repeat (- (length LisPssd) 1)
(setq gocxeoa(angle (nth V2 LisPssdo) (nth V2 LisPssdo1)));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq a (polar (nth V2 LisPssdo) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq b (polar (nth V2 LisPssdo1) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(command
"layer" "s" "manh" ""
"line" (nth V2 LisPssd) (nth V2 LisPssd1) ""
"layer" "s" "ong" ""
"line" (nth V2 LisPssdo) (nth V2 LisPssdo1) ""
"line" a b "";;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
)
(chenkyhieudat) ;;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq V2 (1+ V2))
)

;--end draws ground and pipe bottom level line
(onap2)
);progn
);end function STD
;--------------------
;;;;;;;;;;;;;;duy viet them phan chen ky hieu dat;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chenkyhieudat ()
(setq daiab(distance (nth V2 LisPssd) (nth V2 LisPssd1)))
(setq gocxeo(angle (nth V2 LisPssd) (nth V2 LisPssd1)))
(setq solan (- (fix (/ daiab 30)) 1))
(setq c (polar (nth V2 LisPssd) gocxeo 30))
(command "layer" "s" "dat" "")
(command ".INSERT" "ky hieu dat 5" (nth V2 LisPssd) 1 1 (nth V2 LisPssd1))
(repeat solan
(command "copy" "last" "" (nth V2 LisPssd) c "")
)
);;;;;;;;;;;;;;ket thuc phan duy viet them;;;;;;;;;;;;;;;;;;;;;;

Không biết mình hỏi có vô duyên không? (nếu có gì mong các bạn thông cảm cho mình), thật tình mình không hiểu mấy về lisp nên muốn được học hỏi thêm. Nhờ các bạn hướng dẫn giúp. Cảm ơn tất cả
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#467 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 02 October 2009 - 04:27 PM

........................
Mình trích một đoạn code (của đoạn code dưới) như thế này:
.........
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)

........
Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat
"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.
Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả
........................

Bạn viết khó hiểu quá !
Cần trình bày sao cho nguời đọc hiểu thì mới giúp bạn đuợc.
về hàm STRCAT
đọan ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln)) dư 1 dấu mở ngoặc
-> (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
  • 0

#468 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 02 October 2009 - 05:17 PM

Bạn viết khó hiểu quá !
Cần trình bày sao cho nguời đọc hiểu thì mới giúp bạn đuợc.
về hàm STRCAT
đọan ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln)) dư 1 dấu mở ngoặc
-> (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))

Cảm ơn bạn đã quan tâm. Ý mình là thế này (đoạn lisp trên bị lỗi khi mình dùng hàm strcat)
Mình có đoạn lisp như trên mình đã gửi và kèm theo trích đoạn để các bạn dễ hình dung
Mình muốn khi nhập giá trị tỷ lệ ngang và tỷ lệ đứng (khi thực hiện lệnh tại dòng command) thì lisp lấy giá trị nhập tự kết nối chuỗi (hàm strcat) và ghi ra màn hình (cụ thể ở đây là: tỷ lệ ngang: 1/500 hoặc 1/1000; tỷ lệ đứng : 1/100 hoặc 1/200)
Bạn có thể xem thêm lisp mình gửi kèm và hướng dẫn thêm giúp mình. Cảm ơn bạn nhiều
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#469 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 02 October 2009 - 09:29 PM

Mình muốn khi nhập giá trị tỷ lệ ngang và tỷ lệ đứng (khi thực hiện lệnh tại dòng command) thì lisp lấy giá trị nhập tự kết nối chuỗi (hàm strcat) và ghi ra màn hình (cụ thể ở đây là: tỷ lệ ngang: 1/500 hoặc 1/1000; tỷ lệ đứng : 1/100 hoặc 1/200)
Bạn có thể xem thêm lisp mình gửi kèm và hướng dẫn thêm giúp mình. Cảm ơn bạn nhiều

Nếu chỉ muốn ghi ra màn hình thì bạn làm thế này
(princ (strcat "\nTY LE NGANG: 1/" (rtos Tln)))
(princ (strcat "\nTY LE DUNG: 1/" (rtos Tld)))
Hy vọng đúng ý bạn
-------------------------------------------------------------------------------------
P/S: Các tiền bối xem dùm em chữ ký
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#470 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 03 October 2009 - 06:52 AM

Nếu chỉ muốn ghi ra màn hình thì bạn làm thế này
(princ (strcat "\nTY LE NGANG: 1/" (rtos Tln)))
(princ (strcat "\nTY LE DUNG: 1/" (rtos Tld)))
Hy vọng đúng ý bạn
-------------------------------------------------------------------------------------
P/S: Các tiền bối xem dùm em chữ ký

Cảm ơn bạn đã quan tâm. Nhưng khi sửa như bạn thì lisp càng tồi tệ hơn (đâu giúp ích được gì cho mình). Nếu bạn muốn giúp thì bạn phải đọc kỹ nội dung mình gửi chứ. Dù sao cũng cảm ơn bạn.
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#471 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 03 October 2009 - 07:38 AM

Cảm ơn bạn đã quan tâm. Nhưng khi sửa như bạn thì lisp càng tồi tệ hơn (đâu giúp ích được gì cho mình). Nếu bạn muốn giúp thì bạn phải đọc kỹ nội dung mình gửi chứ. Dù sao cũng cảm ơn bạn.

Vậy chắc thế này:
(setq Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x=")
Tld (getint "\nTy le dung 1/y (100, 200); y=")
Tn(/ 1000.0 TLN)
Td(/ 1000.0 TLD)
)
(command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos TLN)))
(command "text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos TLD)))

(Pta5 và Pta6 bạn đã có)
--------------------------------------------------------------------------------------------
P/S:

Bạn viết khó hiểu quá !
Cần trình bày sao cho nguời đọc hiểu thì mới giúp bạn đuợc.


  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#472 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 03 October 2009 - 10:58 AM

Vậy chắc thế này:
(setq Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x=")
Tld (getint "\nTy le dung 1/y (100, 200); y=")
Tn(/ 1000.0 TLN)
Td(/ 1000.0 TLD)
)
(command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos TLN)))
(command "text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos TLD)))

(Pta5 và Pta6 bạn đã có)
--------------------------------------------------------------------------------------------
P/S:

Dòng màu đỏ là trong lisp trên mình gửi đã có rồi (bạn đọc toàn bộ nội dung bài mình gửi phía trên là bạn hiểu). Nếu được nhờ bạn giúp mình. Cảm ơn bạn
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#473 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 03 October 2009 - 03:07 PM

Mình có lisp được một anh bạn cho (vẽ trắc dọc ống cấp nước). Lisp sử dụng rất tốt nhưng có những cái chưa hoàn thiện lắm và rất còn bất tiện cho người sử dụng
Đối với lisp mình chỉ mới bắt đầu tìm hiểu nên còn lơ mơ lắm. Có vấn đề muốn nhờ các bạn trên diễn đàn chỉ bảo thêm (mình chưa hiểu lắm đừng cười mình nha)
Mình trích một đoạn code (của đoạn code dưới) như thế này:
.........
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)

........
Mình muốn gán tỷ lệ đứng và ngang bằng cách dùng hàm strcat
"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

nhưng khi nhập tỷ lệ đứng và ngang xong thì thoát luôn.
Nhờ các bạn giải thích và hướng dẫn giúp mình. Cảm ơn tất cả


;--------------------------------
;;function set parameter
(defun Init ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 0)
(setvar "ANGBASE" 0)
);;
;--------------------------------
;;function return parameter
(defun Reinit ()
(setvar "BLIPMODE" 0)
(setvar "CMDECHO" 1)
(setvar "ANGBASE" 0)
)
;--------------------------------
;;function change degree to radian
(defun doi (a)
(* PI (/ a 180))
)
;--------------------------------
;function set corner by radian
(defun doi1 ()
(setq a 1.5707965 a45 0.78539825
b 3.141593 b45 -0.78539825
c 4.7123895
)
)
;--------------------------------
;;function change radian to degree
(defun doi2 (d)
(* 180 (/ d pi))
)
;;
;--------------------------------
; make layer
(defun taolop ()
(command
"-OSNAP" "OFF"
"layer" "m" "manh" "c" "252" "" "l" "continuous" "manh" "lw" "0.2" "" ""
"layer" "m" "giong" "c" "252" "" "l" "continuous" "giong" "lw" "0.2" "" ""
"layer" "m" "bao" "c" "1" "" "l" "continuous" "bao" "lw" "0.25" "" ""
"layer" "m" "ong" "c" "5" "ong" "l" "continuous" "ong" "lw" "0.3" "" ""
"layer" "m" "chua" "c" "3" "" "l" "continuous" "" ""
"layer" "m" "dat" "c" "16" "" "l" "continuous" "dat" "lw" "0.1" "" ""
"layer" "m" "chuv" "c" "3" "" "l" "continuous" "" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
)
)
;
;--------------------------------
;---------------------------------
;1 ENDP 2 MID 4 CEN 8 NODE 16 QUA 32 INT 64 INS 128 PER 256 TAN 512 NEA 1024 QUI
;;ONAP ENDP INT(MID) NEAR
(defun onap ()
(setvar "OSMODE" (+ 1 32 512))
)
;;;;ONAP ENDP INT(MID) CEN
(defun onap1 ()
(setvar "OSMODE" (+ 1 4 32))
)
;;;
;;;;ONAP ENDP INT(MID) CEN
(defun onap2 ()
(setvar "OSMODE" (+ 1 2 4 16 32 128 512))
)
;;;;;;
(defun ofnap ()
(command "-OSNAP" "OFF" )
)
;----------------------------(ofnap) (onap2)
(defun COCSS()
(doi1)
(setq
i 1
j 0
Ess1 (+ Ess 1)
Ptssx (polar Ptss 0 -1) Ptssx1 (polar Ptssx a (* Esn Td))
Ptssy (polar Ptss 0 1) Ptssy1 (polar Ptssy a (* Esn Td))
)
(Repeat Esn
(setq Ess2 (rtos Ess1 2 2)
Ptss2 (polar Ptss 0 (* i 0.5))
Ptss21 (polar Ptss2 a (* j Td)) Ptss22 (polar Ptss21 a Td)
Ptss3 (polar Ptss 0 -1)
Ptss31 (polar Ptss3 a (+ (* j Td) Td)) Ptss32 (polar Ptss31 0 -5)
Ptss33 (polar Ptss32 0 -1)
)
(command
"layer" "s" "manh" ""
"pline" Ptss21 "w" 1.0 1.0 Ptss22 ""
"line" Ptss31 Ptss32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mr" Ptss33 2.5 0.0 (strcat Ess2)
)
(setq
i (* i -1)
j (+ j 1)
Ess1 (+ Ess1 1)
)
);endrepeat
(command "layer" "s" "manh" "" "pline" Ptssx "w" 0.0 0.0 Ptssx1 Ptssy1 Ptssy ""
)
);end function comparation (princ lis)
;==========================
;function main
(defun C:STD ()
(setvar "dimzin" 0)
(Init)
(taolop)
(doi1)
;-----------------------------------------
;-----------------------------------------
(Princ "\n**Day la chuong trinh ve TRAC DOC duoc viet boi Anh NGUYEN NGOC QUANG**")
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)
;-----------------------------------------
(setq LisLkcd1 nil LisLkcd nil
LisLkcdo nil)
(initget "Moi Tieptuc")
(Princ "\n")
(setq Ansertt (getint "\nVe moi hay tiep tuc <1.Moi/2.Tieptuc> :")
)
(cond
((= Ansertt 1)
(setq
Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
Kcd 0 LisLkcd1 (cons Kcd LisLkcd1)
LisLkcd LisLkcdo)
)
((= Ansertt 2)
(setq
Kcdo (getreal "\nChieu dai tai coc tiep theo (m):");distance 2 station
Kcd (* Kcdo Tn) ; distance
LisLkcd (cons (- Kcdo Kcdo) LisLkcd)
LisLkcdo (cons Kcdo LisLkcdo)
LisLkcd1 (cons Kcd LisLkcd1))
)
)
(progn
;------------------------------------(princ lis)
(onap)
(setq Pta (getpoint "\nChon diem bat dau ve :")
Pta1 (polar pta 0 60)
Pta2 (polar pta 0 5)
Pta3 (polar pta 0 60)
Pta4 (polar pta 0 14.75)
Pta5 (polar pta2 a 95)
Pta6 (polar pta4 a 90)
Ptss1 (polar pta 0 57)
Ptss (polar Ptss1 a 70)
Ptsg1 (polar pta 0 60)
Ptsg (polar Ptsg1 a 15)
Ess (getreal "\nCao do so sanh :")
Esn (getint "\nSo moc so sanh :")
Es (rtos Ess 2 2)
VL (getint "\nVat lieu ong <0.STK/1.uPVC/2.THEP/3.GANG/4.BE TONG/5.BTCT/6.SANH/7.HDPE>:")
D (getreal "\nDuong kinh ong :")
Ho (getreal "\nDo sau chon ong ban dau (m):")
kcong (getreal "\nThe hien MAT CAT DOC ONG :") ;;;;;;duyvietthem;;;;;;;;;;
i 0
LisCSS '("[STAKE NO.]" "TEÂN COÏC"
"[ANGLE OF DIRECTION]" "GOÙC QUAY MAËT BAÈNG (0%%176)"
"[ACCU. DISTANCE]" "KHOAÛNG CAÙCH COÄNG DOÀN (m)"
"[DIA - GRADIENT.]" "ÑÖÔØNG KÍNH - ÑOÄ DOÁC (%)"
"[DEPTH .]" "ÑOÄ SAÂU CHOÂN OÁNG (m)"
"[PIPE BOTTOM ELEV.]" "CAO ÑOÄ ÑAÙY OÁNG (m)"
"[GROUND ELEV.]" "CAO ÑOÄ MAËT ÑAÁT (m)"
"[DATUM.]" "COÁT SO SAÙNH")
LisTs '("Cot mat dat coc so" "Do doc doan ong giua hai coc"
"Khoang cach giua hai coc"
"Goc quay mat bang coc so")
LisVL '("STK" "uPVC" "THEÙP" "GANG" "BEÂ TOÂNG" "BTCT" "SAØNH" "HDPE")
Lismd nil Lisdo nil LisHo nil Lisi nil Lisio nil LisLkc nil LisLkco nil
LisTcoc nil LisGoc nil LisDeltaMD nil LisdeltaDO nil
)
(ofnap)
;--------
;-------------------------------------------
;data stake no.
(Princ "\n**Neu khong muon ky tu dau cua Coc la mot Chu Cai (VD:A, B...) ma la mot so thuc
(VD:1, 2...) thì nhan phim Space bar de tiep tuc**")
(setq k (getint "\nSo coc:")
CTc (getstring "\nKy tu dau cua coc:")
Tcoc (getint "\nTen coc dau tien hoac tiep theo:")
Ki Tcoc
i1 Tcoc
i2 Tcoc
i3 Tcoc
i4 Tcoc
i5 Tcoc
)
(repeat k
(progn
(setq
LisTcoc (cons Tcoc LisTcoc)
Tcoc (1+ Tcoc)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisTcoc (reverse LisTcoc))
;-------------------------------------------
;data ground level.
(repeat k
(progn
(print (nth 0 LisTs)) (prin1 CTc) (prin1 Ki)
(setq
Cmdo (getreal "\nCao do mat dat (m) :")
Cmd Cmdo
Lismd (cons Cmd Lismd)
Ki (1+ Ki)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lismd (reverse Lismd))
;-------------------------------------------
;data gradient.
(repeat (- k 1)
(progn
(print (nth 1 LisTs)) (prin1 CTc) (prin1 i1) (prin1 CTc) (prin1 (+ i1 1))
(setq
io (getreal "\nDo doc dat ong <+ doc xuoi/- doc nguoc> (%) :")
io1 (/ io 1) Lisi (cons io1 Lisi)
io2 (* io 1000) Lisio (cons io2 Lisio)
i1 (1+ i1)
)
);endprogn
);endrepeat;(princ Lis)
(setq Lisi (reverse Lisi) Lisio (reverse Lisio))
;-------------------------------------------
;data distance.
(repeat (- k 1)
(progn
(print (nth 2 LisTs)) (prin1 CTc) (prin1 i2) (prin1 CTc) (prin1 (+ i2 1))
(setq
Kco (getreal "\nKhoang cach giua hai coc (m):");distance 2 station
Kc (* Kco Tn) ; distance
LisLkco (cons Kco LisLkco)
LisLkc (cons Kc LisLkc)
i2 (1+ i2)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisLkc (reverse LisLkc) LisLkco (reverse LisLkco))
;----------------------------------------
;mapcar Kcdo Kcd1
(setq n1 0 Kcd1 0)
;Kcdo 0 LisLkcdo (cons Kcdo LisLkcdo)
;Kcd 0 LisLkcd1 (cons Kcd LisLkcd1))
(mapcar
'(lambda (Kco Kc)
(setq
Kcdo (+ Kcdo (nth n1 LisLkco)) LisLkcdo (cons Kcdo LisLkcdo)
Kcd (+ Kcd (nth n1 LisLkc)) LisLkcd1 (cons Kcd LisLkcd1)
Kcd1 (+ Kcd1 (nth n1 LisLkc)) LisLkcd (cons Kcd1 LisLkcd)
n1 (1+ n1)
)
);endlambda
LisLkco LisLkc
);endmapcar
(setq LisLkcdo (reverse LisLkcdo) LisLkcd1 (reverse LisLkcd1) LisLkcd (reverse LisLkcd))
;----------------------------------------
;mapcar deltaMD deltaDO
(setq n2 1
n3 0
LisHo (cons Ho LisHo)
Cdo (- (nth 0 Lismd) Ho) Lisdo (cons Cdo Lisdo)
DeltaMD (* (- (nth 0 Lismd) Ess) Td) DeltaDO (* (- (nth 0 Lismd) Ess Ho) Td)
LisDeltaMD (cons DeltaMD LisDeltaMD) LisDeltaDo (cons DeltaDo LisDeltaDo))
(mapcar
'(lambda (Cmd io1 Kco)
(setq
Cdo (- Cdo (* Kco (nth n3 Lisi))) Lisdo (cons Cdo Lisdo)
Ho (- (nth n2 Lismd) Cdo) LisHo (cons Ho LisHo)
DeltaMD (* (- (nth n2 Lismd) Ess) Td) LisDeltaMD (cons DeltaMD LisDeltaMD)
DeltaDO (- deltaDO (* (nth n3 LisLkco) (nth n3 Lisi) Td))
LisDeltaDO (cons DeltaDO LisDeltaDO)
n2 (1+ n2)
n3 (1+ n3)
)
);endlambda
Lismd Lisi LisLkco
);endmapcar
(setq LisDeltaMD (reverse LisDeltaMD) LisDeltaDO (reverse LisDeltaDO)
LisHo (reverse LisHo) Lisdo (reverse Lisdo))
;-------------------------------------------
;data cornor.
(repeat k
(progn
(print (nth 3 LisTs)) (prin1 CTc) (prin1 i3)
(setq
Gmb (getreal "\nGoc quay mat bang :")
LisGoc (cons Gmb LisGoc)
i3 (1+ i3)
)
);endprogn
);endrepeat;(princ Lis)
(setq LisGoc (reverse LisGoc))
;-------------------------------------------
(Repeat 8
(setq Ptb (polar Pta a (* i 10))
Ptc (polar Pta1 a (* i 10))
ptd (polar pta2 a (+ (* i 10) 3.5))
)
(command
"layer" "s" "manh" ""
"line" Ptb Ptc ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "ml" ptd 2.5 0.0 (nth (+ (* i 2) 1) LisCSS)
)
(setq i (+ i 1))
);endrepeat
(command
"layer" "s" "manh" ""
"line" Pta Ptb ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" "" ""
"text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))
;------------------------
(COCSS)
;draw one
(setq LisPTcoc nil PTcoc (polar Pta1 a 5) LisPTcoc (cons PTcoc LisPTcoc)
LisPGmb nil PGmb (polar Ptss1 a 15) LisPGmb (cons PGmb LisPGmb)
LisPGmb nil PGmb (polar Ptsg1 a 17) LisPGmb (cons PGmb LisPGmb)
LisPGmb1 nil PGmb1 (polar Pta1 a 13) LisPGmb1 (cons PGmb1 LisPGmb1)
LisPKc nil PKc (polar Pta1 a 25) LisPKc (cons PKc LisPKc)
LisPdd nil Pdd (polar Pta1 a 30) LisPdd (cons Pdd LisPdd)
Pddi (polar pta1 a 30)
LisPho nil Pho (polar Pta1 a 45) LisPho (cons Pho LisPho)
LisPmd nil Pmd (polar Pta1 a 65) LisPmd (cons Pmd LisPmd)
LisPdo nil Pdo (polar Pta1 a 55) LisPdo (cons Pdo LisPdo)
LisPss nil Pss (polar Pta1 a 70) LisPss (cons Pss LisPss)
LisPsg nil Psg (polar Pta1 a 15) LisPsg (cons Psg LisPsg)
LisPssd nil LisPssd1 nil LisPssdo nil LisPssdo1 nil
V 0
)
(mapcar
'(lambda (Kc)
(setq
PTcoc (polar PTcoc 0 (nth V LisLkc)) LisPTcoc (cons PTcoc LisPTcoc)
PGmb (polar PGmb 0 (nth V LisLkc)) LisPGmb (cons PGmb LisPGmb)
PGmb1 (polar PGmb1 0 (nth V LisLkc)) LisPGmb1 (cons PGmb1 LisPGmb1)
PKc (polar PKc 0 (nth V LisLkc)) LisPKc (cons PKc LisPKc)
Pdd (polar Pdd 0 (nth V LisLkc)) LisPdd (cons Pdd LisPdd)
Pho (polar Pho 0 (nth V LisLkc)) LisPho (cons Pho LisPho)
Pmd (polar Pmd 0 (nth V LisLkc)) LisPmd (cons Pmd LisPmd)
Pdo (polar Pdo 0 (nth V LisLkc)) LisPdo (cons Pdo LisPdo)
Pss (polar Pss 0 (nth V LisLkc)) LisPss (cons Pss LisPss)
V (1+ V)
)
)
LisLkc
)
(setq LisPTcoc (reverse LisPTcoc)
LisPGmb (reverse LisPGmb) LisPGmb1 (reverse LisPGmb1)
LisPKc (reverse LisPKc)
LisPdd (reverse LisPdd)
LisPHo (reverse LisPHo) LisPmd (reverse LisPmd) LisPdo (reverse LisPdo)
LisPss (reverse LisPss)
V1 0)
;-----------
(mapcar
'(lambda (PTcoc PGmb PGmb1 PKc Pho Pmd Pdo Pss
Tcoc Gmb Kcdo Ho Cmd Cdo deltaMD deltaDO)
(setq
;parameter draw rotational corner
PGmb11 (polar PGmb1 0 -3.5) PGmb14 (polar PGmb1 0 3.5)
PGmb12 (polar PGmb1 a 2) PGmb122 (polar PGmb12 0 -3.5) PGmb13 (polar PGmb12 0 3.5);90
PGmb133 (polar PGmb13 a 2.5) PGmb144 (polar PGmb13 a 4.5)
PGmb2 (polar PGmb1 a 2) PGmb21 (polar PGmb2 0 -3.5);<180
PGmb22 (polar PGmb2 a45 4.5) PGmb23 (polar PGmb2 a45 6.5);<180
PGmb24 (polar PGmb2 0 3.5) PGmb25 (polar PGmb2 0 6);=180
PGmb26 (polar PGmb2 b45 4) PGmb27 (polar PGmb2 b45 6.5);>180
PGmb3 (polar PGmb1 a 2) PGmb31 (polar PGmb3 0 -3.5) PGmb32 (polar PGmb3 0 3.5);270
PGmb33 (polar PGmb32 c 2.5) PGmb34 (polar PGmb32 c 4.5)
;end draw rotational corner
;parameter comparation
Pssd (polar Pss a (nth V1 LisDeltaMD)) LisPssd (cons Pssd LisPssd)
Pssdo (polar Pss a (nth V1 LisDeltaDO)) LisPssdo (cons Pssdo LisPssdo))
(command
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PTcoc 4.5 0.0 (strcat CTc (itoa (nth V1 LisTcoc)))
"text" "j" "mc" PKc 2.2 90.0 (rtos (nth V1 LisLkcdo) 2 2)
"text" "j" "mc" Pho 2.2 90.0 (rtos (nth V1 LisHo) 2 2)
"text" "j" "mc" Pmd 2.2 90.0 (rtos (nth V1 Lismd) 2 2)
"text" "j" "mc" Pdo 2.2 90.0 (rtos (nth V1 Lisdo) 2 2)
"layer" "s" "chua" ""
"style" "chua" "romans.shx" "" "0.7" "" "" "" ""
"text" "j" "mc" PGmb 2.0 0.0 (strcat (rtos (nth V1 LisGoc) 2 0) "%%d")
"layer" "s" "bao" ""
"circle" PTcoc "5"
"layer" "s" "giong" ""
"line" Pss Pssd ""
"layer" "s" "manh" "")
(cond
((= Gmb 90) (command "pline" PGmb122 PGmb13 PGmb133 "w" "1.0" "0" PGmb144 ""))
((< Gmb 180) (command "pline" PGmb21 PGmb2 PGmb22 "w" "1.0" "0" PGmb23 ""))
((= Gmb 180) (command "pline" PGmb21 PGmb24 "w" "1.0" "0" PGmb25 ""))
((or (and (> Gmb 180) (< Gmb 270)) (and (> Gmb 270) (< Gmb 360)))
(command "pline" PGmb21 PGmb2 PGmb26 "w" "1.0" "0" PGmb27 ""))
((= Gmb 270) (command "pline" PGmb31 PGmb32 PGmb33 "w" "1.0" "0" PGmb34 ""))
)
(setq V1 (1+ V1))
);endlambda
LisPTcoc LisPGmb LisPGmb1 LisPKc LisPho LisPmd LisPdo LisPss
LisTcoc LisGoc LisLkcdo LisHo Lismd Lisdo LisdeltaMD LisdeltaDO
);endmapcar (princ lis)
;-----
;draw two
(setq lisdd (cdr LisLkcd)
Pdd1 (polar Pddi a 3.5) Pdd2 (polar Pddi a 6.5) Pdd3 (polar Pddi a 10)
Pdd4 (polar Pddi a 5)
PKcd (polar Pta1 a 25)
)
(command "layer" "s" "manh" "" "line" pddi pdd3 "")
(setq V4 0)
(repeat (length Lisdd)
(setq
;parameter gradient
Pddi1 (polar Pddi 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi2 (polar Pdd3 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pddi3 (polar Pdd4 0 (- (nth V4 Lisdd) (nth V4 LisLkc)))
Pdd11 (polar Pdd1 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd12 (polar Pdd1 0 (- (nth V4 Lisdd) 10))
Pdd21 (polar Pdd2 0 (- (nth V4 Lisdd) (- (nth V4 LisLkc) 10)))
Pdd22 (polar Pdd2 0 (- (nth V4 Lisdd) 10))
Pdd31 (polar Pdd3 0 (nth V4 Lisdd))
Pdd32 (polar Pddi 0 (nth V4 Lisdd))
Pdd41 (polar Pdd4 0 (nth V4 Lisdd))
PKcd1 (polar PKcd 0 (- (nth V4 Lisdd) (/ (nth V4 LisLkc) 2)))
)
(cond
((> (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi2 Pdd32 Pdd31 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((= (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi3 Pdd41 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd11 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd22 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
((< (nth V4 Lisi) 0)
(command
"layer" "s" "manh" ""
"pline" Pddi1 Pdd31 Pdd32 ""
"layer" "s" "chuv" ""
"style" "chuv" "VNI-Helve-condense" "" "1" "" "" ""
"text" "j" "mc" PKcd1 2.5 0.0 (strcat (rtos (nth V4 LisLkco) 2 2) "m" )
"text" "j" "mc" Pdd12 2.5 0.0 (strcat (nth VL LisVL) " - " "D" (rtos D 2 0))
"text" "j" "mc" Pdd21 2.5 0.0 (strcat "i=" (rtos (nth V4 Lisi) 2 4))))
)
(setq V4 (1+ V4))
)
;--draws ground and pipe bottom level line
(setq
LisPssd (reverse LisPssd)
LisPssd1 (append (cdr LisPssd) (car LisPssd))
LisPssdo (reverse LisPssdo)
LisPssdo1 (append (cdr LisPssdo) (car LisPssdo))
V2 0 V3 0
)
;;;;;;doan nay di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;
(repeat 8
(setq Ptdao (polar Pta1 a 70)
Ptda1 (polar Ptdao c (* V3 10))
Ptda2 (polar Pss c (* V3 10)))
(command "layer" "s" "manh" "" "line" Ptda1 Ptda2 "")
(setq V3 (1+ V3))
);repeat;;;;;;;;;;;;;ket thuc doan di chuyen len cho chay truoc;;;;;;;;;;;;;;;;;;;;;
(repeat (- (length LisPssd) 1)
(setq gocxeoa(angle (nth V2 LisPssdo) (nth V2 LisPssdo1)));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq a (polar (nth V2 LisPssdo) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq b (polar (nth V2 LisPssdo1) (+ (/ pi 2) gocxeoa) kcong));;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(command
"layer" "s" "manh" ""
"line" (nth V2 LisPssd) (nth V2 LisPssd1) ""
"layer" "s" "ong" ""
"line" (nth V2 LisPssdo) (nth V2 LisPssdo1) ""
"line" a b "";;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
)
(chenkyhieudat) ;;;;;;;;;duy viet them ;;;;;;;;;;;;;;;
(setq V2 (1+ V2))
)

;--end draws ground and pipe bottom level line
(onap2)
);progn
);end function STD
;--------------------
;;;;;;;;;;;;;;duy viet them phan chen ky hieu dat;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun chenkyhieudat ()
(setq daiab(distance (nth V2 LisPssd) (nth V2 LisPssd1)))
(setq gocxeo(angle (nth V2 LisPssd) (nth V2 LisPssd1)))
(setq solan (- (fix (/ daiab 30)) 1))
(setq c (polar (nth V2 LisPssd) gocxeo 30))
(command "layer" "s" "dat" "")
(command ".INSERT" "ky hieu dat 5" (nth V2 LisPssd) 1 1 (nth V2 LisPssd1))
(repeat solan
(command "copy" "last" "" (nth V2 LisPssd) c "")
)
);;;;;;;;;;;;;;ket thuc phan duy viet them;;;;;;;;;;;;;;;;;;;;;;

Chào bạn HoangSon 614,
Thực tình mình cũng chưa hiểu ý bạn muốn hỏi.
Nếu là bạn chỉ muốn thay đổi cách nhập các biến Tld và Tln trong lisp bạn post . còn các phần khác giữ nguyên thì bạn hãy chú ý các điều sau đây:
1/- Đoạn code:
(setq
Tln (getint "\nTy le ngang 1/x (100, 200, 500, 1000); x="))
Tld (getint "\nTy le dung 1/y (100, 200); y="))
Tn (/ 1000.0 Tln)
Td (/ 1000.0 Tld)
)

sử dụng hàm (getint ......) nó yêu cầu bạn nhập một dữ liệu dạng số nguyên và trả về giá trị của các biến tld và tln là các số nguyên. Sau đó lisp dùng giá trị này để tính toán các giá trị của các biến tn và td.
2/- Đoạn bạn đã viết:
"text" "j" "ml" Pta5 2.5 0.0 ((strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))
"text" "j" "ml" Pta6 2.5 0.0 (strcat "TYÛ LEÄ ÑÖÙNG: 1/" (rtos Tld))

thực ra chưa phải là code lisp vì tất cả các hàm lisp đều phải bắt đầu từ dấu mở ngoặc đơn "(" bạn ạ và thừa một dấu ngoặc mở ở hàm strcat như bác Giabach đã nói.
Nếu bạn sửa thành:
(command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln)))
Thì đây là một đoạn lisp dùng để viết một đoạn text lên bản vẽ của bạn với điều kiện biến tln là một số đã biết rồi trả về giá trị nil chứ chả có biến tn ở đâu cả.
Nếu bạn viết:
(setq tn (command "text" "j" "ml" Pta5 2.5 0.0 (strcat "TYÛ LEÄ NGANG: 1/" (rtos Tln))))
Thì đoạn lisp này sẽ viết một text lên bản vẽ của bạn với điều kiện biến tln là một giá trị số đã biết và trả về giá trị của biến tn là nil vì hàm command chỉ thực hiện một lệnh trong cad rồi trả về nil chứ không trả về một giá trị của biến.
Nếu bạn viết:
(setq tn (Strcat "TY LE NGANG: 1/" (rtos tln)))
thì đoạn lisp này sẽ trả về giá trị của biến tn là một chuỗi chứ không phải một số bạn ạ và như vậy vẫn phải xác định biến tln là một giá trị số trước đó cơ.

Tất cả những đoạn lisp trên đều không thể thay thế đoạn lisp cũ vì chương trình của bạn vẫn còn sử dụng các biến tn, td, tln, tld cho các mục đích tính toán ở các phần khác nữa bạn ạ.

3/- Nếu bạn không quan tâm tới các biền tn, td và bạn không sử dụng các biến tln, tld vào các phần sau của chương trình mà muốn gán biến tld và tln ở dạng chuỗi thì bạn có thể dùng như sau:
(setq tln (strcat "TY LE NGANG: 1/" (getstring "Nhap gia tri ty le")))

Bạn hãy đọc kỹ bài trả lời của mình và chọn lấy cái bạn cần nha.
Chúc bạn thành công.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#474 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 16 October 2009 - 04:03 PM

Thiep xin hỏi tiếp: 1 cung ellipse, là 1 đối tượng ELLIPSE hở. Làm sao tạo được 1 cung ellipse này khi biết các thông số: góc cung đầu; góc cung cuối, tâm ellipse, bán kính trục lớn ( R ), tỷ số r/R.
Xin các anh em 1 đoạn mã lisp để tạo cung ellipse này.

Chào thiep
Sorry, chuyển qua bên này nha.
Tạo cung ellipse bằng cách gián tiếp : truớc tiên tạo 1 ellipse kín, sau đó cắt với các thông số góc đã cho.
Bạn nào biết cách tạo cung ellipse trực tiếp vui lòng bổ sung.
(defun c:test(/ cen goc1 goc2 r ratio)
(and
(setq cen (getpoint "Tam :") )
; (setq goc1 (getangle "Goc dau :") )
; (setq goc2 (getangle "Goc cuoi :"))
; (setq R (getdist "Ban kinh truc lon :"))
; (setq ratio (getpoint "Ti so Truc nho / Truc lon :"))
(setq goc1 (/ pi 6) goc2 (/ (* 7 pi) 4) R 1000 ratio 0.5)
(entmakex ;tao ELLIPSE
(list '(0 . "ELLIPSE") '(100 . "AcDbEntity") '(100 . "AcDbEllipse")
(cons 10 cen) (cons 11 (list R 0 0)) (cons 40 ratio)))
(ellipse2arc (entlast) goc1 goc2)
)
(princ)
)
; ham cat ELLIPSE theo cac goc
(defun ellipse2arc (ell ang1 ang2 / elst par1 par2)
(setq elst (entget ell)
par1 (atan (sin ang1) (* (cos ang1) (cdr (assoc 40 elst))))
par2 (atan (sin ang2) (* (cos ang2) (cdr (assoc 40 elst)))) )
(entmake (subst (cons 41 par1)
(assoc 41 elst)
(subst (cons 42 par2) (assoc 42 elst) elst) ) )
(entdel ell)
)

  • 0

#475 trung652091

trung652091

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 October 2009 - 10:13 PM

Em đang gặp một vấn đề sau.Em đã có 1 đưòng cong bây giờ muốn duỗi nó ra thành đường thẳng nhưng ko đo đưọc chiều dài.Các bác có cái lisp nào đo chiều dài đường cong không giúp em với.Cảm ơn nhiều :bigsmile:
  • 0

#476 hai_1401

hai_1401

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 17 October 2009 - 11:10 PM

Em đang gặp một vấn đề sau.Em đã có 1 đưòng cong bây giờ muốn duỗi nó ra thành đường thẳng nhưng ko đo đưọc chiều dài.Các bác có cái lisp nào đo chiều dài đường cong không giúp em với.Cảm ơn nhiều :bigsmile:

Không cần lisp bạn ạ, lệnh Dim là đủ rồi, cần gõ DAR là đo được chiều dài cung thôi.
Không thì dung lisp tính tổng chiều dài các đối tượng này:
;;;--- ADDLEN.lsp - Total lengths of objects. 
;;; Polylines, LWPolylines, Splines, Arcs, Circles, Lines, and Ellipse
;;;
;;;
;;;
;;;--- Copyright 2005 by JefferyPSanders.com
;;; All rights reserved.
;;;
;;;
;;;
;;;--- Created on 11/25/05
;;;


(defun C:ADDLEN()

(setvar "cmdecho" 0)

;;;--- Function to get the length of an ARC entity
(defun getArc(en)
(command "lengthen" en "")
(getvar "perimeter")
)

;;;--- Function to get the length of a LINE entity
(defun getLine(en)
(setq enlist(entget en))
(distance (cdr(assoc 10 enlist)) (cdr(assoc 11 enlist)))
)

;;;--- Function to get the length of a POLY, CIRCLE, SPLINE, OR ELLIPSE
(defun getPoly(en)
(command "area" "Object" en)
(getvar "perimeter")
)

;;;--- Main application

;;;--- Let the user select objects
(if(setq eset(ssget))
(progn

;;;--- Set up a variable to hold the length
(setq totalLen 0)

;;;--- Set up a counter
(setq cntr 0)

;;;--- Cycle through each entity in the selection set
(while(< cntr (sslength eset))

;;;--- Get the first entity's name
(setq en(ssname eset cntr))

;;;--- Get the DXF group codes
(setq enlist(entget en))

;;;--- Get the type of entity
(setq enType(cdr(assoc 0 enlist)))

;;;--- Get the length based on entity type
(cond
((= enType "ARC" )(setq len(getArc en)))
((= enType "CIRCLE" )(setq len(getPoly en)))
((= enType "ELLIPSE" )(setq len(getPoly en)))
((= enType "LINE" )(setq len(getLine en)))
((= enType "LWPOLYLINE")(setq len(getPoly en)))
((= enType "POLYLINE" )(setq len(getPoly en)))
((= enType "SPLINE" )(setq len(getPoly en)))
(T (setq len 0.0))
)

;;;--- Format the entity type to be 12 characters long
(while(< (strlen enType) 12)(setq enType(strcat enType " ")))

;;;--- Inform the user of progress
(princ "\n Found ")
(princ enType)
(princ " with a length of: ")
(princ (rtos len))

;;;--- Total the length
(setq totalLen(+ totalLen len))


;;;--- Increment the counter to get the next entity
(setq cntr (+ cntr 1))
)
)
)

(setvar "cmdecho" 1)

;;;--- Inform the user of the results
(alert (strcat "\n Found " (itoa cntr) " entitie(s) with a Total Length of " (rtos totalLen)))

;;;--- Suppress the last echo for a clean exit
(princ)
)

  • 0

#477 t031285

t031285

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 01 May 2010 - 09:03 PM

Các bạn cho mình hỏi,mình có sử dụng 1 vài lisp nhưng đôi khi lúc đầu sử dụng lisp bình thường nhưng sau 1 hồi thì không sử dụng được nữa.Mình phải tắt cad đi rồi mở lại mới sử dụng được.Mong các bạn chỉ cho mình cách khắc phục.Thanks
  • 0

#478 kienxdhp

kienxdhp

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 01 May 2010 - 09:25 PM

Có rất nhiều trường hợp, thường là các lisp sẽ có các biến trùng tên nhau (các ý tưởng nhớn thường gặp nhau mà :cheers: ) ví dụ ta thấy các biến như a1, t1, k1 thường đươc dùng để đặt tên biến rất nhiều... các biến này trong mỗi lisp sẽ được gán các kiểu dữ liệu khác nhau (string, byte...) và có các giá trị khác nhau, nếu trong quá trình lập trình người viết Lisp không chú ý đến điều này để đưa các biến về giá trị nil thì khi bạn sử dụng nhiều lisp trong 1 bản vẽ, các biến này vẫn giữ giá trị, khi chạy các lisp khác nó lại được gán giá trị khác và khi bạn chạy lại lisp của nó nó sẽ đơ luôn vì nó đã mang một kiểu dữ liệu khác, bạn phải tắt bản vẽ để laoij bỏ giá trị của các biến này.
vd trong lisp 1, k1 được gán là kiểu byte nhưng ở lisp 2 nó lại là kiểu string, vậy đó.
Để khắc phục lỗi này bạn phải vô lisp đó xem thôi.
  • 0

#479 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 May 2010 - 03:46 AM

Các bạn cho mình hỏi,mình có sử dụng 1 vài lisp nhưng đôi khi lúc đầu sử dụng lisp bình thường nhưng sau 1 hồi thì không sử dụng được nữa.Mình phải tắt cad đi rồi mở lại mới sử dụng được.Mong các bạn chỉ cho mình cách khắc phục.Thanks

Có thể trường hợp của bạn như ý kiến của bạn kienxdhp trình bày.
Bạn hãy giải phóng các biến trong các Lisp đó sau khi chạy Lisp xong
Ví dụ :
(Defun c:ab(/ a b c)
.....
thì a b c là các biến sẽ được giải phóng, sau khi chạy Lisp nó không còn nhận giá trị nữa
  • 0

#480 t031285

t031285

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 02 May 2010 - 12:07 PM

trong mỗi đoạn lisp đểu có giải phóng các biến các bác ạ.chỉ có mỗi 1 đoạn lisp là bị kiểu đó thôi.Thanks
  • 0