Đến nội dung


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

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1661 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 02 March 2009 - 12:42 PM

(command "ucs" "w")

Mạn phép góp ý bạn 1 chút nhỏ như này:
-Toàn bộ phía trên không thấy bạn dùng ucs nên cuối cùng không cần dùng dòng trả ucs về như của bạn.
-Bạn trả về W như vậy là vô tình làm thay đổi UCS của người dùng. Nếu có dùng UCS trong lisp thì khi trả lại nên chọn P thì hợp lý hơn.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1662 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 02 March 2009 - 03:12 PM

Bạn nguyenkhoadung98 ơi,

Thực ra theo thiển ý của mình thì cái lisp này chưa thực là tối ưu, có thể nên cải tiến lại chút nữa sẽ tốt hơn vì hiện tại nếu bạn chọn nhiều đối tượng cho biến tdt thì việc chọn các đối tượng cần nối sẽ rất dễ nhầm lẫn bạn ạ. Theo ý mình chỉ nên nối mỗi lần một bộ chọn rồi sau đó cho người dùng chọn tiếp có nối tiếp bộ chọn nữa hay không thì tốt hơn bạn ạ.

Bạn hãy thử xem nhé. Chúc bạn vui.

Chào bạn nguyenkhoadung98,
Đây là cái lisp mình cải tiến theo cái ý mình nói ở trên. Bạn dùng thử và cho mình biết ý kiến nhé.
(defun c:Lj (/ dt ssdt sodt index ans);;; Make Command

(setq index 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ename (ssdt /);;; Get etype of the object ename
(cdr (assoc '0 (entget ssdt)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun MoPL (ssdt /);;; Check the open polyline
(= (cdr (assoc '70 (entget ssdt))) 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun NoiPL (ssdt /);;; Joint the polyline
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" (ssget) "" "")

)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun NoiLC (ssdt /);;; Joint the line to polyline
(command ".PEDIT" ssdt "Y" "J" (ssget) "" "")

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Main (dt / );;; Get object and joint
(setq
dt (entsel)
;;;sodt (sslength dt)
;;;index 0
)
;;;(repeat sodt
(setq
ssdt (car dt)

)
(if (or (= (ename ssdt) "LWPOLYLINE") (= (ename ssdt) "POLYLINE"))
(NoiPL ssdt)
)
(if (or (= (ename ssdt) "LINE") (= (ename ssdt) "ARC"))
(progn
(NoiLC ssdt)
(setq index (1+ index))
)
)
(setq ans (getstring "\nBan muon tiep tuc ? "))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Check (/ans);;; Check continuing condition

(if (= ans "y")
(main dt)

)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(Main dt)
(while (= ans "y")
(check ans)
)
(alert (strcat "Ban da noi " (itoa index) " Line thanh Plolyline"))

(princ)
)
Lệnh sử dụng là LJ (line joint) bạn nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1663 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 02 March 2009 - 03:44 PM

Mạn phép góp ý bạn 1 chút nhỏ như này:
-Toàn bộ phía trên không thấy bạn dùng ucs nên cuối cùng không cần dùng dòng trả ucs về như của bạn.
-Bạn trả về W như vậy là vô tình làm thay đổi UCS của người dùng. Nếu có dùng UCS trong lisp thì khi trả lại nên chọn P thì hợp lý hơn.

Thực ra thì mình đã xoá mất 1 dòng (command "ucs" "ob" p1), cái này là mấu chốt của lệnh để khi bấm vào cung đoạn có góc =90 độ không bị lỗi. Như vậy mới có hàm trans, để mình post lại cho đủ.
(defun c:os1 ( / ent p1 ent0 ent1)
(defun offsetgoc (ent1 p1 goc rong layer / p2 ent ent0)
(setq p2 (polar p1 (* pi goc) rong))
(command "offset" rong ent1 p2 "")
(setq ent (entlast)
ent0 (entget ent)
ent0 (subst (cons 8 layer) (assoc 8 ent0) ent0))
(entmod ent0)
(entupd ent))

(setq ent (entsel)
p1 (cadr ent)
ent1 (car ent)
longduong (getdist "\n Long duong rong:")
viahe (getdist "\nVia he rong:")
viahe (+ longduong viahe))
(command "ucs" "ob" p1)
(setq p1 (trans p1 0 1))

(offsetgoc ent1 p1 0.5 longduong "long_duong")
(offsetgoc ent1 p1 1.5 longduong "long_duong")
(offsetgoc ent1 p1 0.5 viahe "via_he")
(offsetgoc ent1 p1 1.5 viahe "via_he")
(setq ent0 (entget ent1)
ent0 (subst (cons 8 "tim_duong") (assoc 8 ent0) ent0))
(entmod ent0)
(entupd ent1)
(command "ucs" "p")
)
  • 1

#1664 dacvien2007

dacvien2007

    biết vẽ polygon

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

Đã gửi 02 March 2009 - 05:25 PM

Nhờ bạn viết giúp Lisp:
1. xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.
2. Tính Vạt góc : khi 2 đường chỉ giới xây dựng giao nhau với 1 góc theo qui định thì thì tính vạt góc từ đỉnh giao nhau xác định lùi về với khoảng cách qui định, nối 2 điểm và vẽ đường góc vát, xong xoá đường thừa góc giao nhau:
Góc và kích thước như sau :
từ 0 - 30 độ khoảng cách lùi về là 20m x20
30 - 40 : 15 x1 5
40 - 50 : 12
56 - 60 : 10
60 -80 : 7
80 - 110 : 5
110 - 140 :3
140 - 160 : 2
160 - 200 : 0

Rất mong được bạn giùp. File ví dụ mình up theo.


http://www.cadviet.c...h_goc_vat_1.rar
  • 0

#1665 dacvien2007

dacvien2007

    biết vẽ polygon

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

Đã gửi 02 March 2009 - 09:06 PM

Lấy font, độ cao hay góc nghiêng text và vẽ point
(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(defun gocam( goc)
(if (< goc 0.0) (+ 360.0 goc) goc)
)
(defun pvi( p1 p2)
(/ (* 180 (angle p1 p2)) pi)
)
(defun ra( g)
(/ (* g pi) 180)
)
(defun deg( so)
(/ (* 180 so) pi)
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))
(inters p1 p2 p p0 nil)
)
(while (and (setq n1 (entsel "text 1")) (setq n2 (entsel "text 2")))
(setq n1 (car n1) n2 (car n2))
(while (setq p (getpoint "\nDiem"))
(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))
(setq h1 (atof st1) h2 (atof st2))
(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))
(setq p (diemvuonggoc p1 p2 p))
(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))
(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))
)
(command "_.text" "s" (dxf n1 7) p (dxf n1 40) (deg (dxf n1 50)) (rtos h 2 3))
(entmake (list (cons 0 "POINT") (cons 8 "points") (cons 10 p)))
)
)
)

Nhưng qua lisp này, nhờ các Anh giúp cho công việc nội suy cũng theo đường thẳng đó, nhưng thể hiện theo bước nhảy với số bước nhảy qui định ví như là : 0.5 , 1.0, 2,... thì lisp sẻ tính nội suy và thể hiện ra độ cao theo đường thằng đó với các điển thể hiện cao độ ví như :
Điểm 1 caođo 2.15 điểm 2 cao độ 3.67 bước nhảy là 0.5
thì xuất hiện các cao độ 2.50 , 3.0, 3.5 trên đường thẳng qua điểm 1 và 2
Rất mong được giúp đở :
  • 0

#1666 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 03 March 2009 - 09:34 AM

Nhờ bạn viết giúp Lisp:
1. xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.
2. Tính Vạt góc : khi 2 đường chỉ giới xây dựng giao nhau với 1 góc theo qui định thì thì tính vạt góc từ đỉnh giao nhau xác định lùi về với khoảng cách qui định, nối 2 điểm và vẽ đường góc vát, xong xoá đường thừa góc giao nhau:
Góc và kích thước như sau :
từ 0 - 30 độ khoảng cách lùi về là 20m x20
30 - 40 : 15 x1 5
40 - 50 : 12
56 - 60 : 10
60 -80 : 7
80 - 110 : 5
110 - 140 :3
140 - 160 : 2
160 - 200 : 0

Rất mong được bạn giùp. File ví dụ mình up theo.


http://www.cadviet.c...h_goc_vat_1.rar

1. Với yêu cầu offset 1 phía thì bạn nên dùng lệnh offset.
2. Rất khó xác định giao điểm 2 đường PLINE, code này chỉ phục vụ cho việc vẽ đường vạt góc cho 2 đường LINE, không xử lý trim vì để lại đường LINE cho việc vạt góc đường còn lại. Bạn chịu khó trim khi có đầy đủ các đường vạt góc, sau đó nếu cần thì dùng lệnh JL đã có ở trang trước để nối lại thành PLINE.
Bạn thử xem nếu thấy có thể dùng được thì báo lại nhé:

(defun c:vg ()
(defun dxf (ent maso)
(cdr (assoc maso ent))
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (+ (angle p1 p2) (* pi 0.5)) 10.0))
(inters p1 p2 p p0 nil)
)

(setq ent1 (entsel "\n Chon duong LINE 1:")
ent2 (entsel "\n Chon duong LINE 2:")
ent1g (entget (car ent1))
ent2g (entget (car ent2))
sp1 (dxf ent1g 10)
ep1 (dxf ent1g 11)
sp2 (dxf ent2g 10)
ep2 (dxf ent2g 11)
p1 (diemvuonggoc sp1 ep1 (cadr ent1))
p2 (diemvuonggoc sp2 ep2 (cadr ent2))
ent1 (car ent1)
ent2 (car ent2)
int_point (inters sp1 ep1 sp2 ep2 nil)
ang1 (angle int_point p1)
ang2 (angle int_point p2)
ang (- ang1 ang2)
ang (abs (* 180.0 (/ ang pi )))
)
(cond ((and (> ang 0.0)(<= ang 30.0)) (setq d 20.0))
((and (> ang 30.0)(<= ang 40.0)) (setq d 15.0))
((and (> ang 40.0)(<= ang 50.0)) (setq d 12.0))
((and (> ang 50.0)(<= ang 60.0)) (setq d 10.0))
((and (> ang 60.0)(<= ang 80.0)) (setq d 7.0))
((and (> ang 80.0)(<= ang 110.0)) (setq d 5.0))
((and (> ang 110.0)(<= ang 140.0)) (setq d 20.0))
((and (> ang 140.0)(<= ang 160.0)) (setq d 20.0))
((and (> ang 160.0)(<= ang 180.0)) (setq d 0.0))
)
(setq p1 (polar int_point ang1 d)
p2 (polar int_point ang2 d))
(entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2) (cons 8 "chi_gioi")))
)
  • 0

#1667 dacvien2007

dacvien2007

    biết vẽ polygon

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

Đã gửi 03 March 2009 - 11:38 AM

1. Với yêu cầu offset 1 phía thì bạn nên dùng lệnh offset.
2. Rất khó xác định giao điểm 2 đường PLINE, code này chỉ phục vụ cho việc vẽ đường vạt góc cho 2 đường LINE, không xử lý trim vì để lại đường LINE cho việc vạt góc đường còn lại. Bạn chịu khó trim khi có đầy đủ các đường vạt góc, sau đó nếu cần thì dùng lệnh JL đã có ở trang trước để nối lại thành PLINE.
Bạn thử xem nếu thấy có thể dùng được thì báo lại nhé:

(defun c:vg ()
(defun dxf (ent maso)
(cdr (assoc maso ent))
)
(defun diemvuonggoc( p1 p2 p / p0)
(setq p0 (polar p (+ (angle p1 p2) (* pi 0.5)) 10.0))
(inters p1 p2 p p0 nil)
)

(setq ent1 (entsel "\n Chon duong LINE 1:")
ent2 (entsel "\n Chon duong LINE 2:")
ent1g (entget (car ent1))
ent2g (entget (car ent2))
sp1 (dxf ent1g 10)
ep1 (dxf ent1g 11)
sp2 (dxf ent2g 10)
ep2 (dxf ent2g 11)
p1 (diemvuonggoc sp1 ep1 (cadr ent1))
p2 (diemvuonggoc sp2 ep2 (cadr ent2))
ent1 (car ent1)
ent2 (car ent2)
int_point (inters sp1 ep1 sp2 ep2 nil)
ang1 (angle int_point p1)
ang2 (angle int_point p2)
ang (- ang1 ang2)
ang (abs (* 180.0 (/ ang pi )))
)
(cond ((and (> ang 0.0)(<= ang 30.0)) (setq d 20.0))
((and (> ang 30.0)(<= ang 40.0)) (setq d 15.0))
((and (> ang 40.0)(<= ang 50.0)) (setq d 12.0))
((and (> ang 50.0)(<= ang 60.0)) (setq d 10.0))
((and (> ang 60.0)(<= ang 80.0)) (setq d 7.0))
((and (> ang 80.0)(<= ang 110.0)) (setq d 5.0))
((and (> ang 110.0)(<= ang 140.0)) (setq d 20.0))
((and (> ang 140.0)(<= ang 160.0)) (setq d 20.0))
((and (> ang 160.0)(<= ang 180.0)) (setq d 0.0))
)
(setq p1 (polar int_point ang1 d)
p2 (polar int_point ang2 d))
(entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2) (cons 8 "chi_gioi")))
)

Rất cám ơn bạn.
Mình đã thử xong, đúng như bạn nói, việc khó khăn trong việc xử lý giữa line và pline
À... mình nghĩ tìm cách nào chuyển Pline sang line và sau đó sừ dụng lệnh VG được không bạn !
Rất mong Bạn giúp
Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.

  • 0

#1668 phamthanhhungks

phamthanhhungks

    biết vẽ polygon

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

Đã gửi 03 March 2009 - 12:03 PM

Bác Nguyễn Hoành, bác SSG và ... ơi. Em mới kiếm được một cái thư viện dành cho dân kiến trúc "công nhận nó khá tuyệt vời." Nhưng người chia sẻ em cái thư viện này, lại không truyền lại bí kíp tạo ra bộ thư viện đó. Thật sự, em mò mãi mà vẫn chưa ra, hum nay, có gì em sẽ Up lên diễn đàn aem xem có gì tìm hiểu thêm xem họ tạo ra bộ thư viện này bằng cách nào nha. " Công công ty mà đã tạo ra bộ thư viện này là công ty PAD, khá nổi ở Sài Gòn" có gì em cũng sẽ up lên topic thư viện or dowload của diễn đàn lun. Học hỏi và chép trên này nhìu, mà chưa có dịp nào ... Thank các bác nhìu nhìu.
Còn đây là một file của em nó.
Visit My Website
rút kinh nghiệm lần trước, em save file nó xuống cad 200o rùi đó.
  • 0

#1669 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 03 March 2009 - 12:05 PM

Rất cám ơn bạn.
À... mình nghĩ tìm cách nào chuyển Pline sang line và sau đó sừ dụng lệnh VG được không bạn !
Rất mong Bạn giúp
Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.

1. ac ac. Mình hứa sẽ viết gộp chung vào lệnh VG.
2. Với lệnh offset và align bạn nên post vào box "thư giãn" . Bạn cứ mạnh dạn post đi, đảm bảo chắc chắn trong vòng 1 ngày sẽ nhận được lisp, đôi khi còn kèm theo cả DCL nữa đấy.
  • 0

#1670 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 03 March 2009 - 01:42 PM

Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.[/color]

Viết Lisp cho bạn ư?
Trước hết, bạn hãy đọc những lời khuyên này, khi đọc bạn đừng bỏ qua 1 câu nào hết cho dù là nó hơi dài nhưng rất thâm thúy.
http://www.cadviet.c...?showtopic=2513
  • 0

#1671 dacvien2007

dacvien2007

    biết vẽ polygon

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

Đã gửi 03 March 2009 - 04:15 PM

Viết Lisp cho bạn ư?
Trước hết, bạn hãy đọc những lời khuyên này, khi đọc bạn đừng bỏ qua 1 câu nào hết cho dù là nó hơi dài nhưng rất thâm thúy.
http://www.cadviet.c...?showtopic=2513

Cám ơn Bạn đã chỉ chổ TIP để đọc và học những lời khuyên rất thấm thúy.

Thật tình ra mình đang ở một nơi rất ra, nơi vùng lầy nước nổi hàng năm, việc học AutoCAD cũng là một việc phải tầm thầy ở rất xa, đừng nói chi là ngôn ngữ AutoLisp, ...Sưu tầm hay nhờ các bạn viết cho chút đoạn lisp và chạy, mình cảm thấy phấn chấn lên và rất chân thành cám ơn.

Việc tự học Autolisp riêng đối với mình không phải đơn giản, phải tự học lệnh ban đầu xem lisp của các bạn, tự rà lại lệnh là gì,... nhưng lại muốn thể hiện nhanh ý tưởng của mình để Lisp chạy....cho công việc... nhưng không được. Mênh mông trong đống lệnh.

Nhưng có một điều, một số it người giỏi.... lại khó thông cảm với những người mới bắt đầu. Tiến sĩ mà là sao dạy mẫu giáo. phải không Bạn.
Được giúp thì rất tốt, không giúp thì chưa tốt. Mình không nghĩ vậy đâu. Có cái lương tâm của con người tự soi rọi.
Chúc Bạn vui - khỏe - thành đạt - hạnh phúc.

  • 0

#1672 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 03 March 2009 - 05:12 PM

Bác Nguyễn Hoành, bác SSG và ... ơi. Em mới kiếm được một cái thư viện dành cho dân kiến trúc "công nhận nó khá tuyệt vời." Nhưng người chia sẻ em cái thư viện này, lại không truyền lại bí kíp tạo ra bộ thư viện đó. Thật sự, em mò mãi mà vẫn chưa ra, hum nay, có gì em sẽ Up lên diễn đàn aem xem có gì tìm hiểu thêm xem họ tạo ra bộ thư viện này bằng cách nào nha. " Công công ty mà đã tạo ra bộ thư viện này là công ty PAD, khá nổi ở Sài Gòn" có gì em cũng sẽ up lên topic thư viện or dowload của diễn đàn lun. Học hỏi và chép trên này nhìu, mà chưa có dịp nào ... Thank các bác nhìu nhìu.
Còn đây là một file của em nó.
Visit My Website
rút kinh nghiệm lần trước, em save file nó xuống cad 200o rùi đó.

Đề nghị các bác cho 1 bài tut về kỹ thuật stretch L /2 ; L /3 ở mục Kỹ thuật AutoCad, em cũng rất quan tâm về cái này.
  • 0

#1673 phamthanhhungks

phamthanhhungks

    biết vẽ polygon

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

Đã gửi 03 March 2009 - 05:29 PM

Đề nghị các bác cho 1 bài tut về kỹ thuật stretch L /2 ; L /3 ở mục Kỹ thuật AutoCad, em cũng rất quan tâm về cái này.

hay wa, vậy là có người cùng ý tưởng với mình rồi. aem khẩn thiết đề nghị các bác có kinh nghiệm về vấn đề này, mở riêng 1 Topic để hướng dẫn aem và cùng nhau tìm hiểu thêm.
Thank các bác nhìu.
  • 0

#1674 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 03 March 2009 - 05:42 PM

hay wa, vậy là có người cùng ý tưởng với mình rồi. aem khẩn thiết đề nghị các bác có kinh nghiệm về vấn đề này, mở riêng 1 Topic để hướng dẫn aem và cùng nhau tìm hiểu thêm.
Thank các bác nhìu.

Vào Google tìm một lúc thì hóa ra đã có bài tut trong box Mẹo sử dung AutoCad-> tính năng hay của block của gp14 .Đọc xong vọc liền thấy đúng như xướng. Lâu nay tự mày mò mãi ko được.
  • 0

#1675 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 March 2009 - 06:29 PM

Cám ơn Bạn đã chỉ chổ TIP để đọc và học những lời khuyên rất thấm thúy.

Thật tình ra mình đang ở một nơi rất ra, nơi vùng lầy nước nổi hàng năm, việc học AutoCAD cũng là một việc phải tầm thầy ở rất xa, đừng nói chi là ngôn ngữ AutoLisp, ...Sưu tầm hay nhờ các bạn viết cho chút đoạn lisp và chạy, mình cảm thấy phấn chấn lên và rất chân thành cám ơn.

Việc tự học Autolisp riêng đối với mình không phải đơn giản, phải tự học lệnh ban đầu xem lisp của các bạn, tự rà lại lệnh là gì,... nhưng lại muốn thể hiện nhanh ý tưởng của mình để Lisp chạy....cho công việc... nhưng không được. Mênh mông trong đống lệnh.

Nhưng có một điều, một số it người giỏi.... lại khó thông cảm với những người mới bắt đầu. Tiến sĩ mà là sao dạy mẫu giáo. phải không Bạn.
Được giúp thì rất tốt, không giúp thì chưa tốt. Mình không nghĩ vậy đâu. Có cái lương tâm của con người tự soi rọi.
Chúc Bạn vui - khỏe - thành đạt - hạnh phúc.

Xin lỗi bạn dacvien2007,
Bạn sai rồi, đừng vội tự ái kiểu trẻ con vậy. Bạn nên nhớ rằng, trên diễn đàn này, mọi người đều giúp nhau với tinh thần hoàn toàn tự nguyện và vô tư thôi. Có điều tất cả đều chỉ là giúp thôi, còn vấn đề làm hộ nhau thì hoàn toàn không nên một chút nào. Đã là dân kỹ thuật, bạn phải hiểu rằng để có thể làm tốt công việc của mình, bạn phải cố gắng tự học hỏi thôi. Đành rằng việc học tập của bạn có khó khăn, nhưng không có nghĩa là bạn ỷ vào cái khó khăn ấy để không chịu học được nếu như bạn muốn giỏi nghề. Bạn thừa hiểu rằng trong lĩnh vực kỹ thuật, chỉ một vấn đề nhưng có rất nhiều cách giải quyết khác nhau để đạt được yêu cầu của nó. Việc bạn chọn phương án nào phải do chính bạn hiểu kỹ, cân nhắc vào điều kiện cụ thể của bạn đồng thời phải tự chịu trách nhiệm về sự lựa chọn đó. Đúng không bạn?. Vậy nên nếu bạn không hiểu kỹ mà cứ dùng bừa các lisp bạn sưu tầm thì hãy coi chừng, lợi bất cập hại đấy bạn ạ.
Qua theo dõi trên topic này, mình cũng thấy rằng đã đến lúc bạn cần học tập một cách nghiêm túc về lisp nếu như công việc của bạn cần tới nhiều lisp như vậy.
Việc viết cho bạn không phải quá khó đối với nhiều thành viên ở đây, song nếu để bạn hình thành cái cách suy nghĩ ỷ lại vào người khác mãi mà không chịu tự mình nghiên cứu, học tập để ứng dụng thì sẽ là không đúng mất bạn ạ. Mục đích của diễn đàn là để giúp nhau cùng tiến bộ chứ không phải để lợi dụng lẫn nhau.
Thực tế mình nghĩ bạn cũng không phải là quá khó khăn khi học lisp vì bằng chứng là bạn vẫn thường xuyên lên mạng được để vào diễn đàn cơ mà. Hãy bắt đầu học ngay và thử viết các lisp theo những yêu cầu cụ thể của bạn. Có thể bạn sẽ sai hay gặp khó khăn ở một vấn đề nào đó, khi ấy hãy post lên và mọi người sẽ giúp vì mọi ngưòi hiểu rằng bạn đang cố gắng để hoàn thiện công việc của bạn. Còn như bạn chỉ có post lên yêu cầu mọi người hãy giúp đỡ trong khi bản thân bạn thì chỉ ngồi chơi và đợi kết quả, không thấy có kết quả thì tỏ ra khó chịu, vậy có đúng không nhỉ?
Mình cũng là người chỉ mới vọc lisp thời gian gần đây, tuy chưa hiểu hết nó nhưng đã có thể cố gắng tự mình giải quyết những vấn đề cụ thể nho nhỏ của mình, chỉ khi bị tắc tị mới nhờ tới các bác cao thủ hơn gợi ý để giải quyết. Mỗi lần như vậy gỡ được mấy cái xương dăm mà sướng lắm bạn ạ.
Mong rằng bạn sẽ cố gắng để có thể có được những cái sướng như mình chứ không phải nhăn nhó khó chịu vì chả có ai giúp.
Chúc bạn vui và thành công trong cuộc sống.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1676 duylinh85_xd

duylinh85_xd

    biết zoom

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

Đã gửi 04 March 2009 - 03:06 PM

Bác Nguyễn Hoành, bác SSG và ... ơi. Em mới kiếm được một cái thư viện dành cho dân kiến trúc "công nhận nó khá tuyệt vời." Nhưng người chia sẻ em cái thư viện này, lại không truyền lại bí kíp tạo ra bộ thư viện đó. Thật sự, em mò mãi mà vẫn chưa ra, hum nay, có gì em sẽ Up lên diễn đàn aem xem có gì tìm hiểu thêm xem họ tạo ra bộ thư viện này bằng cách nào nha. " Công công ty mà đã tạo ra bộ thư viện này là công ty PAD, khá nổi ở Sài Gòn" có gì em cũng sẽ up lên topic thư viện or dowload của diễn đàn lun. Học hỏi và chép trên này nhìu, mà chưa có dịp nào ... Thank các bác nhìu nhìu.
Còn đây là một file của em nó.
Visit My Website
rút kinh nghiệm lần trước, em save file nó xuống cad 200o rùi đó.

chào các bác (xin bàn ngoài lisp 1 chút xíu), em xin có 1 chút gợi ý theo cách hiểu của em về vấn đề này như sau: trong cái file cad mà bác phamthanhhungks đã gửi em đã xem qua, không biết có phải bác nói cái thư viện ấy tuyệt vời ở chỗ tức là các block có thể co kéo 1 cách thoải mái, ví dụ bác muốn bề rộng cửa là 2m thì bác chỉ cần kích vào block đấy và gõ 2 là nó sẽ tự động stretch ra bề rộng 2 m có phải không? Nếu là phải thì những sự tiện lợi đó đều do chức năng tạo block của cad 2007 có được. Bây giờ bác cứ kích kép vào 1 block như thế và khi cái hộp thoại edit block defeniton nó hiện ra bác hãy nhấn ok, nó sẽ mở ra 1 cửa sổ mới cho bác sửa cái block này. Trong phần này bác có thể chuyển nền thành black để dễ thao tác như trong model bằng cách vào options và chọn display, bác chon black color là xong. Xong rồi, trong cửa sổ này có 1 thanh công cụ rất hay trong đó có các chức năng như stretch, move , scale, rotation... nó gọi cái này là Block authoring panlettes - All panlettes. Bác có thể dùng công cụ này để sửa block 1 cách tuỳ ý. sau khi đã tạo được các block như ý bác hãy chọn nút close bock editor trên thanh tastbar và save block vừa sửa lại là xong. Điều đặc biệt khi sử dụng các block này là mặc dù cùng 1 tên block nhưng khi bác copy và sửa chữa - co kéo các block mới này thì các block cùng tên khác ko bị thay đổi theo. Em cũng mới tìm hiểu về chức năng sửa block này nên vẫn chưa hiểu hêt được nó và các công cụ sử dụng như thế nào,...?! Nếu cao nhân nào biết và chỉ bảo thêm thì thật tuyệt! Em thấy sử dụng chức năng này của block rất tiện lợi và hay. Các bác cho biết thêm thông tin nhé! thanks!
  • 0

#1677 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 March 2009 - 09:42 PM

Chào bạn sucuph,
Lisp đầy đủ đây ạ:

(defun c:gocdoc ( / ent p1 cao_text sp ep ang dodoc thap_phan)
(vl-load-com)
(setq ent (entsel "\nChon mai doc:"))
(setq cao_text 0.5
thap_phan 2
p1 (cadr ent)
ent (car ent)
sp (vlax-curve-getStartPoint ent)
ep (vlax-curve-getEndPoint ent)
ang (angle sp ep)
dodoc (* (abs (/ (sin ang) (cos ang))) 100)
dodoc (strcat (rtos dodoc 2 thap_phan) "%"))
(command "_.text" (list (car p1) (+ 5 (cadr p1))) cao_text (/ (* ang 180) pi) (strcat " Do doc mai la " dodoc))
)

Bạn lưu ý là khi lisp yêu cầu bạn chọn mái doc thì bạn phải chọn vào đúng mái dốc cần xác định độ dốc chứ không được nhấn enter ngay nha.
Khi góc dốc >pi/2 bạn sẽ thấy text bị lộn ngược và tùy theo ý bạn có thể để nguyên hay rotate nó nhé.
Bạn lưu ý thêm là mình có thay đổi cái cách xác định góc xoay của text do hàm angle trả ra giá trị theo radian mà lệnh text yêu cầu nhập giá trị theo độ.
Trong trường hợp mái dốc của bạn không phải là đường line thì góc ang sẽ là góc của điểm đầu và điểm cuối của đường polyline hay spline đó bạn nhé.
Mình đã chạy thử lisp ngon.
Chúc bạn vui và thành công.

Chào bác phamthanhBinh
Việc đặt cố định điểm ghi Text cố định và chiều cao chữ cố định là hơi bị gò bó, chưa được theo ý muốn của người sử dụng. nên có thêm điểm đặt text và chiều cao chữ thì sẽ hợp ý với nguời sử dụng hơn.

Không phải góc dốc lớn hơn >pi/2 bạn sẽ thấy text bị lộn ngược đâu bác Bình ạ mà khi vẽ đường line từ phải qua trái (tức là điểm đầu nằm bên phải, điểm cuối nằm bên trái hay (Xdau>Xcuoi)
thì chắc chắn Text sẽ bị lộn ngược ở cả 2 trường hợp góc dốc >pi/2 và góc dốc nhỏ hơn pi/ 2
Như vậy bác phải bổ sung vào Lisp hàm if :
Nếu Xdau < Xcuoi thì làm theo trường hợp trên của bác (Text không bị lộn ngược)
Nếu Xdau > Xcuoi thì xử lý sao cho Text không bị lộn ngược

Bác xem điều đó có đúng không nhé?
  • 0

#1678 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 07 March 2009 - 12:18 AM

Chào bác phamthanhBinh
....
Nếu Xdau < Xcuoi thì làm theo trường hợp trên của bác (Text không bị lộn ngược)
Nếu Xdau > Xcuoi thì xử lý sao cho Text không bị lộn ngược

Bác xem điều đó có đúng không nhé?


Xin góp một hàm giúp cho "text" lúc nào cũng quay đầu lên trên trong mọi trường hợp. Tôi đã ứng dụng thường xuyên để vẽ text cự li trong bản đổ. Đó là hàm gocve
(defun gocve( goc)
(if (and (> goc 90.0) (< goc 270.0)) (+ goc 180.0) goc)
)

Cách dùng như sau : Giả sử vẽ text tại điểm p, độ cao h, góc nghiêng g
(command "_.text" p h (gocve g) text)
  • 0

#1679 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 07 March 2009 - 11:40 AM

Chào bạn nguyenkhoadung98,
Đây là cái lisp mình cải tiến theo cái ý mình nói ở trên. Bạn dùng thử và cho mình biết ý kiến nhé.

(defun c:Lj (/ dt ssdt sodt index ans);;; Make Command

(setq index 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ename (ssdt /);;; Get etype of the object ename
(cdr (assoc '0 (entget ssdt)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun MoPL (ssdt /);;; Check the open polyline
(= (cdr (assoc '70 (entget ssdt))) 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun NoiPL (ssdt /);;; Joint the polyline
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" (ssget) "" "")

)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun NoiLC (ssdt /);;; Joint the line to polyline
(command ".PEDIT" ssdt "Y" "J" (ssget) "" "")

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Main (dt / );;; Get object and joint
(setq
dt (entsel)
;;;sodt (sslength dt)
;;;index 0
)
;;;(repeat sodt
(setq
ssdt (car dt)

)
(if (or (= (ename ssdt) "LWPOLYLINE") (= (ename ssdt) "POLYLINE"))
(NoiPL ssdt)
)
(if (or (= (ename ssdt) "LINE") (= (ename ssdt) "ARC"))
(progn
(NoiLC ssdt)
(setq index (1+ index))
)
)
(setq ans (getstring "\nBan muon tiep tuc ? "))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Check (/ans);;; Check continuing condition

(if (= ans "y")
(main dt)

)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(Main dt)
(while (= ans "y")
(check ans)
)
(alert (strcat "Ban da noi " (itoa index) " Line thanh Plolyline"))

(princ)
)
Lệnh sử dụng là LJ (line joint) bạn nhé.

cảm ơn bạn nhiều lắm. mình đã dùng thử nhưng mà lệnh này nó bắt mình phải chọn những 2 lần các đoạn thẳng cần nối, đầu tiên phải chọn sau đó đánh lệnh LJ sau đó lại chọn lại các đoạn cần nối, :undecided: liệu có cách nào chỉ cần đánh lệnh rồi chọn và enter là đuợc kô vậy bạn
  • 0

#1680 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 07 March 2009 - 11:43 AM

Xin góp một hàm giúp cho "text" lúc nào cũng quay đầu lên trên trong mọi trường hợp. Tôi đã ứng dụng thường xuyên để vẽ text cự li trong bản đổ. Đó là hàm gocve
(defun gocve( goc)
(if (and (> goc 90.0) (< goc 270.0)) (+ goc 180.0) goc)
)

Cách dùng như sau : Giả sử vẽ text tại điểm p, độ cao h, góc nghiêng g
(command "_.text" p h (gocve g) text)

Chào các bác Tdvn và Tue_nv,
Đúng như các bác đã góp ý, cái này là do trình độ của mình còn non nên chưa thực sự hiểu hết về các thuộc tính của các hàm (command...). Xin chân thành cám ơn sự góp ý của các bác và mình sẽ hoàn thiện thêm cái lisp này theo chỉ dẫn của các bác rồi sẽ post lên nhờ các bác chỉ bảo tiếp. Tuy nhiên, bữa nay suýt 8-3 nên mình có tí việc chưa sửa ngay được, mong các bác thông cảm nhé.
Rất mong được sự quan tâm chỉ bảo thêm của các bác để mình tự hoàn thiện bản thân.
Chúc các bác luôn vui khỏe và yêu đời, yêu người và yêu ....mình.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.