Đến nội dung


Hình ảnh
- - - - -

Hỏi về Block thuộc tính với hàm Cons


  • Please log in to reply
19 replies to this topic

#1 18011985

18011985

    biết lệnh properties

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

Đã gửi 16 May 2010 - 02:01 PM

Mình dùng hàm Cons để gọi 1 block thuộc tính, nhưng khi gọi mình không thay được ATTRIB để thay đổi chữ ở trong Block, mong các bạn giúp đỡ để tìm hiểu thêm, cảm ơn các bạn rất nhiều.
(entmake (list (cons 0 "insert") (cons 2 TenBlock) (cons 10 Diem)))
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#2 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 16 May 2010 - 03:46 PM

Mình dùng hàm Cons để gọi 1 block thuộc tính, nhưng khi gọi mình không thay được ATTRIB để thay đổi chữ ở trong Block, mong các bạn giúp đỡ để tìm hiểu thêm, cảm ơn các bạn rất nhiều.
(entmake (list (cons 0 "insert") (cons 2 TenBlock) (cons 10 Diem)))

Bạn tham khảo cái này xem tnào:
(defun c:EdAtt()
(setq Bl (car (entsel "\nChon Block can chinh sua")))
(while (setq Bl (entnext Bl))
(setq Ent (entget Bl)
Vl (getstring (strcat "\nNhap gia tri cho thuoc tinh " (cdr (assoc 2 ent)) ": "))
Ent (subst (cons 1 Vl) (assoc 1 ent) ent))
(entmod ent)
)
)

  • 0

#3 18011985

18011985

    biết lệnh properties

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

Đã gửi 16 May 2010 - 05:13 PM

Cảm ơn bạn. Nhưng đó chưa phải là ý mình: mình muốn insert block, và xử lý (cons 0 "attrib") (cons 1 "Ky tu sua"), tức là chèn block có thuộc tính và sửa Cons 1 trong thuộc tính của ATTRIB luôn.
Các bạn chỉ là sửa khi block có trên bản vẽ. Còn của mình là gọi một block nằm trong hệ thống và sửa ATTRIB của nó tức thời với giá trị mình gán.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#4 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 16 May 2010 - 07:15 PM

Cảm ơn bạn. Nhưng đó chưa phải là ý mình: mình muốn insert block, và xử lý (cons 0 "attrib") (cons 1 "Ky tu sua"), tức là chèn block có thuộc tính và sửa Cons 1 trong thuộc tính của ATTRIB luôn.
Các bạn chỉ là sửa khi block có trên bản vẽ. Còn của mình là gọi một block nằm trong hệ thống và sửa ATTRIB của nó tức thời với giá trị mình gán.

Nếu Insert thì cần gì đến cons, cứ dùng command là được thôi. Để Cad không hiển thị hộp thoại ATT thì bạn set cái biến hệ thống FIEDIA = 0 là được.
  • 0

#5 18011985

18011985

    biết lệnh properties

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

Đã gửi 16 May 2010 - 07:45 PM

Mình dùng DXF để giảm dung lượng load trong cad tránh cho việc chạy Cad bị nặng. Nếu dùng Command thì mình sử dụng được rồi mình đang phát triển lsp sang DXF nên đang học và tìm hiểu.
Cảm ơn bạn đã góp ý.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 May 2010 - 09:58 PM

Nếu Insert thì cần gì đến cons, cứ dùng command là được thôi. Để Cad không hiển thị hộp thoại ATT thì bạn set cái biến hệ thống FIEDIA = 0 là được.

Bạn hoa35ktxd nhầm rồi. CAD không có biến hệ thống FIEDIA , chỉ có biến FILEDIA. Hơn nữa, biến này không điều khiển hộp thoại ATT như điều bạn nói.
Biến điều khiển hộp thoại ATT chính là biến ATTREQ.
Bạn hoa35ktxd kiểm tra lại xem có phải không nhé?

18011985 tham khảo code sau :

(defun c:EdAtt(/ ent Bl vl)
;copyright by Tue_NV
(setq TenBlock "b"
Diem (getpoint "\n Insert point :"))
(setvar "attreq" 0)
(if (tblsearch "Block" TenBlock)
  (progn
(vl-cmdf "insert" TenBlock Diem "1" "1" "0")
(setq Bl (entlast))
(if (member (cons 66 1) (entget Bl))
(progn
   (while (not (= (cdr(assoc 0 (setq ent (entget
(setq Bl (entnext Bl)) )))) "SEQEND"))
     (setq Vl (getstring (strcat "\nNhap gia tri cho thuoc tinh " (cdr (assoc 2 ent)) ": "))
       Ent (subst (cons 1 Vl) (assoc 1 ent) ent))
     (entmod ent) 
)
)   
  )
)
(alert (strcat "\n Khong co Block nao mang ten : " TenBlock)) )
(princ)
)

  • 1

#7 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 16 May 2010 - 10:30 PM

Hờ hờ, vì viết vội, không bật cad lên kiểm tra.
Cảm ơn Tue_NV và xin lỗi 18011985.
  • 0

#8 18011985

18011985

    biết lệnh properties

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

Đã gửi 21 May 2010 - 08:50 PM

Nếu Insert thì cần gì đến cons, cứ dùng command là được thôi. Để Cad không hiển thị hộp thoại ATT thì bạn set cái biến hệ thống FIEDIA = 0 là được.

Cảm ơn bạn đã quan tâm, mình chuyển sang hàm Cons thay vì dùng Command vì các đời cad sau Command trình tự khác nhau để tránh phải updates lại lsp nên mình chuyển sang nghiên cứu hàm Cons.
Thanks
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#9 18011985

18011985

    biết lệnh properties

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

Đã gửi 22 May 2010 - 09:43 AM

Bạn hoa35ktxd nhầm rồi. CAD không có biến hệ thống FIEDIA , chỉ có biến FILEDIA. Hơn nữa, biến này không điều khiển hộp thoại ATT như điều bạn nói.
Biến điều khiển hộp thoại ATT chính là biến ATTREQ.
Bạn hoa35ktxd kiểm tra lại xem có phải không nhé?

18011985 tham khảo code sau :


(defun c:EdAtt(/ ent Bl vl)
;copyright by Tue_NV
(setq TenBlock "b"
Diem (getpoint "\n Insert point :"))
(setvar "attreq" 0)
(if (tblsearch "Block" TenBlock)
  (progn
(vl-cmdf "insert" TenBlock Diem "1" "1" "0")
(setq Bl (entlast))
(if (member (cons 66 1) (entget Bl))
(progn
   (while (not (= (cdr(assoc 0 (setq ent (entget
(setq Bl (entnext Bl)) )))) "SEQEND"))
     (setq Vl (getstring (strcat "\nNhap gia tri cho thuoc tinh " (cdr (assoc 2 ent)) ": "))
       Ent (subst (cons 1 Vl) (assoc 1 ent) ent))
     (entmod ent) 
)
)   
  )
)
(alert (strcat "\n Khong co Block nao mang ten : " TenBlock)) )
(princ)
)

Gửi bác TUE_NV, mình đã thử đoạn code của bạn nhưng không giải quyết được vấn đề của mình. Khi thay được giá trị thì lại không biểu hiện ở ngoài màn hình. Dù sao mình cũng cảm ơn.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 22 May 2010 - 11:40 AM

Gửi bác TUE_NV, mình đã thử đoạn code của bạn nhưng không giải quyết được vấn đề của mình. Khi thay được giá trị thì lại không biểu hiện ở ngoài màn hình. Dù sao mình cũng cảm ơn.

Chào bạn 18011985,
Theo như bạn trình bày thì mình hiểu răng bạn cần phải có hai bước để thực hiện điều này.
1/- Insert block vào bản vẽ tại vị trí bạn muốn (dùng lệnh entmake)
2/- Thay đổi thuộc tính của bock này. Bạn nên dùng hàm (subst ......) để thay đổi cái thuộc tính bạn cần với việc sử dụng hàm cons. Sau đó bạn dùng entmod để modify block này thành cái block mới có chứa thuộc tính mới.

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.

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 May 2010 - 02:53 PM

Chào bạn 18011985,
Theo như bạn trình bày thì mình hiểu răng bạn cần phải có hai bước để thực hiện điều này.
1/- Insert block vào bản vẽ tại vị trí bạn muốn (dùng lệnh entmake)
Chúc bạn thành công.

Chào bác PhamThanhBinh
Bác vui lòng cho 1 đoạn code nhỏ về chèn Block có thuộc tính bằng việc sử dụng hàm entmake :rolleyes:
  • 1

#12 18011985

18011985

    biết lệnh properties

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

Đã gửi 26 May 2010 - 09:16 AM

Chào bạn 18011985,
Theo như bạn trình bày thì mình hiểu răng bạn cần phải có hai bước để thực hiện điều này.
1/- Insert block vào bản vẽ tại vị trí bạn muốn (dùng lệnh entmake)
2/- Thay đổi thuộc tính của bock này. Bạn nên dùng hàm (subst ......) để thay đổi cái thuộc tính bạn cần với việc sử dụng hàm cons. Sau đó bạn dùng entmod để modify block này thành cái block mới có chứa thuộc tính mới.

Chúc bạn thành công.

Đúng suy nghĩ của mình như vậy, nhưng mình chưa thành công trong việc tạo Block thuộc tính với hàm entmake và gọi Block thuộc tính ra và thay đổi thuộc tính.
Mong bạn cho mình đoạn lsp ví dụ.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#13 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 26 May 2010 - 02:30 PM

Thực sự tôi chưa hiểu bạn muốn Insert hay Create Block, hai cái này khác nhau hoàn toàn.
Nếu Insert thì không cần Entmake (Không thể) vì Entmake có chức năng tạo đối tượng mới. Nếu muốn Insert thì chỉ cần (Command....), bạn lo ngại cú pháp thay đổi của các phiên bản CAD là đúng nhưng liệu bạn có biết được bao giờ nó thay đổi không và liệu nó có thay đổi cả LISP không? Vì không phải LISP là có thể phù hợp được với tất cả các phiên bản CAD.
Còn nếu bạn muốn Create thì mới dùng đến Entmake + Cons. Khi đó bạn phải Entmake các ATT và Object trước sau đó tạo khối.
Tuy nhiên tôi thấy bạn nói hơi mâu thuẫn "gọi một block nằm trong hệ thống""dùng DXF để giảm dung lượng load trong cad"
- Gọi một block trong hệ thống (theo tối hiểu là nó nằm trong đường dẫn hỗ trợ của CAD) chính là lệnh Insert
- Dùng DXF (Chắc là bạn muốn dùng mã lệnh để tạo Block) cũng không giảm dung lượng của CAD được bao nhiêu mà sẽ rất phiền hà so với việc bạn tạo Block theo cách thông thường rồi lưu nó như 1 file.dwg trong đường dẫn hỗ trợ của CAD và quay về sử dụng lệnh Insert.
Còn việc EDIT thì đã có các đoạn mã ở trên rồi.
Xin được góp ý 1 chút như vậy.
  • 0

#14 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 May 2010 - 12:03 PM

Đúng suy nghĩ của mình như vậy, nhưng mình chưa thành công trong việc tạo Block thuộc tính với hàm entmake và gọi Block thuộc tính ra và thay đổi thuộc tính.
Mong bạn cho mình đoạn lsp ví dụ.

Chào bạn 18011985, Tue_NV,
Thú thực là mình không rành lắm về các mã DXF của một block có chứa thuộc tính bởi vì mình là dân cơ khí ít sử dụng tới những block dạng này. Theo mình hiểu để thâm nhập vào các mã DXF của các thuộc tính thì phải sử dụng tới hàm entnext .
Như vậy để có thể tạo được một block với các thuộc tính cho trước bằng hàm entmake trước hêt cần phải hiểu rõ về các mã dxf của các thuộc tính này. Bạn có thể lấy ngay các block chứa thuộc tính mà bạn có sẵn và dùng hàm entget và entnext để mà lôi nó ra ngắm.
Sau khi hiểu rõ các mã này bạn có thể thử làm theo gợi ý của bác hoa35ktxd, tức là tạo các thuộc tính trước rồi đưa chúng vào trong block của bạn.
Mình chỉ là kẻ học mót nên rất có thể những suy nghĩ của mình chưa hẳn đúng, tuy nhiên mình cứ suy luận dựa trên những hiểu biết còm cõi của mình và nêu lên để bạn và mọi người cùng ngẫm may ra có thể giúp ích gì đó cho bạn mà thôi.
Về phần mình, do điều kiện công việc của mình dạo này khá bận nên cũng chưa thử được cái hướng đi đó có đúng hay không, vì thế bạn hãy coi đó là ý kiến tham khảo để bạn suy nghĩ thêm, nếu như nó chưa thành công thì cũng đừng nản, ắt sẽ có người có giải pháp tốt hơn cho trường hợp của bạn.
Thành thật xin lỗi nếu bạn thấy không hài lòng với ý kiến của mình.
Chúc bạn vui và thành công
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#15 18011985

18011985

    biết lệnh properties

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

Đã gửi 27 May 2010 - 12:13 PM

Chào bạn 18011985, Tue_NV,
Thú thực là mình không rành lắm về các mã DXF của một block có chứa thuộc tính bởi vì mình là dân cơ khí ít sử dụng tới những block dạng này. Theo mình hiểu để thâm nhập vào các mã DXF của các thuộc tính thì phải sử dụng tới hàm entnext .
Như vậy để có thể tạo được một block với các thuộc tính cho trước bằng hàm entmake trước hêt cần phải hiểu rõ về các mã dxf của các thuộc tính này. Bạn có thể lấy ngay các block chứa thuộc tính mà bạn có sẵn và dùng hàm entget và entnext để mà lôi nó ra ngắm.
Sau khi hiểu rõ các mã này bạn có thể thử làm theo gợi ý của bác hoa35ktxd, tức là tạo các thuộc tính trước rồi đưa chúng vào trong block của bạn.
Mình chỉ là kẻ học mót nên rất có thể những suy nghĩ của mình chưa hẳn đúng, tuy nhiên mình cứ suy luận dựa trên những hiểu biết còm cõi của mình và nêu lên để bạn và mọi người cùng ngẫm may ra có thể giúp ích gì đó cho bạn mà thôi.
Về phần mình, do điều kiện công việc của mình dạo này khá bận nên cũng chưa thử được cái hướng đi đó có đúng hay không, vì thế bạn hãy coi đó là ý kiến tham khảo để bạn suy nghĩ thêm, nếu như nó chưa thành công thì cũng đừng nản, ắt sẽ có người có giải pháp tốt hơn cho trường hợp của bạn.
Thành thật xin lỗi nếu bạn thấy không hài lòng với ý kiến của mình.
Chúc bạn vui và thành công

Rất vui được bạn góp ý. Ý kiến của mọi người giúp mình hiểu rõ về vấn đề hơn thôi. Còn ai cũng bận công việc mà mình rất hiểu. DXF là mã chuẩn của ACAD, việc sử dụng nó sẽ giúp mình tránh khỏi những lỗi không chạy được lsp, Ví dụ như trình tự các lệnh thay đổi trong CAD dẫn đến LSP lỗi ở 1 số phiên bản khác. Nhưng với DXF điều đấy hoàn toàn có thể loại bỏ, vì vậy mình đang chuyển hướng suy nghĩ sang mã DXF. Trong quá trình học tập DXF rất mong được sự giúp đỡ của các bạn để mình hiểu hơn về loại mã nguồn này.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#16 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 08 March 2011 - 10:52 PM

Bữa nay rảnh rỗi nên dành thời gian cải tạo lại mấy lisp hồi trước viết, động đến cái block thuộc tính và mình cũng đang vuớng phải vấn đề như của bạn chủ topic đề cập. sau 1 đêm cặm cụi, mò mẫm rất là chăm chỉ thì mình thấy có 2 vấn đề chính cần giải quyết đó là: Tạo block thuộc tính bằng entmaketạo đối tượng insert 1 block thuộc tính bằng entmake.
1. Tạo block thuộc tính bằng entmake.
Cái này thì tương đối đơn giản, nhiều người cũng nghĩ nó đơn giản nhưng rồi không thể tạo được, mình cũng thế. có nhiều nguyên nhân nhưng.. thôi kệ nó. đây là code tổng quát mình rút ra được và đã make thành công. các bạn có thể tham khảo để xây dựng hàm con fù hợp nhu cầu.

(entmake '((0 . "BLOCK")
(2 . "Tenblock"); Tên block khi dùng lệnh insert
(70 . 2) ; Mã này bắt buộc fải có và giá trị = 2 nếu bạn muốn tạo block thuộc tính
(10 0.0 0.0 0.0)
(4 . "Chuthich"); ghi chú thích cho block, không có cũng được
))
;(entmake các đối tượng con của block: LINE, PLINE, Text....)
(entmake '((0 . "ATTDEF") ; Entmake đối tượng thuộc tính, các giá trị bên dưới là bắt buộc
(100 . "AcDbEntity")
(8 . "0") ; layer
(62 . 7) ; màu chữ
(100 . "AcDbText")
(10 point) ; tọa độ điểm chèn, (chỉ cần quan tâm khi lựa chọn canh lề là left)
(40 . 0.2) ; chiều cao chữ
(1 . "01") ; giá trị mặc định của attdef
(7 . "textstyle") ; kiểu chữ
(72 . 1) ; Canh lề theo phương ngang, giá trị từ 0 - 5
(11 point) ; toa độ điểm canh lề (lựa chọn canh lề là left thì mã này có giá trị là (11 0.0 0.0 0.0)
(100 . "AcDbAttributeDefinition")
(280 . 0)
(3 . "prompt")
(2 . "tag")
(70 . 0) ; mã xđịnh trạng thái của thuộc tính, mặc đinh lấy = 0 nhưng không bỏ nó đi được. (mất cả đêm vì thằng này >''<);
(74 . 0) ; Canh lề theo phương thẳng đứng, giá trị từ 0 - 3
(280 . 1)
)
)
;(entmake gì nữa thì tùy bạn)
(entmake '((0 . "ENDBLK")(8 . "layer"))); mã 8 này chính là layer của block (nếu đặt layer 0 thì có thể bỏ qua)
các lựa chọn về góc quay, width factor, độ nghiêng của text thuộc tính là không bắt buộc, có thể bổ sung thêm cho phù hợp với nhu cầu.
2. tạo đối tượng insert 1 block thuộc tính bằng entmake.
Cái này thì mình chưa làm được, nhưng các bước của nó cũng tương tự như trên

(entmake '((0 . "insert")
(2 . "Tenblock")
(8 . "layer")
(10 . point) ;điểm chèn
(50 . 0) ;góc quay
(2 . "Tenblock")
(70 . 0)
(66 . 1) ;mã xác định block có chứa đối tượng thuộc tính
)
(entmake '((0 . "ATTRIB")
[b].................mình đang chết dí chỗ này...............[/b]
)
(entmake '((0 . "Seqend") (8 . "layer"))
trong code trên thì chỗ mình đang mắc chính là 2 mã 10 và 11 của đối tượng ATTRIB vì không biết xác định giá trị của nó như thế nào bởi bản thân ATTRIB bị gắn chết vào đối tượng Block rồi. các bác gỡ tiếp giúp mình vụ này với.
PS: Ah, Để cho dễ hiểu ý tứ của bạn chủ topic và của mình thì các bác có thể hiểu đơn giản là mình muốn viết 1 hàm để thay thế cho lệnh Block và 1 hàm để thay thế cho lệnh Insert trong cad.
có lẽ một vài người sẽ đặt câu hỏi tại sao lại fải làm thế này mà không dùng cách đơn giản hơn là (command "insert"....). thực tế thì việc thay đổi cấu trúc của lệnh insert giữa các fiên bản cad như 18011985 lo ngại không fải là vấn đề quá lớn. cái chính là hàm command khiến chương trình chạy chậm, chịu ảnh hưởng lớn từ các biến hệ thống trong cad và người lập trình không có cách gì để can thiệp vào cấu trúc của nó khi gặp fải những vấn đề chưa hài lòng với nó. và đơn giản là mình ghét nó, cực chẳng đã mới fải dùng nó thôi.
  • 0

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


#17 18011985

18011985

    biết lệnh properties

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

Đã gửi 09 March 2011 - 07:49 AM

Mình đã tìm ra giải pháp rồi vấn đề đó nằm ở lúc bạn tạo block.
Sau đây là ví dụ của mình
;;;------------------------- tao block -----------------------------------------
(defun c:create_block ()
(entmake
(list (cons 0 "Block") (Cons 8 "Cao trinh") (cons 2 "Cao trinh mm") (cons 10 (list 0 0 0)) (cons 70 2)))
(entmake
(list (cons 0 "Line") (Cons 8 "Cao trinh") (cons 62 7) (cons 10 (list 0 0 0)) (cons 11 (list -1.5 1.5 0))))
(entmake
(list (cons 0 "Line") (Cons 8 "Cao trinh") (cons 62 7) (cons 10 (list -1.5 1.5 0)) (cons 11 (list 1.5 1.5 0))))
(entmake
(list (cons 0 "Line") (Cons 8 "Cao trinh") (cons 62 7) (cons 10 (list 1.5 1.5 0)) (cons 11 (list 0 0 0))))
(entmake
(list (Cons 0 "HATCH") (Cons 100 "AcDbEntity")
(Cons 8 "Cao trinh") (Cons 62 7) (Cons 100 "AcDbHatch")
(Cons 10 (list 0.0 0.0 0.0))
(Cons 210 (list 0.0 0.0 1.0)) (cons 2 "SOLID")(cons 70 1)
(cons 71 0) (Cons 91 1) (Cons 92 7)
(Cons 72 0) (Cons 73 1) (Cons 93 3)
(Cons 10 (list 1.5 1.5 0.0))(cons 10 (list 0.0 1.5 0.0))
(cons 10 (list 0.0 0.0 0.0))
(cons 97 0)
(cons 75 0)
(cons 76 1)
(cons 47 0.00914748)
(cons 98 1)
(cons 10 (list 0.441943 1.13462 0.0))
(cons 63 7)
)
)
(entmake
(list (cons 0 "attdef")
(cons 100 "AcDbEntity")
(Cons 8 "Cao trinh")
(cons 62 7)
(cons 100 "AcDbText")
(Cons 10 (list 1.0 2.0 0.0))
(cons 40 2.0)
(Cons 1 "0.00")
(cons 50 0.0)
(cons 41 1.0)
(cons 51 0.0)
(cons 7 "vnarialh")
(cons 71 0)
(cons 72 0)
(Cons 11 (list 0.0 0.0 0.0))
(cons 210 (list 0.0 0.0 1.0))
(cons 100 "AcDbAttributeDefinition")
(cons 3 "Cao trinh")
(cons 2 "Giatri")
(cons 70 0)
(cons 73 0)
(cons 74 0)
))
(entmake
(list (cons 0 "ENDBLK")))
); end create_block
Đây là lệnh insert block nè.
(defun c:insert()
(setq vtct (getpoint "\n Chon vi tri chen block: "))
(setq ctc (getstring "\n Nhap cao trinh:"))
(entmake (list (cons 0 "INSERT")
(cons 66 1)
(cons 2 "Cao trinh mm")
(cons 10 (trans vtct 1 0))
(cons 8 "Cao trinh")
))

(entmake (list (cons 0 "ATTRIB")
(cons 100 "AcDbEntity")
(cons 8 "Cao trinh")
(cons 62 7)
(cons 100 "AcDbText")
(cons 10 (list (+ (car (trans vtct 1 0)) 1.0) (+ (cadr (trans vtct 1 0)) 2.0) 0))
(cons 40 1.5)
(cons 1 (rtos ctc 2 2))
(cons 7 "vnarialh")
(cons 100 "AcDbAttribute")
(cons 2 "GIATRI")
(cons 70 0)
))
(entmake (list (cons 0 "SEQEND")))
(princ)
)

  • 1
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#18 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 09 March 2011 - 10:08 AM

Chỗ mình vuớng mắc chính là chỗ này đây

(cons 10 (list (+ (car (trans vtct 1 0)) 1.0) (+ (cadr (trans vtct 1 0)) 2.0) 0))
việc bắt buộc phải cung cấp toạ độ cho attrib gây ra khó khăn nêu muốn tạo hàm con tổng quát. nó có thể làm thay đổi hình dạng của đối tuợng đuợc insert ra so với bock gốc. Cảm ơn bạn đã chia sẻ
  • 0

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


#19 18011985

18011985

    biết lệnh properties

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

Đã gửi 10 March 2011 - 07:49 AM

Bạn nhớ khai báo đầy đủ nhất là Cons 100 nếu không khai báo thì từ cad 2008 trở lên sẽ xảy ra lỗi và không tạo được Block theo ý muốn.
  • 1
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#20 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 10 March 2011 - 08:28 AM

Cũng còn tuỳ loại đối tuợng bạn ạ. chẳng hạn như line, text, circle .... không bắt buộc phải khai báo mã này. Mình dùng cad2010
  • 0

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