Đến nội dung


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

Viết lisp theo yêu cầu [phần 2]


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

#281 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 18 October 2009 - 11:27 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.

Lisp vẽ cung ellipse. Lưu ý:
1. Cung bắt đầu từ Start Angle đến End Angle theo chiều ngược kim đồng hồ. Các giá trị góc từ 0 đến 360 độ (không nhập số âm)
2. Trục dài theo phương X. Nếu bạn đổi (cons 11 (list R 0 0)) thành (cons 11 (list 0 R 0)) thì trục dài sẽ theo phương Y

;;;--------------------------------------------------
(defun C:CE( / p R k a1 a2 pr1 pr2) ;;;Cung Ellipse
(setq
p (getpoint "\nCenter:")
R (getreal "\nMajor radius:")
k (getreal "\nRadius ratio (r/R):")
a1 (dtr (getreal "\nStart angle (degree):"))
a2 (dtr (getreal "\nEnd angle (degree):"))
pr1 (parael a1 k)
pr2 (parael a2 k)
)
(entmake (list
(cons 0 "ELLIPSE") (cons 100 "AcDbEntity") (cons 100 "AcDbEllipse")
(cons 10 p) (cons 11 (list R 0 0)) (cons 210 (list 0 0 1))
(cons 40 k) (cons 41 pr1) (cons 42 pr2)
))
(princ)
)
;;;--------------------------------------------------
(defun parael (a k) ;;;Calc parameter of ellipse
(setq para (atan (/ (tang a) k)))
(if (and (> a (* 0.5 pi)) (< a (* 1.5 pi))) (setq para (- para pi)))
para
)
;;;--------------------------------------------------
(defun dtr(x) (/ (* x pi) 180) ) ;;;Change degree to radian
;;;--------------------------------------------------
(defun tang(x) (/ (sin x) (cos x)) ) ;;;Tang
;;;--------------------------------------------------

  • 4

#282 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 25 October 2009 - 03:39 PM

1. svba có thể xem ở đây : Bài viết số 14 và bài viết số 17
2. Em có thể minh họa bằng file .dwg được không?

Cảm ơn anh Tue_NV!
1. Em đã thử cả 2 lisp nd.lsp của bác duy782006 và bác NguyenHoanh nhưng đều không sử dụng được. lisp của anh Duy sau khi "select object" xong không thấy có kết quả, còn lisp của anh Hoành thì sau khi gõ lệnh xong không thấy thực hiện lệnh. Anh check lại giùm em.
2. Bài toán của em có thể mô tả một cách đơn giản thế này:
Cho một đối tượng bất kỳ và 2 điểm A, B bất kỳ có thể thuộc hay không thuộc đối tượng. Làm thế nào để xoay đối tượng quanh điểm A với bán kính là AB?
(Em không up được file dwg lên do hệ thống upload của Diễn đàn bị lỗi).
  • 0
http://khuyen.space

#283 michoma

michoma

    biết zoom

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

Đã gửi 25 October 2009 - 05:25 PM

*Tiện ích đổi màu của layer thuộc đối tượng chọn.
-Tên lệnh: DML
-Thao tác:
+Nhập lệnh DML
+Chọn 1 đối tượng thuộc layer muốn đổi màu.
+Chọn màu muốn thay
-Layer chứa đối tượng sẽ được sửa thành màu vừa chọn.
day!!!!!



ủa mình thử với cad07 nhưng ko thấy có lệnh này , phiên bản mấy mới có vậy bạn
  • 0

#284 michoma

michoma

    biết zoom

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

Đã gửi 25 October 2009 - 05:32 PM

Sao không sử dụng lệnh của cad nhỉ?? :bigsmile:
Lệnh: LAYER


lệnh đó thì nói làm gì , lệnh đó phải chọn layer hơi lâu , muốn nhanh hơn 1 chút ấy mà
  • 0

#285 hoanghaiyp

hoanghaiyp

    biết lệnh minsert

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

Đã gửi 25 October 2009 - 05:49 PM

2. Bài toán của em có thể mô tả một cách đơn giản thế này:
Cho một đối tượng bất kỳ và 2 điểm A, B bất kỳ có thể thuộc hay không thuộc đối tượng. Làm thế nào để xoay đối tượng quanh điểm A với bán kính là AB?
(Em không up được file dwg lên do hệ thống upload của Diễn đàn bị lỗi).

@ Svba 1608:Bạn có thể tả kỹ hơn hoặc chụp ảnh màn hình. Điểm A và B có cùng nằm trong mặt phẳng ?
Có cần phải nhập giá trị bán kính không? Nếu tất cả trong đối tượng cùng trong Mp, sao bạn không dùng lệnh Rotate với một góc nào đấy?
  • 0

#286 duytrung

duytrung

    biết pan

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

Đã gửi 27 October 2009 - 08:38 AM

1-Các bạn có biết cái lisp mà khi bên layout ta tạo khung macview theo 1 tỷ lệ 1/x thì :
-Text, dim (arrow size, text) đều theo 1 cỡ quy định.Mình tìm hoài mà không thấy nó ở mục nào.
2-Trong cad 2007 1 lần mình vào menuload load 1 chuong trình thiết kế cống sử dụng lisp thì các thanh menu toolbars mất đi, bây giờ muốn lấy lại mình vào lại menuload nhưng k thấy cái acad. nữa. Bạn nào biết tại sao không.
  • 0

#287 trieubb

trieubb

    biết vẽ ellipse

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

Đã gửi 27 October 2009 - 06:27 PM

Đây là phần tiếp theo của topic Viết lisp theo yêu cầu, mời các bạn tiếp tục thảo luận.


Bác Hoanh có cách nào mà bắt cái hàm getfiled nó tự động ghi luôn không bác
  • 0

#288 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 29 October 2009 - 12:20 PM

Mình đã nhiều lần gặp trường hợp như bạn trong công việc. đây là lisp mình tìm được trên diễn đàn này. mình đã sửa lại 1 chút để bạn có thể sử dụng được cả 4 phép tính. Nó có tác dụng cộng, hoặc trừ, hoặc nhân, hoặc chia tất cả các text số mà bạn chọn với một số mà bạn nhập vào.
lệnh là: cong; tru; nhan; chia.


(defun c:cong()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so muon cong them: "))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
(repeat (sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent (entget txt_name))
(setq cont (cdr(assoc 1 txt_ent)))
(setq cont (atof cont))
(setq s (+ cont n))
(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
(entmod txt_ent)
(setq i (+ i 1))
);repeat
);defun
;------------------------------------------------------
(defun c:tru()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so tru: "))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
(repeat (sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent (entget txt_name))
(setq cont (cdr(assoc 1 txt_ent)))
(setq cont (atof cont))
(setq s (- cont n))
(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
(entmod txt_ent)
(setq i (+ i 1))
);repeat
);defun
;------------------------------------------------------
(defun c:nhan()
(setq i 0 s1 0)
(setq n (getreal "\nnhap so muon nhan: "))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
(repeat (sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent (entget txt_name))
(setq cont (cdr(assoc 1 txt_ent)))
(setq cont (atof cont))
(setq s (* cont n))
(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
(entmod txt_ent)
(setq i (+ i 1))
);repeat
);defun
;------------------------------------------------------
(defun c:chia()
(setq i 0 s1 0)
(setq n (getreal "\nnhap mau so: "))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
(repeat (sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent (entget txt_name))
(setq cont (cdr(assoc 1 txt_ent)))
(setq cont (atof cont))
(setq s (/ cont n))
(setq txt_ent (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
(entmod txt_ent)
(setq i (+ i 1))
);repeat
);defun
;------------------------------------------------------

Chú ý là kết quả tính toán sẽ lấy số chữ số sau dấu phẩy theo Precision trong định dạng Units bản vẽ của bạn. Với text cao độ thường lấy 2 chữ số sau dấu phẩy. bạn nên thiết lập lại Precision trước khi chạy thực hiện lệnh.

Không biết sao mà mình sử dụng lisp này nó kông hiểu, dòng lệnh command vẩn chạy bình thường nhưng kô cho ra kết quả, nhờ bạn kiểm tra lại và chỉ giúp mình với. Thanks!
  • 0

#289 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 29 October 2009 - 12:44 PM

...........
2. Lisp quay đối tượng: thao tác như sau:
+ Nhập lệnh.
+ Chọn tâm quay. (điểm A).
+ Chọn điểm quay. (điểm :tongue2:.
Khi đó ta có thể quay đối tượng theo điểm quay B mà tâm là A. Đến vị trí cần thiết, enter để kết thúc lệnh.

Hy vọng đúng ý bạn.
(defun c:qu (/ ss cen pt )
(if (and
(setq ss (ssget))
(setq cen (getpoint "\nChon tam quay :"))
(setq pt (getpoint cen"\nDiem tham chieu :"))
)
(command "rotate" ss "" cen "r" cen pt pause)
)
(princ)
)

  • 1

#290 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 29 October 2009 - 12:53 PM

Không biết sao mà mình sử dụng lisp này nó kông hiểu, dòng lệnh command vẩn chạy bình thường nhưng kô cho ra kết quả, nhờ bạn kiểm tra lại và chỉ giúp mình với. Thanks!

Mặc dù có nhiều điều phải bàn về Lisp này, nhưng các lệnh cong-tru-nhan-chia vẫn cho kết quả cuối cùng.
-> Lisp chạy tốt.

Bác Hoanh có cách nào mà bắt cái hàm getfiled nó tự động ghi luôn không bác

Giá trị trả về của hàm getfiled là một chuỗi tên file (nếu thành công).
bạn muốn tự động ghi luôn là ghi cái gì ?
  • 0

#291 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 29 October 2009 - 01:40 PM

ủa mình thử với cad07 nhưng ko thấy có lệnh này , phiên bản mấy mới có vậy bạn

Phiên bản mấy cũng có hết miễn là bạn load file lisp bên dưới của mình về và load lê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


#292 nghiautc

nghiautc

    biết lệnh copy

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

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

Phiên bản mấy cũng có hết miễn là bạn load file lisp bên dưới của mình về và load lên!


Chào các bạn mình mới bít lênhj Copym trong Express tool nhưng nó chưa đáp ứng được nhu cầu của mình có bạn nào có thể sửa lại hộ mình với :
Lệnh gốc : copym > Select objects: > Base point: > Second point or[Repeat (last)/Divide/Measure/Array (dynamic)/Undo] : m >Select measure ending point>Select measure ending point:
Giờ mình muốn thay đổi lisp để tự đông tùy chọn Measure đế lisp thay đổi như sau
lenh moi : copym > Select objects: > Base point: >>Select measure ending point>Select measure ending point:

Mình cũng đã có lisp copy liên tục trên diễn đàn nhưng lisp do không có tuỳ chọn điểm cuối như copym, khi muốn undo lại thì phải undo lại nhiều lần, thỉnh thoảng nó lại copy sai vị trí.Mình cảm ơn
  • 0

#293 t031285

t031285

    biết vẽ rectang

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

Đã gửi 29 October 2009 - 04:24 PM

Mong các bạn giúp giùm mình 1 lisp dùng như sau? Thí dụ trên bản vẽ có nhiều block nằm rải rác khắp nơi,có lisp nào khi ta chọn tất cả các block đó thì nó sẽ hiện toạ độ tâm của tất cả các block đó,tọa độ của block nào thì nằm kế block đó.Tọa độ tính từ trục toạ độ (0,0).Chân thành cảm ơn.
  • 0

#294 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 October 2009 - 04:43 PM

Mong các bạn giúp giùm mình 1 lisp dùng như sau? Thí dụ trên bản vẽ có nhiều block nằm rải rác khắp nơi,có lisp nào khi ta chọn tất cả các block đó thì nó sẽ hiện toạ độ tâm của tất cả các block đó,tọa độ của block nào thì nằm kế block đó.Tọa độ tính từ trục toạ độ (0,0).Chân thành cảm ơn.

Chào t031285
Tọa độ tính từ trục toạ độ (0,0). Cái này không có vấn đề gì.
Riêng từ nằm kế -> cho Tue_NV hỏi lại 1 chút nhé : Tính từ toạ độ 0,0 nằm kế có nghĩa là gì?
nằm kế bên trái toạ độ (0,0) hay nằm kế bên phải toạ độ (0,0)
nằm kế bên trên toạ độ (0,0) hay nằm kế bên dưới toạ độ (0,0).

Bạn sử dụng từ ngữ khó hiểu quá. Nếu mà làm hợp đồng mà sử dụng từ ngữ theo kiểu này thì toi, thiệt hại cho mình đấy bạn à. Tue_NV góp ý thẳng với bạn. Đừng giận mình nhé.
  • 0

#295 t031285

t031285

    biết vẽ rectang

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

Đã gửi 29 October 2009 - 05:04 PM

Chào t031285
Tọa độ tính từ trục toạ độ (0,0). Cái này không có vấn đề gì.
Riêng từ nằm kế -> cho Tue_NV hỏi lại 1 chút nhé : Tính từ toạ độ 0,0 nằm kế có nghĩa là gì?
nằm kế bên trái toạ độ (0,0) hay nằm kế bên phải toạ độ (0,0)
nằm kế bên trên toạ độ (0,0) hay nằm kế bên dưới toạ độ (0,0).

Bạn sử dụng từ ngữ khó hiểu quá. Nếu mà làm hợp đồng mà sử dụng từ ngữ theo kiểu này thì toi, thiệt hại cho mình đấy bạn à. Tue_NV góp ý thẳng với bạn. Đừng giận mình nhé.

ý mình là như vầy giả sử mình có 5 block,thí dụ bock 5 có toạ độ là (5,5) thì khi dùng lisp chọn block 5 thì nó sẽ hiện (5,5) bên cạnh block 5 bên trái hay phải,trên dưới đều được.Chân thành cảm ơn bạn trước.
  • 0

#296 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 October 2009 - 05:37 PM

ý mình là như vầy giả sử mình có 5 block,thí dụ bock 5 có toạ độ là (5,5) thì khi dùng lisp chọn block 5 thì nó sẽ hiện (5,5) bên cạnh block 5 bên trái hay phải,trên dưới đều được.Chân thành cảm ơn bạn trước.

Bạn thử cái này xem thế nào? Có gì chưa được thì Tue_NV sẽ chỉnh lại :

(defun c:tdb(/ ent cao tam ang)
(setq ent (car(entsel"\n Pick chon Block :")))
(setq cao (getdist "\n Nhap chieu cao Text :"))
(setq tam (cdr(assoc 10 (entget ent))))
(setq ang (cdr(assoc 50 (entget ent))))
(wtxt (strcat "(" (rtos (car tam) 2 0) "," (rtos (cadr tam) 2 0) ")")
(getpoint "\n Diem dat Text :") ang cao)

)
;
(defun wtxt (txt p ang h / sty)
(setq sty (getvar "textstyle"))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p)
(cons 72 0) (cons 73 1) (cons 50 ang) (cons 40 h) (cons 41 1))
)
)

  • 0

#297 t031285

t031285

    biết vẽ rectang

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

Đã gửi 30 October 2009 - 08:50 AM

Bạn thử cái này xem thế nào? Có gì chưa được thì Tue_NV sẽ chỉnh lại :

(defun c:tdb(/ ent cao tam ang)
(setq ent (car(entsel"\n Pick chon Block :")))
(setq cao (getdist "\n Nhap chieu cao Text :"))
(setq tam (cdr(assoc 10 (entget ent))))
(setq ang (cdr(assoc 50 (entget ent))))
(wtxt (strcat "(" (rtos (car tam) 2 0) "," (rtos (cadr tam) 2 0) ")")
(getpoint "\n Diem dat Text :") ang cao)

)
;
(defun wtxt (txt p ang h / sty)
(setq sty (getvar "textstyle"))
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p)
(cons 72 0) (cons 73 1) (cons 50 ang) (cons 40 h) (cons 41 1))
)
)

Cảm ơn bạn đã nhiệt tình giúp đỡ,mình muốn nhờ bạn sửa lại làm sao nó có thể ghi được toạ độ của bất kỳ hình nào không riêng gì block và khi chọn đối tượng thì có thể chọn được nhiều đối tượng và ghi ra toạ độ của tất cả các đối tượng đó cùng 1 lúc.
  • 0

#298 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 30 October 2009 - 03:15 PM

trước đây Bác Hòanh có viết một lisp " di chuyển dấu chấm thập phân text đến trùng với point tương ứng". Nay nhờ các bạn viết lisp di chuyển các text sao cho điểm chèn text trùng các point tương ứng. Cụ thể như sau: bản vẽ có nhiều text, mỗi text có một point tương ứng nằm gần text, vị trí text so với point hơi tự do một chút, nghĩa là vị trí text so với point không phải lúc nào cũng bằng nhau. Yêu cầu chương trình: sau khi gõ lệnh, chọn tất cả text và point một lúc, enter, lệnh thực hiện.
Cám ơn trước .
  • 0

#299 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 30 October 2009 - 03:56 PM

Cảm ơn bạn đã nhiệt tình giúp đỡ,mình muốn nhờ bạn sửa lại làm sao nó có thể ghi được toạ độ của bất kỳ hình nào không riêng gì block và khi chọn đối tượng thì có thể chọn được nhiều đối tượng và ghi ra toạ độ của tất cả các đối tượng đó cùng 1 lúc.

Chào bạn t031285,
Để có thể giúp bạn, bạn hãy cho biết định nghĩa cái tâm của đối tượng là gì đã bạn ạ. Có rất nhiều loại đối tượng trên bản vẽ, nào là đoạn thẳng, cung tròn, elip, block, text, ......... Mỗi loại đối tượng cần phải có cái định nghĩa về tâm của nó mới được bạn ạ.
Mong bạn sớm trả lời yêu cầu này thì mọi người mới giúp bạn được.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#300 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 30 October 2009 - 06:29 PM

Chào bạn t031285,
Để có thể giúp bạn, bạn hãy cho biết định nghĩa cái tâm của đối tượng là gì đã bạn ạ. Có rất nhiều loại đối tượng trên bản vẽ, nào là đoạn thẳng, cung tròn, elip, block, text, ......... Mỗi loại đối tượng cần phải có cái định nghĩa về tâm của nó mới được bạn ạ.
Mong bạn sớm trả lời yêu cầu này thì mọi người mới giúp bạn được.

Bạn nói đúng,có rất nhiều đối tượng trên hình vẽ,vậy mình chỉ cần các đối tượng là hình tròn,hình vuông,hình chữ nhật,và các point.Nếu có thể là block của các hình này nếu bác và bác tue có thể giúp được.Cái quan trọng là làm sao khi chọn tất cả các đối tượng trên thì nó sẽ xuất toạ độ của các điểm đã chọn.Thanks.
  • 0