Đế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

#1761 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 31 March 2009 - 10:06 AM


Chào mọi người!
Mình muốn in nhiều bản vẽ trong một file (như trắc ngang của đường chẳng hạn) thì phải kích đi kích lại nhiều lần khổ quá. Bác nào cho mình xin cái lisp để in một lần nhiều bản theo khung tên, hoặc theo một block nào đó đã định dạng trước được không? Cảm ơn nhiều.

bạn tìm kiếm trên diễn đàn với từ MPLOT
  • 0

#1762 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 31 March 2009 - 12:57 PM

Chào bạn Nguyenkhoadung98,
Rất tiếc mình không mở được file bản vẽ bạn gửi do mình dùng cad2004. Do vậy vẫn chưa hiểu được yêu cầu của bạn.
Nếu không phiền, bạn có thể upload lại cái file của bạn ở version cad2004 để mình có thể tham khảo. Việc tạo cái lisp như yêu cầu của bạn mình không dám chắc sẽ thành công nhưng sẽ cố gắng thử xem sau khi nắm rõ yêu cầu của bạn.
Chúc bạn vui.


xin cảm ơn bạn bình rất nhiều ( lần trước cũng là bạn jup mình :cry: ) mình up lại cái bản cad 2004 để bạn xem cảm ơn bạn nhiều

http://www.cadviet.c...s/Drawing11.dwg
  • 0

#1763 conghoan1003

conghoan1003

    biết vẽ point

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

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

bạn tìm kiếm trên diễn đàn với từ MPLOT

Cảm ơn nhiều! vậy là từ nay đỡ khổ rồi. mà mình thấy nó ko cho hiệu chỉnh theo ý mình (canh trái, canh phải, chừa lề), a có thể bổ sung thêm được không?
  • 0
Học học nữa học mãi.
Đúp học lại!

#1764 transu

transu

    biết vẽ spline

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

Đã gửi 31 March 2009 - 02:37 PM

chào các cao thủ cadviet.
mong các bạn hướng dẫn mình cách thay đổi dạng text này sang dạng text khác. mà vẫn hiện thị tiếng việt
vì mình có 1 số file mà máy mình ko có phông chữ đó nên nó ko hiểu.
thank...
  • 0

#1765 q288

q288

    biết lệnh fillet

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

Đã gửi 31 March 2009 - 04:10 PM

Chương trình rải "cột đèn". Bạn thử dùng chương trình này xem. Tuy nhiên nó chỉ dùng được với đường thẳng thôi, còn polyline và circle thi phức tạp hơn nhiều.

(defun c:dsc()
(vl-load-com)
(princ "\nChon vat copy...") ;; Chon block "chieusang" hoac bat cu vat the nao khac
(setq ss (ssget))
(setq e1 (entsel "\nHay lua chon so ma ban muon copy : ") ;; Chon Text
ent (entget (car e1)))

(setq os (getvar "OSMODE"))
(setvar "OSMODE" 1)

(setq di1 (getpoint "\nTu diem:")
di2 (getpoint di1 "\nDen diem:")
ang (angle di1 di2)
n 1)

(setq tx (cdr (assoc 1 ent))
m (vl-string-search "-" tx)
a1 (substr tx 1 m)
a2 (substr tx (+ 2 m))
a3 (atoi (substr a2 1 1))
a4 (ascii (substr a2 2 1)))

(setq kc (getreal (strcat "\nBuoc copy <" (rtos (getvar "USERR1")) ">:")))
(if (not kc )
(setq kc (getvar "USERR1"))
(setvar "USERR1" kc))

(setq sl (fix (/ (distance di2 di1) kc)))

(setvar "osmode" 0)
(repeat sl
(command "copy" ss "" di1 (polar di1 ang (* n kc)))
(command "copy" e1 "" di1 (polar di1 ang (* n kc)))
(setq e (entlast)
a3 (1+ a3))
(if (<= (1+ a4) 99) (setq a4 (1+ a4)) (setq a4 97))
(setq chu (strcat a1 "-" (itoa a3) (chr a4)))
(setq ent (entget e)
ent (subst (cons 1 chu) (assoc 1 ent) ent))
(entmod ent)
(setq n (1+ n))
)
(setvar "OSMODE" os)
)
  • 0

#1766 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 31 March 2009 - 10:05 PM

xin cảm ơn bạn bình rất nhiều ( lần trước cũng là bạn jup mình :cry: ) mình up lại cái bản cad 2004 để bạn xem cảm ơn bạn nhiều

http://www.cadviet.c...s/Drawing11.dwg

Chào bạn nguyenkhoadung98,
Bạn xài thử lisp này xem nhé. Có gì chưa được bạn hãy post lên để mình kiểm tra và sửa lại.
(defun C:idc ()
(setq dt (entsel "/n Chon doi tuong goc")
dc (entsel "/n Chon duong chuan")
txt (entsel "/n Chon text goc")
kc (getreal "/n Chon khoang cach giua cac đoi tuong")
pg (getpoint " Chon diem goc copy")
elst (entget (car txt))
text (cdr (assoc 1 elst))
t1 (substr text 1 6)
t2 (substr text 7 1)
t3 (substr text 8 1)
gt (cdr (assoc 50 elst))
h (cdr (assoc 40 elst))
)
(command "measure" dc kc)
(setq ss (ssget "p")
i 0
n (sslength ss)
)
(if (and (= (cdr (assoc 72 elst)) 0) (= (cdr (assoc 73 elst)) 0))
(setq pt (cdr (assoc 10 elst)))
(setq pt (cdr (assoc 11 elst)))
)
(while (< i n)
(setq p0 (cdr (assoc 10 (entget (ssname ss i)))))
(if (/= nil (ssname ss (1+ i)))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1+ i))))))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1- i))))))
)
(setq gr (angle p0 p1)
gd (/ (* gr 180) pi)
)
(if (and (> gd 90) (< gd 270))
(setq gd (+ gd 180))
)
(if (/= (atoi t2) nil)
(setq t4 (+ i (atoi t2) 1))
(setq t4 100)
)
(if (or (> (ascii t3) 67) (< (ascii t3) 65))
(setq t5 (chr 65))
(setq t5 t3)
)
(if (= 0 (rem i 3))
(setq t5 (chr (+ (ascii t5) 1)))
(if (= 1 (rem i 3))
(setq t5 (chr (+ (ascii t5) 2)))
)
)
(command "copy" dt "" pg p0)
(command "text" (list (car p0) (+ (cadr p0) 20)) h gd (strcase (strcat t1 (itoa t4) t5) nil))
(setq i (1+ i))
)
)

Lệnh chạy lisp là idc bạn nhé. Lisp này có thể đành số cột dọc theo line, polyline, spline bạn ạ.

Chúc bạn vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1767 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 01 April 2009 - 08:17 AM

Chào bạn nguyenkhoadung98,
Bạn xài thử lisp này xem nhé. Có gì chưa được bạn hãy post lên để mình kiểm tra và sửa lại.

(defun C:idc ()
(setq dt (entsel "/n Chon doi tuong goc")
dc (entsel "/n Chon duong chuan")
txt (entsel "/n Chon text goc")
kc (getreal "/n Chon khoang cach giua cac đoi tuong")
pg (getpoint " Chon diem goc copy")
elst (entget (car txt))
text (cdr (assoc 1 elst))
t1 (substr text 1 6)
t2 (substr text 7 1)
t3 (substr text 8 1)
gt (cdr (assoc 50 elst))
h (cdr (assoc 40 elst))
)
(command "measure" dc kc)
(setq ss (ssget "p")
i 0
n (sslength ss)
)
(if (and (= (cdr (assoc 72 elst)) 0) (= (cdr (assoc 73 elst)) 0))
(setq pt (cdr (assoc 10 elst)))
(setq pt (cdr (assoc 11 elst)))
)
(while (< i n)
(setq p0 (cdr (assoc 10 (entget (ssname ss i)))))
(if (/= nil (ssname ss (1+ i)))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1+ i))))))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1- i))))))
)
(setq gr (angle p0 p1)
gd (/ (* gr 180) pi)
)
(if (and (> gd 90) (< gd 270))
(setq gd (+ gd 180))
)
(if (/= (atoi t2) nil)
(setq t4 (+ i (atoi t2) 1))
(setq t4 100)
)
(if (or (> (ascii t3) 67) (< (ascii t3) 65))
(setq t5 (chr 65))
(setq t5 t3)
)
(if (= 0 (rem i 3))
(setq t5 (chr (+ (ascii t5) 1)))
(if (= 1 (rem i 3))
(setq t5 (chr (+ (ascii t5) 2)))
)
)
(command "copy" dt "" pg p0)
(command "text" (list (car p0) (+ (cadr p0) 20)) h gd (strcase (strcat t1 (itoa t4) t5) nil))
(setq i (1+ i))
)
)

Lệnh chạy lisp là idc bạn nhé. Lisp này có thể đành số cột dọc theo line, polyline, spline bạn ạ.

Chào bác phamthanhbinh
(command "measure" dc kc)
Dòng lệnh này chỉ đúng với đường thẳng Line thôi chứ đường Pline hoặc Spline thì không còn đúng nữa bác Binh à.
Lí do không đúng nữa là trục cột điện khi dùng với mã lệnh trên không vuông góc với trục của Pline hay Spline.
Bác thử dùng lệnh measure với đối tượng Block nhé. Vì khi chèn Block với lệnh Measure thì ta có thể xoay trục cột điện vuông góc với trục của đường Pline, Spline.

Command: me MEASURE
Select object to measure:
Specify length of segment or [Block]: B

Enter name of block to insert: d0

Align block with object? [Yes/No] : y

Specify length of segment:

Mã Dxf của tên Block là 2. (2 . "d0")

Còn một điểm nữa là file Lisp của bác chạy trong trường hợp là rải khoảng cách giữa các trụ đèn đều bằng nhau.
Không biết ý của bạn Nguyenkhoadung có muốn rải khoảng cách bằng nhau hay không?
Nhưng mình biết ý của bạn là chọn từng điểm second point làm điểm đích copy các trụ đèn và chắc rằng khoảng cách giữa các trụ sẽ không bằng nhau trên thực tế.
Nếu khoảng cách giữa các trụ đèn bằng nhau thì nói chung là ổn.
Còn nếu khoảng cách rải không bằng nhau thì với đường Pline hay Spline thì rất khó bác Bình à. Mình cũng chưa có cách gì trong trường hợp này cả. Mong mọi người cùng góp ý thảo luận để Code trên thành công trọn vẹn.
Đôi lời góp ý cùng bác.
Chúc bác vui và thành công.
  • 1

#1768 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 01 April 2009 - 02:22 PM

Chào bác phamthanhbinh
(command "measure" dc kc)
Dòng lệnh này chỉ đúng với đường thẳng Line thôi chứ đường Pline hoặc Spline thì không còn đúng nữa bác Binh à.
Lí do không đúng nữa là trục cột điện khi dùng với mã lệnh trên không vuông góc với trục của Pline hay Spline.
Bác thử dùng lệnh measure với đối tượng Block nhé. Vì khi chèn Block với lệnh Measure thì ta có thể xoay trục cột điện vuông góc với trục của đường Pline, Spline.

Command: me MEASURE
Select object to measure:
Specify length of segment or [Block]: B

Enter name of block to insert: d0

Align block with object? [Yes/No] : y

Specify length of segment:

Mã Dxf của tên Block là 2. (2 . "d0")

Còn một điểm nữa là file Lisp của bác chạy trong trường hợp là rải khoảng cách giữa các trụ đèn đều bằng nhau.
Không biết ý của bạn Nguyenkhoadung có muốn rải khoảng cách bằng nhau hay không?
Nhưng mình biết ý của bạn là chọn từng điểm second point làm điểm đích copy các trụ đèn và chắc rằng khoảng cách giữa các trụ sẽ không bằng nhau trên thực tế.
Nếu khoảng cách giữa các trụ đèn bằng nhau thì nói chung là ổn.
Còn nếu khoảng cách rải không bằng nhau thì với đường Pline hay Spline thì rất khó bác Bình à. Mình cũng chưa có cách gì trong trường hợp này cả. Mong mọi người cùng góp ý thảo luận để Code trên thành công trọn vẹn.
Đôi lời góp ý cùng bác.
Chúc bác vui và thành công.

Cám ơn bác Tue_NV về chỉ dẫn cách copy với lệnh block. Với cách này thì giả sử đối tượng không phải block ta cũng có thể tạo block cho nó được. Quả thật là mình chưa nghĩ tới điều này.
Tuy nhiên với đối tượng không phải block, thực ra vẫn có cách để copy cho nó "vuông góc" với đường chuẩn được bác ạ. Đó là tạo một chuẩn ảo trên đối tượng cần copy. Sau đó sử dụng chuẩn ảo này để canh vuong góc với đường nối hai điểm trên đường chuẩn. Sở dĩ mình chưa làm phần này là vì bạn nguyenkhoadung chưa yêu cầu là cái cột phải vuông góc với đường chuẩn mà chỉ nói là copy về điểm đặt đó thôi. Mình muốn bạn ấy nhìn thấy lỗi của lisp để có thể hiểu được cần trình bày cụ thể hơn về cái yêu cầu của mình mới giúp người viết lisp viết hoàn chỉnh được.
Về khoảng cách giữa các trụ cũng vậy, thực ra mình hiểu là cách đều chứ bạn nguyenkhoadung không nói vậy. Trong trường hợp khoảng cách không đều có thể dùng hàm vlax-curve-getpointatdis để xác dịnh các điểm đặt của cột. Về các hàm vlax do mình còn hiểu lơ mơ lắm nên chưa dám mạnh dạn xài nó . Mình cũng định chờ bài phản hồi của bạn nguyenkhoadung rồi sẽ hoàn chỉnh nó cho chuẩn với yêu cầu của bạn ấy.
Rất cám ơn bác đã góp ý chân tình. Mình cũng đã học mót được rất nhiều bài học từ bác. Rất mong bác luôn giữ được bầu nhiệt huyết của mình. Kính chúc bác vạn sự như ý.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1769 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 01 April 2009 - 03:34 PM

Chào cả nhà!
Trong cad có đường spline khó chịu quá, nó không cho trim, offset, hoặc nối các đoạn lại thành plyline. Ai biết có lệnh (hoặc lisp) nào chuyển spline sang polyline không? Chỉ giúp mình với. Thank!
  • 0
Học học nữa học mãi.
Đúp học lại!

#1770 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 01 April 2009 - 03:44 PM

chào các cao thủ cadviet.
mong các bạn hướng dẫn mình cách thay đổi dạng text này sang dạng text khác. mà vẫn hiện thị tiếng việt
vì mình có 1 số file mà máy mình ko có phông chữ đó nên nó ko hiểu.
thank...

Mình nghĩ nếu máy bạn thiếu font gì thì tìm cài vô cho nó thì hay hơn đó. Vì sau này mình còn dung nhiều mà. Nếu không bạn thử cách này nhé.
Bạn vô Format/text style. Sau đó chọn kiểu chữ và đổi lại font mà máy bạn có nhung lưu ý là phải cùng bản mã nhé nếu không nó lại lỗi đó.
Chúc bạn thanh công!
  • 0
Học học nữa học mãi.
Đúp học lại!

#1771 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 01 April 2009 - 04:57 PM

Chào cả nhà!
Trong cad có đường spline khó chịu quá, nó không cho trim, offset, hoặc nối các đoạn lại thành plyline. Ai biết có lệnh (hoặc lisp) nào chuyển spline sang polyline không? Chỉ giúp mình với. Thank!

Hì hì, chào bạn conghoan1003,
Mình chưa hiểu bạn nói gì vì cái spline mà mình tạo trên Cad2004 thì nó cho trim, cho copy, cho move, cho ofset ..... tùm lum hết. Tệ thế chứ. Còn bạn muốn đổi spline thành polyline thì trên diễn đàn đã có cái líp của bác SSG. Bạn chịu khó tìm sẽ thấy ngay ý mà. Mình nhớ là trong topic Autolisp ấy bạn ạ. Ở đó có nhiều lisp hay lắm. Mình mót mãi chả hết được. Tại tham lam nên mót về rồi cất đâu chả nhớ nữa. Để mình tìm lại. Nếu thấy mình sẽ post lên bạn nhé.
Chúc bạn thành cô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.

#1772 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 02 April 2009 - 08:27 AM

Hì hì, chào bạn conghoan1003,
Mình chưa hiểu bạn nói gì vì cái spline mà mình tạo trên Cad2004 thì nó cho trim, cho copy, cho move, cho ofset ..... tùm lum hết. Tệ thế chứ. Còn bạn muốn đổi spline thành polyline thì trên diễn đàn đã có cái líp của bác SSG. Bạn chịu khó tìm sẽ thấy ngay ý mà. Mình nhớ là trong topic Autolisp ấy bạn ạ. Ở đó có nhiều lisp hay lắm. Mình mót mãi chả hết được. Tại tham lam nên mót về rồi cất đâu chả nhớ nữa. Để mình tìm lại. Nếu thấy mình sẽ post lên bạn nhé.
Chúc bạn thành công.

Chào bạn Thanh Bình!
Cảm ơn bạn nhiều!
Đúng ra là các đường spline nó cho trim, offset nhưng hiểu “trở trời” thế nào mà nó lại không cho làm trim, offset trong một số bản vẽ chẳng hiều nữa, nhất là trong các bản vẽ bình đồ (của đường). Mình làm thiết kế nên hay gặp trường hợp này lắm. Mỗi lần như thế mình lại phải vẽ lại bằng polyline.
Chúc sức khoẻ!
  • 0
Học học nữa học mãi.
Đúp học lại!

#1773 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 02 April 2009 - 09:05 AM

Chào anh ssq!
E có đọc được bài viết về cái lisp đo chiều dài của các đoạn polyline của anh, em thấy cái này hay quá, em đang cần mà khổ nỗi em chẳng biết viết lisp nên không thể them mắm thêm muôi vô được. Anh có thể giúp em hoàn thiện được không?
Em xin nhắc lại mục đích em cần là đo tấc cả các đường thẳng, polyline được quét (quét một lần càng tốt) và ghi chiều dài của nó ở cuối đoạn đó luôn.
Cảm ơn anh nhiều!
  • 0
Học học nữa học mãi.
Đúp học lại!

#1774 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 02 April 2009 - 03:59 PM

chào các bạn, mình lại mạo muội nhờ các bạn viết dùng mình 1 lisp để làm như sau :

mình có đường (polyline hoặc cong) và cần lisp tự động đánh số các cột đèn theo thứ tự T1/L1-1A, T1/L1-2B, T1/L1-3C, T1/L1-4A.....ban đầu có T1/L1-1A mình chỉ cần click vào chữ cần đánh (T1/L1-1A) chọn đường cần al theo lisp sẽ tự động đánh tiếp vào các block kế tiếp với điểm gốc cần đánh như trong bản vẽ kèm theo.
http://www.cadviet.c...Drawing1_37.dwg
ở bản vẽ đã có đầy đủ thông tin :cry: cảm ơn các bạn nhiều.

mình thấy cái lisp mình yêu cầu nó gần như công 2 cái lisp này vào làm 1, kô bít có giúp đc j cho các bạn viết jiup kô :cry:

cái lisp này là để đánh số cột đèn tăng dần ví dụ như T1/L1-1A sẽ thành T1/L1-2B, T1/L1-3C, T1/L1-4A.....

Vì không có thời gian nên xin góp ý về bài này của phamthanhbinh như sau:
Theo hình thì yêu cầu là vẽ cột và đánh số lại tên. Số lượng và khoảng cách cột được nhập vào chứ không nhất thiết là toàn bộ đường cong. Vì vậy cách của bạn phamthanhbinh ngoài việc chưa xoay hình và text không cùng format với text gốc thì cũng chỉ chạy đúng khi hình gốc trùng với điểm đầu và hướng vẽ từ đầu đến điểm cuối của đường cong. Ngoài ra lại còn xuất hiện thêm nhiều point nữa.
Tôi nghĩ là nên làm như sau:
Chọn đường cong:
(setq plineObj (car (entsel "\nHay chon duong polyline ")))
Lấy diểm thứ hai
(vlax-curve-getpointatdist plineObj khoangcach)
trong đó khoảng cách phải chú ý chiều, có thể tăng hoặc giảm dần
lấy hướng của tiếp tuyến với đường cong
(vlax-curve-getFirstDeriv plineObj param)
trong đó param tính theo
(setq param (vlax-curve-getParamAtDist plineObj khoangcach))
Sau đó dựa vào 2 điểm và hướng tiếp tuyến, dùng lệnh ALIGN để copy cột và tên đến điểm thứ hai rồi sửa lại tên cột theo cách của tác giả
Nhưng còn các vấn đề mà nguyenkhoadung98 không nói rõ là
-Điểm đầu tiên không nằm trên đường chuẩn thì thế nào? Lúc đó có định lại là điểm gần nhất nằm trên đường chuẩn hay không
-Khi ra ngoài đường chuẩn thì kết thúc hay kéo dài bằng 1 line từ điểm cuối có hướng trùng với tiếp tuyến
-Đây là trường hợp copy theo khoảng cách là theo đường cong hay là đường chim bay vì dây điện thì thẳng.
Nếu là trường hợp thứ 2 thì tôi nghĩ là vẽ 1 đường tròn, tìm giao điểm với đường chuẩn. Nếu có nhiều giao điểm thì lấy điểm nào gần với điểm tính được theo cách thứ 1 rồi làm theo cách trên
  • 2

#1775 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 02 April 2009 - 04:49 PM

Chào bạn Thanh Bình!
Cảm ơn bạn nhiều!
Đúng ra là các đường spline nó cho trim, offset nhưng hiểu “trở trời” thế nào mà nó lại không cho làm trim, offset trong một số bản vẽ chẳng hiều nữa, nhất là trong các bản vẽ bình đồ (của đường). Mình làm thiết kế nên hay gặp trường hợp này lắm. Mỗi lần như thế mình lại phải vẽ lại bằng polyline.
Chúc sức khoẻ!

cái này là do các đường spline của bác nó nằm ở các cao độ khác nhau thì làm sao mà trim được.
  • 0

#1776 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 02 April 2009 - 09:55 PM

cái này là do các đường spline của bác nó nằm ở các cao độ khác nhau thì làm sao mà trim được.

À thì ra là thế, Cảm ơn bác nhiều nghe!
vậy bác có biết cách nào để có thể trim nó không, chỉ dùm mình với.
Thank!
  • 0
Học học nữa học mãi.
Đúp học lại!

#1777 dovanlinh

dovanlinh

    biết vẽ arc

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

Đã gửi 02 April 2009 - 10:26 PM

chào các bác. em có vấn đề này cần các bác giúp. không biêt các bác có thề viêt hộ em 1 lisp dùng để thống kê thép bản được không?
cụ thể nó gồm các cột như sau;
tên cấu kiên, quy cách( với thép bàn ví dụ là -12x2000x200),dầy, dài, rộng, diện tích, số lượng trong 1 cấu kiện, số cấu kiện, tổng diện tích, tổng trọng lượng. mong các banc giúp em. nếu bác nào hay tính công trình thép ma có cái này thì co thể cho em xin được không? cám ơn các bác !
  • 0
49XD1

#1778 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 03 April 2009 - 10:25 AM

Chào bạn nguyenkhoadung98,
Bạn xài thử lisp này xem nhé. Có gì chưa được bạn hãy post lên để mình kiểm tra và sửa lại.

(defun C:idc ()
(setq dt (entsel "/n Chon doi tuong goc")
dc (entsel "/n Chon duong chuan")
txt (entsel "/n Chon text goc")
kc (getreal "/n Chon khoang cach giua cac đoi tuong")
pg (getpoint " Chon diem goc copy")
elst (entget (car txt))
text (cdr (assoc 1 elst))
t1 (substr text 1 6)
t2 (substr text 7 1)
t3 (substr text 8 1)
gt (cdr (assoc 50 elst))
h (cdr (assoc 40 elst))
)
(command "measure" dc kc)
(setq ss (ssget "p")
i 0
n (sslength ss)
)
(if (and (= (cdr (assoc 72 elst)) 0) (= (cdr (assoc 73 elst)) 0))
(setq pt (cdr (assoc 10 elst)))
(setq pt (cdr (assoc 11 elst)))
)
(while (< i n)
(setq p0 (cdr (assoc 10 (entget (ssname ss i)))))
(if (/= nil (ssname ss (1+ i)))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1+ i))))))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1- i))))))
)
(setq gr (angle p0 p1)
gd (/ (* gr 180) pi)
)
(if (and (> gd 90) (< gd 270))
(setq gd (+ gd 180))
)
(if (/= (atoi t2) nil)
(setq t4 (+ i (atoi t2) 1))
(setq t4 100)
)
(if (or (> (ascii t3) 67) (< (ascii t3) 65))
(setq t5 (chr 65))
(setq t5 t3)
)
(if (= 0 (rem i 3))
(setq t5 (chr (+ (ascii t5) 1)))
(if (= 1 (rem i 3))
(setq t5 (chr (+ (ascii t5) 2)))
)
)
(command "copy" dt "" pg p0)
(command "text" (list (car p0) (+ (cadr p0) 20)) h gd (strcase (strcat t1 (itoa t4) t5) nil))
(setq i (1+ i))
)
)

Lệnh chạy lisp là idc bạn nhé. Lisp này có thể đành số cột dọc theo line, polyline, spline bạn ạ.

Chúc bạn vui.



Cảm ơn bạn Bình và các bạn tue,ndtnv nhiều, lisp của bạn về cơ bản đúng như ý mình nhưng như bác ndtnv nói mình còn 1 số điểm như sau :

1- nó chưa làm được với đường pl,spline và đường cong (vì lúc rải block nó kô vuông góc với đường như khi mình me ) mà mình dùng chủ yếu là loại đường này
2- text sau khi dùng lisp nó kô đứng cạnh cái block như text gốc ( nó đứng xa hơn ) và nó kô có cùng đặc tính như text gốc ( cái này kô wa cần thiết bạn bỏ wa cũng đc)
3- thứ tự đánh nó lại là T2/L1-1A sau lại đến T2/L1-13A,T2/L1-12C...trong khi mình muốn là T2/L1-1A,T2/L1-2B,T2/L1-3C....T2/L1-13A
ngoài ra trả lời bạn Tue_NV là đúng là mình cần khoảng cách giữa các block là bằng nhau bạn ạ. cảm ơn các bạn đã quan tâm
mình gửi kèm bản vẽ miêu tả :cry:

http://www.cadviet.c...Drawing11_1.dwg
  • 1

#1779 q288

q288

    biết lệnh fillet

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

Đã gửi 03 April 2009 - 11:27 AM

Chào anh ssq!
E có đọc được bài viết về cái lisp đo chiều dài của các đoạn polyline của anh, em thấy cái này hay quá, em đang cần mà khổ nỗi em chẳng biết viết lisp nên không thể them mắm thêm muôi vô được. Anh có thể giúp em hoàn thiện được không?
Em xin nhắc lại mục đích em cần là đo tấc cả các đường thẳng, polyline được quét (quét một lần càng tốt) và ghi chiều dài của nó ở cuối đoạn đó luôn.
Cảm ơn anh nhiều!


Bạn thử dùng ct này xem sao và cho ý kiến. Tên lệnh là "docd".Nó đo line, polyline, arc.

http://www.cadviet.c...pfiles/docd.lsp
  • 0

#1780 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 April 2009 - 08:01 PM

Cảm ơn bạn Bình và các bạn tue,ndtnv nhiều, lisp của bạn về cơ bản đúng như ý mình nhưng như bác ndtnv nói mình còn 1 số điểm như sau :

1- nó chưa làm được với đường pl,spline và đường cong (vì lúc rải block nó kô vuông góc với đường như khi mình me ) mà mình dùng chủ yếu là loại đường này
2- text sau khi dùng lisp nó kô đứng cạnh cái block như text gốc ( nó đứng xa hơn ) và nó kô có cùng đặc tính như text gốc ( cái này kô wa cần thiết bạn bỏ wa cũng đc)
3- thứ tự đánh nó lại là T2/L1-1A sau lại đến T2/L1-13A,T2/L1-12C...trong khi mình muốn là T2/L1-1A,T2/L1-2B,T2/L1-3C....T2/L1-13A
ngoài ra trả lời bạn Tue_NV là đúng là mình cần khoảng cách giữa các block là bằng nhau bạn ạ. cảm ơn các bạn đã quan tâm
mình gửi kèm bản vẽ miêu tả :cry:

http://www.cadviet.c...Drawing11_1.dwg

Chào bạn nguyenkhoadung98,
Bạn dùng thử cái lisp mình đã sửa này nhé. Có thể nó chưa đúng hoàn toàn với ý bạn, nhưng mình xin giải thích một chút như sau:
1/- Do bản vẽ Drawing11_1.dwg bạn post lên mình không mở được nên mình sử dụng bản vẽ lần trước để thử nghiệm.
2/- Bạn không nói rõ việc cùng đặc tính nên mình mới cho nó về cùng lớp với text gốc, còn việc trùng style text mình mày mò chưa ra mà chỉ làm cùng cao độ text mẫu thôi. Việc xác định vị trí text như bài trước mình đã nói là hoàn toàn bạn có thể thay đổi mà. Trong lisp này dựa vào điều bạn đã viết mình suy luận và lấy vị trí đặt text là cùng khoảng cách tương đối với điểm chèn của block d0. Nhưng do góc text thay đổi theo đường cong nên nó cũng không chuẩn như trên hình mẫu. Góc text ở đây mình lấy theo các cặp điểm chèn liền kề chứ chưa lấy theo tiếp tuyến như bác ndtnv nói được.
3/- Thứ tự thay đổi các text từ lisp lần trước mình đã kiểm rồi và thấy nó chạy rất chuẩn mà bạn. Lần này mình cũng không thay đổi gì phần này. Bạn kiểm tra lại nhé. Bạn lưu ý là do mình chọn text mẫu chỉ có 8 ký tự nên nếu bạn thay đổi số ký tự của cái text mẫu là thua luôn đấy. Mình dùng hàm (substr ....) để cắt chuỗi mà.
4/- Trong lisp này mình dựa vào góp ý của bác Tue_NV để chỉnh cho cột vuông góc với đường chuẩn và bổ sung thêm việc chèn block và text vào điểm bắt đầu của đường chuẩn.
5/- Cái góp ý của bác ndtnv cực kỳ hay, nhưng do mình chưa thạo lắm về các hàm vlax nên còn đang loay hoay, chưa thể viết ngay cho bạn được. Bạn ráng chờ mấy bữa nữa nhé để mình tìm hiểu kỹ thêm rồi sẽ viết lại lisp khác hay hơn theo ý bác ndtnv.
Trước mắt bạn dùng tạm cái lisp này, có thể sẽ giúp bạn phần nào.
(defun C:idc ()
(setq dt (entsel "/n Chon doi tuong goc")
pg (getpoint " Chon diem goc doi tuong de copy")
txt (entsel "/n Chon text goc")
dc (entsel "/n Chon duong chuan")
kc (getreal "/n Chon khoang cach giua cac doi tuong: ")
elst (entget (car txt))
text (cdr (assoc 1 elst))
t1 (substr text 1 6)
t2 (substr text 7 1)
t3 (substr text 8 1)
gt (cdr (assoc 50 elst))
h (cdr (assoc 40 elst))
bn (cdr (assoc 2 (entget (car dt))))
lt (cdr (assoc 8 elst))
st (cdr (assoc 7 elst))
mt (cdr (assoc 62 elst))
)
(command "measure" dc "b" bn "y" kc)
(setq ss (ssget "p")
i 0
n (sslength ss)
p0 (cdr (assoc 10 (entget (car dc))))
p1 (cdr (assoc 10 (entget (ssname ss 0))))
gr (angle p0 p1)
gd (/ (* gr 180) pi)
)
(command "insert" bn "r" gd p0 "" "" "")

(if (or (= (cdr (assoc 72 elst)) 0) (= (cdr (assoc 73 elst)) 0))
(setq pt (cdr (assoc 10 elst)))
(setq pt (cdr (assoc 11 elst)))
)
(setq a (- (car pt) (car pg))
b (- (cadr pt) (cadr pg))
)
(command "text" (list (+ (car p0) a) (+ (cadr p0) b)) h gd (strcase text nil))
(while (< i n)
(setq p0 (cdr (assoc 10 (entget (ssname ss i)))))
(if (/= nil (ssname ss (1+ i)))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1+ i))))))
(setq p1 (cdr (assoc 10 (entget (ssname ss (1- i))))))
)
(setq gr (angle p0 p1)
gd (/ (* gr 180) pi)
)
(if (and (> gd 90) (< gd 270))
(setq gd (+ gd 180))
)
(if (/= (atoi t2) nil)
(setq t4 (+ i (atoi t2) 1))
(setq t4 100)
)
(if (or (> (ascii t3) 67) (< (ascii t3) 65))
(setq t5 (chr 65))
(setq t5 t3)
)
(if (= 0 (rem i 3))
(setq t5 (chr (+ (ascii t5) 1)))
(if (= 1 (rem i 3))
(setq t5 (chr (+ (ascii t5) 2)))
)
)
;;;(command "copy" dt "" pg p0)
(command "layer" "m" lt "" "")
(command "text" (list (+ (car p0) a) (+ (cadr p0) b)) h gd (strcase (strcat t1 (itoa t4) t5) nil))
(setq i (1+ i))
)
)
Chúc bạn vui.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.