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

#1741 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 10 September 2010 - 11:20 AM

mình mới chập chững nghiên cứu, ko biết cái mã DXF này dùng để làm gì?? :undecided: :bigsmile:

Chào bạn hdg2318.
Cad quản lý các đối tượng thông qua các mã DXF này của đối tượng bạn ạ. Khi bạn hiểu rõ về các mã DXF này bạn có thể thay đổi các đối tượng này theo hướng bạn mong muốn.
Về lý thuyết thì không phải tất cả các mã này bạn đều có thể sử dụng được vì có một số mã do Cad tự sinh ra trong quá trình hình thành đối tượng để quản lý nó. Tuy nhiên có rất nhiều mã mà người dùng có thể can thiệp vào được để thay đổi đối tượng. Cái này thì phải làm dần sẽ vỡ ra mà thôi. Bản thân mình cũng chỉ hiểu sơ sơ như vậy và cứ thế mà vọc từ từ thôi.
Rất mong bạn hiểu rõ hơn về các mã này.
@ Bạn nguyentuyen6: Khi có các mã DXF của đối tượng, bạn phải sử dụng các hàm như entmake, entmakes để tạo đối tượng mới, Hàm subst để thay thế các mã DXF đã có thành các mã dxf mới của đối tượng và hàm entmod để hiển thị lại đối tượng đã được thay thế mã dxf. Cụ thể hơn bạn có thể tìm hiểu trong Developer Help của CAD bạn ạ.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1742 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 10 September 2010 - 11:35 AM

- Anh em quên bài này à http://www.cadviet.c...o...st&p=106697
- Xem giúp mình với :undecided:

Chào Bachngoctung,
Quên ư???
Bạn có theo dõi vấn đề bạn đặt ra hay không vậy??? Bản thân mình đã có bài phản hồi , nhưng có thấy bạn ứ hự gì đâu mà bảo quên với nhớ.
Bạn muốn mọi người giúp bạn thì phải cung cấp đầy đủ thông tin về vấn đề bạn đưa ra, đồng thời phải theo dõi và trả lời các câu hỏi mà mọi người đặt ra quanh vấn đề của bạn chứ.
Bạn muốn bắt mọi người phải hiểu vấn đề y như bạn hiểu sao???? Khó đấy, không phải ai cũng giỏi về cái chuyên môn của bạn như bạn đâu.
Hơn nữa với cùng một vấn đề sẽ có thể có nhiều giải pháp để giải quyết chứ không phải chỉ có một giải pháp duy nhất. Do vậy mỗi thành viên sẽ có cách suy nghĩ khác nhau để giải quyết vấn đề của bạn. Mình cũng như những người khác vậy thôi, chả ai muốn làm một việc vô ích cả, do vậy mới có những câu hỏi ngược trở lại để hiểu rõ hơn cũng như đề xuất các giải pháp có thể giúp bạn. Nếu bạn không trả lời thì làm sao để xác tín rằng cái việc mình sẽ làm là phù hợp với yêu cầu của bạn. Và như vậy thì làm làm chi cho mất công nhể???
Diễn đàn là một nơi công cộng, bạn nên tôn trọng mọi người trước khi yêu cầu mọi người phải tôn trọng bạn bạn ạ. Đừng chỉ biết đòi hỏi ở người khác mà không quan tâm xem người khác nghĩ gì...
Vài lời góp ý mong bạn chớ giận......
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1743 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 10 September 2010 - 11:43 AM

Thank bác Tbình nhiều.
Hixx. E bây h mới bắt đầu tìm hiểu về líp. bây h nhìn luôn vào code của bác thực sự em thấy hoa hết cả mắt. Em cũng đã thu? sửa lại code của bác mà không hiểu đc gì nhiều. Tự nhiên tiếp xúc với bao nhiêu hàm mà không hiểu gì về nó nhiều. đọng đến cái gì cũng phải giở HELP cả. Chưa hiểu được bản chất của hàm nên việc đọc - hiểu cũng đá khó khăn lắm rùi. Về hàm:
(setq tlx (cdr (assoc 41 (entget (car (entsel "\n Chon block nguon")))))) thực ra e cũng đã xào nấu lại được trước khi hỏi bác rùi nhưng ko thể sửa dc. Ví dụ như khi dùng hàm ssg để lấy thông tin DFX của OBJ thì lại kô biết làm sao để MODIFIY nó. E tìm hiểu thì hình như dùng hàm "entmod" gì đó. Hix. Mong bác giúp e.......

Bạn xài thử cái này và hãy so sánh nó với cái trước để tìm sự khác biệt trong đó bạn nhé. Mình cũng chỉ xào nấu lại thôi mà. Gia vị thì cứ tùy miệng thôi. Hề hề hề....

(defun c:chsize ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq tlx (cdr (assoc 41 ebl))
tly (cdr (assoc 42 ebl))
tlz (cdr (assoc 43 ebl))
)
(setq bng nil)
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
)


(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
ans (getstring "\n Chon ti le scale (tlx or tly or tlz): ")
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)

)
(if (= ans "tlx") (setq tl tlx)
(if (= ans "tly") (setq tl tly)
(if (= ans "tlz") (setq tl tlz) (setq tl 1))))

(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(setq e (entnext e))
)
)


PS: Vì là xào nấu lại nên vẫn còn những tàn dư của code cũ mà mình chưa sửa vì nó không ảnh hưởng gì nhiều tới kết quả. Rất mong bạn cố gắng xử lý nốt các thằng vô tích sự ấy 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.

#1744 bumchiu2005

bumchiu2005

    Chưa sử dụng CAD

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

Đã gửi 10 September 2010 - 12:05 PM

Các bác cho em hỏi về lisp tạo hệ thống lưới toạ độ với ạ !
  • 0

#1745 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 10 September 2010 - 02:06 PM

Bạn xài thử cái này và hãy so sánh nó với cái trước để tìm sự khác biệt trong đó bạn nhé. Mình cũng chỉ xào nấu lại thôi mà. Gia vị thì cứ tùy miệng thôi. Hề hề hề....


(defun c:chsize ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq tlx (cdr (assoc 41 ebl))
tly (cdr (assoc 42 ebl))
tlz (cdr (assoc 43 ebl))
)
(setq bng nil)
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
)
(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
ans (getstring "\n Chon ti le scale (tlx or tly or tlz): ")
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)

)
(if (= ans "tlx") (setq tl tlx)
(if (= ans "tly") (setq tl tly)
(if (= ans "tlz") (setq tl tlz) (setq tl 1))))

(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(setq e (entnext e))
)
)


PS: Vì là xào nấu lại nên vẫn còn những tàn dư của code cũ mà mình chưa sửa vì nó không ảnh hưởng gì nhiều tới kết quả. Rất mong bạn cố gắng xử lý nốt các thằng vô tích sự ấy nhé.


E down cái này về dùng không được bác ạ. Dùng líp xong nó vẫn trơ trơ ra. Nhưng cũng dựa vào nó để sửa được một đoạn như thế nay:

;; free lisp from cadviet.com

(defun c:cs ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq bln (cdr (assoc 2 ebl))
ent (cdr (assoc -2 (tblsearch "block" bln)))
)
(setq tlx (cdr (assoc 41 ebl)))
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
(setq bng nil)
)
(while ent
(setq els (entget ent))
(if (= (cdr (assoc 0 els)) "TEXT" )
(progn
(setq stl (cdr (assoc 7 els))
ht (cdr (assoc 40 els))
stlst (append stlst (list stl))
htlst (append htlst (list(append stlst (list ht))))
stlst (list)
)
)
)
(if (= (cdr (assoc 0 els )) "DIMENSION")
(progn
(setq bld (cdr (assoc 2 els))
sd (cdr (assoc 3 els))
ent1 (cdr (assoc -2 (tblsearch "block" bld)))
)
(while ent1
(setq els1 (entget ent1))
(if (= (cdr (assoc 0 els1)) "MTEXT")
(progn
(setq std (cdr (assoc 7 els1))
hd (* tlx (cdr(assoc 40 els1)));;;;;;;;;
sdlst (append sdlst (list sd))
sdlst (append sdlst (list std))
hdlst (append hdlst (list (append sdlst (list hd))))
sdlst (list)
)
)
)
(setq ent1 (entnext ent1))
)
)
)

(setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls htlst
(if (= (car ls) st)
(setq el (subst (cons 40 (* tlx (cadr ls))) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
e2 (entnext (entnext e1))
e3 (entnext e2)
)
(foreach ls1 hdlst
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object et))
;(vla-put-textheight di (* tlx (caddr ls1)))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)

(setq i (1+ i))
)
(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls lst1
(if (= (car ls) st)
(setq el (subst (cons 40 (* tlx (cadr ls))) (assoc 40 el) el))

)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(foreach ls1 lst2
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object e))
;(vla-put-textheight di (* tlx (caddr ls1)))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)


Với TEXT va` MTEXT thì dùng rất ngon, nhưng với Dim thì lại bị sai. Bác chỉnh lại giúp e cái vụ DIM với nhé. Chỉnh theo líp này luôn vì e không muốn mình nhập cái tỷ lệ block 1 cách thủ công bác a.
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1746 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 10 September 2010 - 03:37 PM

- Anh em quên bài này à http://www.cadviet.c...o...st&p=106697
- Xem giúp mình với :undecided:

Một cách rất độc đáo để mã hóa bản vẽ.
Mình đã tìm cách mà text có align left (mã dxf 72 và 73 = 0) mà có dxf 11 khác với (0 0 0) nhưng không được
thì đã xuất hiện trong bản vẽ của bạn.
Bạn dùng thử file này
http://www.cadviet.c...ignment_new.dwg
Bạn xem topic này để biết lý do mình không post code lên
http://www.cadviet.c...p?showtopic=860
Bạn có yêu cầu gì thêm cho file trên thì mình sẽ sửa tiếp.
Nếu không tiện viết lên đây thì hãy gửi vào ndtnve@yahoo.com
  • 2

#1747 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 10 September 2010 - 04:12 PM

E down cái này về dùng không được bác ạ. Dùng líp xong nó vẫn trơ trơ ra. Nhưng cũng dựa vào nó để sửa được một đoạn như thế nay:

Với TEXT va` MTEXT thì dùng rất ngon, nhưng với Dim thì lại bị sai. Bác chỉnh lại giúp e cái vụ DIM với nhé. Chỉnh theo líp này luôn vì e không muốn mình nhập cái tỷ lệ block 1 cách thủ công bác a.

Chào bạn nguyentuyen6.
1/- Bạn cho mình biết bạn đã sử dụng như thế nào mà lisp lại không chạy. Bạn nhớ là nếu bạn chọn vào một block có tỷ lệ scale theo trục bạn chọn là 1 thì đừng mong nó có thay đổi gì. Hơn nữa khi bạn chọn tỷ lệ scale nếu không nhập đúng là các chuỗi tlx, tly hay tlz thì lisp sẽ mặc định biến tl =1 và như vậy thì bạn có muốn nó thay đổi cũng không được bạn ạ. Bạn nên chúy ý tới kết cấu của lisp để chạy mới mong nó chạy đúng được. Lisp này mình dã chạy thử trên file bạn gửi thì trăm phát ăn cả trăm, vậy mà bạn nói không chạy được thì mình thắc mắc quá. Rất mong bạn kiểm chứng lại, nếu cần thì mình sẽ gửi cho bạn file kết quả mình chạy để bạn làm bằng chứng. Hề hề hề
2/- Về cái lisp mà bạn đã sửa lại , mình rất mứng là bạn đã có cố gắng vọc để tìm ra cái bạn cần. song bạn cho mình ít thời gian để mình kiểm lại có gì mình sẽ trao đổi với bạn sau nhé. Hiện tại mình hơi xin xỉn rồi nên khó mà đọc lisp được mong bạn tha lỗi.
Hề hề hề.....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1748 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 10 September 2010 - 04:22 PM

Các bác cho em hỏi cái:
Làm thế nào để lấy được giá trị góc âm. Ví dụ (angle p1 p2) bao giờ cũng ra số dương. Mình muốn lấy góc lơn 180 độ là góc âm và nhỏ hơn 180 độ là góc dương thì làm thế nao? Thank
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1749 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 10 September 2010 - 05:28 PM

Các bác cho em hỏi cái:
Làm thế nào để lấy được giá trị góc âm. Ví dụ (angle p1 p2) bao giờ cũng ra số dương. Mình muốn lấy góc lơn 180 độ là góc âm và nhỏ hơn 180 độ là góc dương thì làm thế nao? Thank

Hề hề hề,
Có phải bạn Phamngoctukts muốn cái này không???

(setq a (* (angle p1 p2) (/ 180 pi)))
(if (> a 180)
(setq a (- a 360))
)

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

#1750 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 10 September 2010 - 07:31 PM

E down cái này về dùng không được bác ạ. Dùng líp xong nó vẫn trơ trơ ra. Nhưng cũng dựa vào nó để sửa được một đoạn như thế nay:

;; free lisp from cadviet.com

(defun c:cs ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq bln (cdr (assoc 2 ebl))
ent (cdr (assoc -2 (tblsearch "block" bln)))
)
(setq tlx (cdr (assoc 41 ebl)))
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
(setq bng nil)
)
(while ent
(setq els (entget ent))
(if (= (cdr (assoc 0 els)) "TEXT" )
(progn
(setq stl (cdr (assoc 7 els))
ht (cdr (assoc 40 els))
stlst (append stlst (list stl))
htlst (append htlst (list(append stlst (list ht))))
stlst (list)
)
)
)
(if (= (cdr (assoc 0 els )) "DIMENSION")
(progn
(setq bld (cdr (assoc 2 els))
sd (cdr (assoc 3 els))
ent1 (cdr (assoc -2 (tblsearch "block" bld)))
)
(while ent1
(setq els1 (entget ent1))
(if (= (cdr (assoc 0 els1)) "MTEXT")
(progn
(setq std (cdr (assoc 7 els1))
hd (* tlx (cdr(assoc 40 els1)));;;;;;;;;
sdlst (append sdlst (list sd))
sdlst (append sdlst (list std))
hdlst (append hdlst (list (append sdlst (list hd))))
sdlst (list)
)
)
)
(setq ent1 (entnext ent1))
)
)
)

(setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls htlst
(if (= (car ls) st)
(setq el (subst (cons 40 (* tlx (cadr ls))) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
e2 (entnext (entnext e1))
e3 (entnext e2)
)
(foreach ls1 hdlst
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object et))
;(vla-put-textheight di (* tlx (caddr ls1)))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)

(setq i (1+ i))
)
(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls lst1
(if (= (car ls) st)
(setq el (subst (cons 40 (* tlx (cadr ls))) (assoc 40 el) el))

)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(foreach ls1 lst2
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object e))
;(vla-put-textheight di (* tlx (caddr ls1)))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)


Với TEXT va` MTEXT thì dùng rất ngon, nhưng với Dim thì lại bị sai. Bác chỉnh lại giúp e cái vụ DIM với nhé. Chỉnh theo líp này luôn vì e không muốn mình nhập cái tỷ lệ block 1 cách thủ công bác a.

Chào bạn nguyentuyen6,
Đọc cái lisp bạn sửa mình thấy có một vài vấn đề muốn trao đổi lại như sau:
1/- Việc bạn tự chỉnh lisp được như vầy là khá tốt rồi mặc dù nó chưa hoàn chỉnh. Nếu bạn chú ý và tìm hiểu kỹ hơn về cái lisp gốc của mình thì sẽ chỉnh được nó ngon lành mà thôi.
2/- Quá trình chỉnh lisp bạn cần căn cứ vào sự thay đổi trong yêu cầu làm lisp thì bạn mới chỉnh tốt được. Rõ ràng hai lần bạn yêu cầu là hai vấn đề khác nhau nên việc bạn giữ gần như nguyên vẹn cái lisp cũ của mình là không hợp lý.
Lần đầu bạn yêu cầu là các text và dim text trong tập đích phải được chỉnh có chiều cao của các text và dim text có cùng stye và dimstyle với nó trong block nguồn. Vì vậy mới có cái việc mình phải tạo ro hai list là htlst và hdlst để lưu giữ các tham số của các text và các dim text trong block nguồn.
Và do đó trong quá trình sử lý các đối tượng trong tập đich mới có việc sử dụng các hàm foreach để lặp qua các phần tử của các list này.
Lần sau bạn chỉ yêu cầu là thay đổi chiều cao của các text và dim text trong tập đích để chúng có chiều cao bằng tích số của chiều cao hiện có với một trong ba tỷ lệ scale theo các trục x,y,z của một block nguồn. Do vậy đâu cần tới việc tạo các list htlst và hdlst làm chi nữa. và như thế thì các hàm foreach trong quá trình xử lý các đối tượng trong tập đích cũng hết sứ mạng của nó rồi bạn ạ.
3/- Mặc dù bạn nói rằng cái lisp bạn sửa chạy tốt cho trường hợp các text và mtext nhưng thực ra trong đó chứa quá nhiều điều không hợp lý. Sở dĩ nó vẫn chạy là do may mắn các text hay mtext trong tập đích bạn chọn có cùng style với một trong các text có trong block nguồn mà thôi. Giả sử có text hay mtext có style khác thì các text này sẽ chả thay đổi được chi cả. Còn với dim text, sở dĩ của bạn chạy sai vì cái (caddr ls1) đâu có liên quan gì tới chiều cao của dim text trong tập đích mà đó là cái tham số dính tới chiều cao của dim text trong tập nguồn bạn ạ. Hoàn toàn chả đúng với cái yêu cầu của bạn nên nó sai là không oan.
4/- Như đã phân tích ở trên nên mình không muốn sửa lại cái bạn đã sửa nữa. Bạn hãy đọc kỹ lại cái lisp mình gửi để thấy sự khác nhau giữa hai lisp và mình khẳng định lại rằng mình đã chạy kiểm tra, lisp đó chạy ngon lành. Chỉ yêu cầu bạn thực hiện đúng các bước như sau:
- Khi lisp yêu cầu bạn chọn block nguồn, bạn phải chọn một block mà có một trong các tỷ lệ scale theo các trục là khác 1, vì nếu bạn chọn block có tỷ lệ scale theo tất cả các trục là 1 thì đương nhiên kết quả sẽ không có sự thay đổi nào cả.
- Khi lisp yêu cầu bạn chọn tỷ lệ scale, bạn phải nhập 1 trong ba chuỗi ký tự có trong ngoặc đơn là tlx, tly hay tlz mà cái giá trị tương ứng của nó là khác 1. Bạn hãy chú y đoạn code:
(if (= ans "tlx") (setq tl tlx)
(if (= ans "tly") (setq tl tly)
(if (= ans "tlz") (setq tl tlz) (setq tl 1))))
Đoạn code này nói rằng nếu chuỗi ký tự bạn nhập không phải là một trong ba chuỗi tlx, tly, tlz nói ở trên thì lisp sẽ tự lấy biến tl là 1 và như thế thì cũng chớ có mong có sự thay đổi nào ở trong tập đích.
Lisp này có nhược điểm là không cho bạn biết các biến tlx, tly, tlz có giá trị là bao nhiêu nên việc bạn chọn thằng nào bạn phải tự cân nhắc sao cho nó khác 1 bạn nhé.
Nếu bạn muốn có cái bảng thông báo giá trị của các biến này bạn hãy bổ sung thêm đoạn code sau đây vào dưới dòng code (alert "/n Chon tap doi tuong dich"):
(alert (strcat "/n Gia tri ty le scale theo truc x (tlx) là: " (rtos tlx 2 2) "/n Gia tri ty le scale theo truc y (tly) là: " (rtos tly 2 2) "/n Gia tri ty le scale theo truc z (tlz) là: " (rtos tlz 2 2)))
Như vậy bạn có thể yên tâm để không chọn nhầm chuỗi ký tự cần nhập khi lisp yêu cầu.

Vậy nhé. chúc bạn đạt được nguyện vọng. Hề hề hề
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1751 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 10 September 2010 - 07:42 PM

Hề hề hề,
Có phải bạn Phamngoctukts muốn cái này không???


(setq a (* (angle p1 p2) (/ 180 pi)))
(if (> a 180)
(setq a (- a 360))
)

Hề hề đúng như mình nghĩ. Đặt câu hỏi xong rồi mới nghĩ ra
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1752 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 10 September 2010 - 11:27 PM

@ bác Tbinh:
HỀ hề hề.
E rất cảm ơn bác đã giúp đỡ và chỉ dẫn rất tận tình cho em các vấn đề e mắc phải.
Tại dốt quá nhìn cái líp của bác cứ tưởng là 2 trong 1. Không biết là bác tách 2 líp ra khác nhau nên cứ đòi đánh 1 lệnh thì "ăn luôn". Bác thông cảm cho e nhé
Còn 2 cái líp này để em sẽ "ngâm cứu" cho nó vào chung 1 lệnh cho phù hợp hơn với công việc của em. CẢm ơn bác rất nhiều....

Đây là 2 cái líp đó:

;; free lisp from cadviet.com
;; Chuyen ve = nhau
(defun c:ch ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)

)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq bln (cdr (assoc 2 ebl))
ent (cdr (assoc -2 (tblsearch "block" bln)))
)
)
(progn
(alert "\n Doi tuong chon khong phai la block, \n Hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
(setq bng nil)
)
(while ent
(setq els (entget ent))
(if (= (cdr (assoc 0 els)) "TEXT" )
(progn
(setq stl (cdr (assoc 7 els))
ht (cdr (assoc 40 els))
stlst (append stlst (list stl))
htlst (append htlst (list(append stlst (list ht))))
stlst (list)
)
)
)
(if (= (cdr (assoc 0 els )) "DIMENSION")
(progn
(setq bld (cdr (assoc 2 els))
sd (cdr (assoc 3 els))
ent1 (cdr (assoc -2 (tblsearch "block" bld)))
)
(while ent1
(setq els1 (entget ent1))
(if (= (cdr (assoc 0 els1)) "MTEXT")
(progn
(setq std (cdr (assoc 7 els1))
hd (cdr(assoc 40 els1))
sdlst (append sdlst (list sd))
sdlst (append sdlst (list std))
hdlst (append hdlst (list (append sdlst (list hd))))
sdlst (list)
)
)
)
(setq ent1 (entnext ent1))
)
)
)

(setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls htlst
(if (= (car ls) st)
(setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
e2 (entnext (entnext e1))
e3 (entnext e2)
)
(foreach ls1 hdlst
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)

(setq i (1+ i))
)
(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls lst1
(if (= (car ls) st)
(setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(foreach ls1 lst2
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)
;;;;



;; free lisp from cadviet.com
;; Scale theo he so scale cua block nguon

(defun c:cs ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq tl (cdr (assoc 41 ebl))

)
(setq bng nil)
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
)
(alert "\n Chon tap doi tuong dich")
;(alert (strcat "\n Gia tri ty le scale theo truc x (tlx) la: " (rtos tl 2 2)))
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)

)



(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)


(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(setq e (entnext e))
)
)


P/S: hàm defun UPWB dùng để lặp lại các lệnh bên trên nếu trong đối tượng Đích có block, Tuy nhiên khi dùng 2 líp này thì nếu đích có blok thì nó lại không chỉnh cho mình mà vẫn giữ nguyên bác à. Bác xem giúp cho e với nhé. Thankss
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1753 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 11 September 2010 - 11:49 AM

@ bác Tbinh:
HỀ hề hề.
E rất cảm ơn bác đã giúp đỡ và chỉ dẫn rất tận tình cho em các vấn đề e mắc phải.
Tại dốt quá nhìn cái líp của bác cứ tưởng là 2 trong 1. Không biết là bác tách 2 líp ra khác nhau nên cứ đòi đánh 1 lệnh thì "ăn luôn". Bác thông cảm cho e nhé
Còn 2 cái líp này để em sẽ "ngâm cứu" cho nó vào chung 1 lệnh cho phù hợp hơn với công việc của em. CẢm ơn bác rất nhiều....

Đây là 2 cái líp đó:

;; free lisp from cadviet.com
;; Chuyen ve = nhau
(defun c:ch ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)

)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq bln (cdr (assoc 2 ebl))
ent (cdr (assoc -2 (tblsearch "block" bln)))
)
)
(progn
(alert "\n Doi tuong chon khong phai la block, \n Hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
(setq bng nil)
)
(while ent
(setq els (entget ent))
(if (= (cdr (assoc 0 els)) "TEXT" )
(progn
(setq stl (cdr (assoc 7 els))
ht (cdr (assoc 40 els))
stlst (append stlst (list stl))
htlst (append htlst (list(append stlst (list ht))))
stlst (list)
)
)
)
(if (= (cdr (assoc 0 els )) "DIMENSION")
(progn
(setq bld (cdr (assoc 2 els))
sd (cdr (assoc 3 els))
ent1 (cdr (assoc -2 (tblsearch "block" bld)))
)
(while ent1
(setq els1 (entget ent1))
(if (= (cdr (assoc 0 els1)) "MTEXT")
(progn
(setq std (cdr (assoc 7 els1))
hd (cdr(assoc 40 els1))
sdlst (append sdlst (list sd))
sdlst (append sdlst (list std))
hdlst (append hdlst (list (append sdlst (list hd))))
sdlst (list)
)
)
)
(setq ent1 (entnext ent1))
)
)
)

(setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls htlst
(if (= (car ls) st)
(setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
e2 (entnext (entnext e1))
e3 (entnext e2)
)
(foreach ls1 hdlst
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)

(setq i (1+ i))
)
(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls lst1
(if (= (car ls) st)
(setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(foreach ls1 lst2
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)
;;;;



;; free lisp from cadviet.com
;; Scale theo he so scale cua block nguon

(defun c:cs ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)
)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq tl (cdr (assoc 41 ebl))

)
(setq bng nil)
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
)
(alert "\n Chon tap doi tuong dich")
;(alert (strcat "\n Gia tri ty le scale theo truc x (tlx) la: " (rtos tl 2 2)))
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)

)

(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)


(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(setq e (entnext e))
)
)


P/S: hàm defun UPWB dùng để lặp lại các lệnh bên trên nếu trong đối tượng Đích có block, Tuy nhiên khi dùng 2 líp này thì nếu đích có blok thì nó lại không chỉnh cho mình mà vẫn giữ nguyên bác à. Bác xem giúp cho e với nhé. Thankss

Hề hề hề,
Tại vì xào nấu mà quên mất mấy món gia vị trước đó nên nó bị xung đột với khẩu vị của bạn đây mà.
Ở cái lisp thứ nhất, nó không chạy là do gia vị mắm muối có hơi thiếu, bạn hãy bổ sung thêm các biến lst1 và lst2 vào trong cái hàm UPWB bạn nhé. Do các biến này là biến toàn cục nên phải khai báo vô hàm nó mới chạy được bạn ạ.

Còn ở lisp thứ hai nó không chạy hàm UPWB là do hơi dư mắm muối nên thằng lisp nó chê bạn ạ. Ở lisp này như đã nói trong bài trước là đâu có cần tới biến htlst và hdlst nữa, vậy mà ở hàm con UPWB mình lại quên béng không loại nó ra (vì tội lười nên mình copy cho nhanh mà không kiểm tra lại, thành thật xin lỗi bạn). Bây giờ bạn hãy bỏ các biến lst1 và lst2 ra khỏi các hàm UPWB là nó sẽ chạy thôi bạn ạ.

Túm lại là việc xào nấu lisp tuy có nhanh hơn việc viết lại nhưng rất dễ bỏ sót lỗi do không kiểm tra lại các biến có hợp lệ hay không bạn ạ. Bạn cũng nên lưu ý điều này khi xào nấu để tránh bị cái lỗi lười như mình.

Rất mong bạn thông cảm. (do khi làm lisp thì mình có kiểm tra và chạy thử nhưng khi post bài thì copy cho nhanh mà lại bị copy nhầm đúng cái lisp chưa sửa bạn ạ, khi sửa lisp mình luôn lưu lại lisp cũ để tham khảo khi cần mà.) Hề hề hề,....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1754 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 11 September 2010 - 08:44 PM

@tbinh: E loay hoay sửa mãi ko dc bác ợ. Làm như bác bảo ở cái (defun UPWB (....) mà cung ko xong. hjx
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#1755 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 12 September 2010 - 02:14 AM

Buồn quá có việc bận nên không offline cùng anh em cadviet được. Thật là tiếc!!!
Ngồi buồn quá dở cái lisp vẽ thang của bác hoành ra sửa lại tí chút cho đúng cấu tạo.
tiện thể port lên đây cho anh em nào cần thì nhậu.
lisp này kết hợp với lisp vẽ lan can sắt của mình thì rất tiện.

(defun c:vtb (/ p c r sb oldos nb bk MBTong1 tl1 angh1 MBTong2 tl2 angh2
MBTong3 tl3 angh3 d oldos di ang p2 p3 p4 dibt pbt1
pbt2 pbt3 el1 el2 el3 ans)
(setvar "cmdecho" 0)
(setq old_layer (getvar "clayer"))
(setq tbl (tblsearch "layer" "_cat"))
(if (= tbl nil) (command "-layer" "n" "_cat" "c" "4" "_cat" ""))
(setq tbl1 (tblsearch "layer" "_hatch"))
(if (= tbl1 nil) (command "-layer" "n" "_hatch" "c" "8" "_hatch" ""))
(setq tbl2 (tblsearch "layer" "_thay"))
(if (= tbl2 nil) (command "-layer" "n" "_thay" "c" "23" "_thay" ""))
(setvar "clayer" "_cat")
(setq nb 20.0 bk 10.0
MBTong1 "ANSI32" tl1 100 angh1 0
MBTong2 "ar-conc" tl2 10 angh2 0
MBTong3 "ANSI31" tl3 200 angh3 0
MBTong4 "ar-sand" tl4 4 angh4 0
p (getpoint "\nVao diem dau tien: ")
c (getdist p "\nVao chieu cao bac: ")
r (getdist p "\nVao chieu rong bac: ")
sb (getint "\nVao so bac: ")
d (getdist "\nVao be day ban thang be tong : ")
oldos (getvar "osmode")
di (* sb (sqrt (+ (* c c) (* r r)) ))
ang (atan (/ c r))
p01 (polar p 0 10)
p02 (polar p01 (/ (* 270 pi) 180) 20)
p03 (polar p02 ang (/ 20 (sin ang)))
p2 (polar p02 ang di)
p22 (polar p2 (/ (* 90 pi) 180) 20)
p222 (polar p22 (/ (* 180 pi) 180) 10)
p3 (polar p03 0 (/ d (sin ang)))
p33 (polar p02 0 (/ d (sin ang)))
p4 (polar p2 (/ (* 3 pi) 2) (/ d (cos ang)))
dibt (/ 10 (cos ang))
pbt1 p02
pbt3 (polar p02 ang (/ (distance p02 p2) sb) )
pbt2 (list (car pbt1) (cadr pbt3) 0)
pbt4 (polar pbt2 (/ (* 90 pi) 180) 10)
)
(setvar "osmode" 0 )
(command ".pline")
(command p)
(repeat sb
(command
(strcat "@0," (rtos (- c (* 2.0 bk))))
(strcat "@" (rtos (- bk nb)) ",0")
"a"
(strcat "@0," (rtos (* 2.0 bk)))
"l"
(strcat "@" (rtos (+ (- nb bk) r)) ",0")
)
)
(command "")
(setq thay (entlast))
(initget "C K")
(setq ans (getkword "\n Ban muon cat qua cau thang hay khong < C / K > :"))
(if (= ans "K")
(progn
(command "pline" p p3 p4 p2 p22 p222 "")
(command "change" "l" "" "p" "la" "_thay" "")
(command "change" thay "" "p" "la" "_thay" "")
)
)
(if (= ans "C")
(progn
(setvar "cmdecho" 0)
(command "line" p p01 "")
(setq el4 (entlast))
(command "pline" p02 p33 p4 p2 "c")
(setq eL (entlast))
(command "hatch" MBTong1 tl1 angh1 eL "")
(command "change" "l" "" "p" "la" "_hatch" "")
(command "hatch" MBTong2 tl2 angh2 eL "")
(command "change" "l" "" "p" "la" "_hatch" "")
(command "pline" pbt1 pbt2 pbt3 "C")
(setq eL1 (entlast))
(command "hatch" MBTong3 tl3 angh3 eL1 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq eL2 (entlast))
(command "line" pbt3 (list (car p) (cadr pbt3) 0) "")
(setq eL3 (entlast))
(command "ucs" "z" p02 p2)
(command "ARray" el1 el2 el3 el4 "" "R" "1" sb (/ di sb))
(command "ucs" "")
(command "-BOUNDARY" pbt4 "")
(setq eL5 (entlast))
(command "rectang" p pbt2)
(setq eL6 (entlast))
(command "hatch" MBTong4 tl4 angh4 eL5 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq eL8 (entlast))
(command "hatch" MBTong4 tl4 angh4 el6 "")
(command "change" "l" "" "p" "la" "_hatch" "")
(setq eL7 (entlast))
(command "ucs" "z" p02 p2)
(command "ARray" eL5 eL6 el7 el8 "" "R" "1" sb (/ di sb))
(command "ucs" "")
)
)
(setvar "osmode" oldos)
(setvar "clayer" old_layer)
(princ)
)

  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#1756 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 12 September 2010 - 12:02 PM

Chào các anh trên diễn đàn!
Các a có thể viết giùm 1 lisp với nội dung như sau được không ạ!
"Có 1 đường pline khép kín, chọn đường pline đó, sau đó pick vào 1 điểm, nếu điểm đó nằm ngoài vòng khép kín của pline thì xóa các đối tượng là text và block nằm phía trong vòng khép kín của pline và ngược lại nếu pick điểm bên ngoài."
- Các a cho e hỏi thêm 1 điều nữa là các a có thể cho e biết code của lệnh "insert" 1 block ATT tạo sẵn vào bản vẽ bằng ngôn ngữ lisp được không a!
Thanks a lots!

  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#1757 phatcui

phatcui

    Chưa sử dụng CAD

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

Đã gửi 12 September 2010 - 01:36 PM

[size="3"][size="2"]chào các anh, em co 1 lisp mà không biết sử dụng thế nào. em nhờ các anh chỉ dùm em cách sử dụng. đây là lisp vẽ đưòng con tích luỹ trông xây dựng đường. em không hiểu cách lập file text và lập toạ độ như thế nào để cad vẽ dúng cả. em xin cảm ơn.


http://www.mediafire...jbuh5atdkp7cfbp
  • 0

#1758 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 13 September 2010 - 10:51 AM

@ bác Tbinh:
HỀ hề hề.
E rất cảm ơn bác đã giúp đỡ và chỉ dẫn rất tận tình cho em các vấn đề e mắc phải.
Tại dốt quá nhìn cái líp của bác cứ tưởng là 2 trong 1. Không biết là bác tách 2 líp ra khác nhau nên cứ đòi đánh 1 lệnh thì "ăn luôn". Bác thông cảm cho e nhé
Còn 2 cái líp này để em sẽ "ngâm cứu" cho nó vào chung 1 lệnh cho phù hợp hơn với công việc của em. CẢm ơn bác rất nhiều....

Đây là 2 cái líp đó:



P/S: hàm defun UPWB dùng để lặp lại các lệnh bên trên nếu trong đối tượng Đích có block, Tuy nhiên khi dùng 2 líp này thì nếu đích có blok thì nó lại không chỉnh cho mình mà vẫn giữ nguyên bác à. Bác xem giúp cho e với nhé. Thankss


Bạn hãy dùng cái này xem nhé. Nếu được thì hãy xem lại cách học của bạn , còn nếu không được thì hãy chờ các cao thủ khác chỉ dạy vì mình chỉ biết đến vậy bạn ạ.

;; free lisp from cadviet.com
;; Chuyen ve = nhau
(defun c:ch ( / bng ebl stlst htlst sdlst hdlst bln ent els stl ht bld sd ent1
els1 std hd sdlst hdlst sst n i et el st bl e1 s1 el1 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))
stlst (list)
htlst (list)
sdlst (list)
hdlst (list)

)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq bln (cdr (assoc 2 ebl))
ent (cdr (assoc -2 (tblsearch "block" bln)))
)
)
(progn
(alert "\n Doi tuong chon khong phai la block, \n Hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
(setq bng nil)
)
(while ent
(setq els (entget ent))
(if (= (cdr (assoc 0 els)) "TEXT" )
(progn
(setq stl (cdr (assoc 7 els))
ht (cdr (assoc 40 els))
stlst (append stlst (list stl))
htlst (append htlst (list(append stlst (list ht))))
stlst (list)
)
)
)
(if (= (cdr (assoc 0 els )) "DIMENSION")
(progn
(setq bld (cdr (assoc 2 els))
sd (cdr (assoc 3 els))
ent1 (cdr (assoc -2 (tblsearch "block" bld)))
)
(while ent1
(setq els1 (entget ent1))
(if (= (cdr (assoc 0 els1)) "MTEXT")
(progn
(setq std (cdr (assoc 7 els1))
hd (cdr(assoc 40 els1))
sdlst (append sdlst (list sd))
sdlst (append sdlst (list std))
hdlst (append hdlst (list (append sdlst (list hd))))
sdlst (list)
)
)
)
(setq ent1 (entnext ent1))
)
)
)

(setq ent (entnext ent))
)

(alert "\n Chon tap doi tuong dich")
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls htlst
(if (= (car ls) st)
(setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))

)
(foreach ls1 hdlst
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et htlst hdlst)
)

(setq i (1+ i))
)
(command "undo" "e")
(princ)

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk lst1 lst2 / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e lst1 lst2)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq st (cdr (assoc 7 el)))
(foreach ls lst1
(if (= (car ls) st)
(setq el (subst (cons 40 (cadr ls)) (assoc 40 el) el))
)
(entmod el)
)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(foreach ls1 lst2
(if (= (car ls1) s1)
(progn
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (caddr ls1))
)
)
)
(command "regen")

)
)

(setq e (entnext e))
)
)
;;;;



;; free lisp from cadviet.com
;; Scale theo he so scale cua block nguon

(defun c:cs ( / bng ebl tl bln ent els stl ht bld sd ent1
sst n i et el st bl e1 s1 el1 e2 e3 k m pt)
(vl-load-com)
(command "undo" "be")
(setq bng (car (entsel " \n Chon doi tuong block nguon "))

)
(while bng
(setq ebl (entget bng))
(if (= (cdr (assoc 0 ebl)) "INSERT")
(progn
(setq tl (cdr (assoc 41 ebl))

)
(setq bng nil)
)
(progn
(alert "\n Doi tuong chon khong phai la block, hay chon lai block chua cac doi tuong nguon")
(setq bng (car (entsel "\n Chon block chua cac doi tuong nguon")))
)
)
)
(alert "\n Chon tap doi tuong dich")
;(alert (strcat "\n Gia tri ty le scale theo truc x (tlx) la: " (rtos tl 2 2)))
(setq sst (ssget (list (cons 0 "TEXT,MTEXT,DIMENSION,INSERT")))
n (sslength sst)
i 0
)
(while (< i n)
(setq et (ssname sst i)
el (entget et)

)

(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)

(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object et))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(if (= (cdr (assoc 0 el)) "INSERT")
(upwb et )
)
(setq i (1+ i))
)
(command "undo" "e")
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun UPWB (blk / e el s st bl e1 s1 el1 k m pt )
(setq s (cdr (assoc 2 (entget blk))))
(setq e (cdr (assoc -2 (tblsearch "BLOCK" s))))
(while e
(setq el (entget e))
(if (wcmatch (cdr (assoc 0 el)) "INSERT")
(UPWB e)
)
(if (or (= (cdr (assoc 0 el)) "TEXT") (= (cdr (assoc 0 el)) "MTEXT"))
(progn
(setq ht (cdr (assoc 40 el)))
(setq el (subst (cons 40 (* tl ht)) (assoc 40 el) el))
(entmod el)
)
)


(If (= (cdr(assoc 0 el)) "DIMENSION")
(progn
(setq bl (cdr (assoc 2 el))
s1 (cdr (assoc 3 el))
e1 (cdr (assoc -2 (tblsearch "block" bl)))
)
(While e1
(setq el1 (entget e1))
(if (= (cdr (assoc 0 el1)) "MTEXT")
(progn
(setq k (cdr (assoc 40 el1)) )
)
)
(setq e1 (entnext e1))
)
(setq di (vlax-ename->vla-object e))
(vla-put-textheight di (* k tl))
(command "regen")
)
)
(setq e (entnext e))
)
)


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

#1759 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 13 September 2010 - 05:33 PM

Chào các anh trên diễn đàn!
Các a có thể viết giùm 1 lisp với nội dung như sau được không ạ!
"Có 1 đường pline khép kín, chọn đường pline đó, sau đó pick vào 1 điểm, nếu điểm đó nằm ngoài vòng khép kín của pline thì xóa các đối tượng là text và block nằm phía trong vòng khép kín của pline và ngược lại nếu pick điểm bên ngoài."
- Các a cho e hỏi thêm 1 điều nữa là các a có thể cho e biết code của lệnh "insert" 1 block ATT tạo sẵn vào bản vẽ bằng ngôn ngữ lisp được không a!
Thanks a lots!

Chào bạn vothanhdn,
Bạn trình bày vấn đề hơi khó hiểu, đề nghị bạn nói lại chính xác vấn đề bạn cần.
Việc insert block có chứ thuộc tính và không chứa thuộc tính về cơ bản là như nhau. Với block có thuộc tính thì bạn phải nhập thêm các giá trị thuộc tính cho phù hợp mà thôi. Cách mà lisp insert block vào bản vẽ là sử dụng với lệnh command bạn ạ.
(command "insert" "blockname" position "" "" att1 att2 .... "")
Bạn cứ làm đúng từng bước như trong khi thực hiện lệnh insert block là Ok.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1760 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 13 September 2010 - 05:49 PM

[size="3"][size="2"]chào các anh, em co 1 lisp mà không biết sử dụng thế nào. em nhờ các anh chỉ dùm em cách sử dụng. đây là lisp vẽ đưòng con tích luỹ trông xây dựng đường. em không hiểu cách lập file text và lập toạ độ như thế nào để cad vẽ dúng cả. em xin cảm ơn.
http://www.mediafire...jbuh5atdkp7cfbp

Chào bạn phatcui,
Căn cứ vào nội dung file lisp bạn gửi mình có thể giải thích cho bạn như sau:
Lisp dựa vào một file text được lập trước có cấu tạo như sau:
Mỗi dòng gồm hai chuỗi số liệu được cách nhau bởi một khoảng trắng. trong đó số liệu phía trước được gọi là biến s2 dùng để xác định giá trị biến a trong khi tạo điểm p2. Còn số liệu phía sau là biến s1 dùng để xác định biến d1 trong khi tạo điểm p3.
Do đó bạn cứ lập các bảng tọa độ có cấu tạo như trên mà chạy thử sẽ hiểu ra là bạn cần làm gì.
Rất mong 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.