Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
dnhqs

lấy thuộc tính từ block

Các bài được khuyến nghị

pác hoanh và bac ssg đã trả lời rồi nhưng thực sự tôi vẫn thấy lơn mơ quá các pác có thể cho hẳn mình một đoạn code giải bài này rồi mình mới tiếp tục cuộc hành trình được:

- có một loạt block trên bản vẽ (thuộc tính caodoht, caodotk, chenhcao) và một đôi text (màu xanh, màu đỏ chẵn hạn)

- hô xung phong một pác lấy thằng text màu xanh gần nhất (điểm chèn block) gán cho caodoht, text màu đỏ cũng gần nhất cho caodotk; tính chenhcao=caotk-caodoht

một đoạn khác:

chọn vài block

thôi các pác chỉ giup thế này cho dễ hiểu

- chọn vài block có thuộc tính như nói trên : hô xung phong nữa thì sinh ra thằng text màu xanh màu đỏ tại điểm chèn chẵn hạn

- với lại làm sao để mình bỏ cái block vào đây để các pạn dễ hình dung hoặc đoạn code của minh chẳn hạn

hì hì cam ơn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
pác hoanh và bac ssg đã trả lời rồi nhưng thực sự tôi vẫn thấy lơn mơ quá các pác có thể cho hẳn mình một đoạn code giải bài này rồi mình mới tiếp tục cuộc hành trình được:

- có một loạt block trên bản vẽ (thuộc tính caodoht, caodotk, chenhcao) và một đôi text (màu xanh, màu đỏ chẵn hạn)

- hô xung phong một pác lấy thằng text màu xanh gần nhất (điểm chèn block) gán cho caodoht, text màu đỏ cũng gần nhất cho caodotk; tính chenhcao=caotk-caodoht

một đoạn khác:

chọn vài block

thôi các pác chỉ giup thế này cho dễ hiểu

- chọn vài block có thuộc tính như nói trên : hô xung phong nữa thì sinh ra thằng text màu xanh màu đỏ tại điểm chèn chẵn hạn

- với lại làm sao để mình bỏ cái block vào đây để các pạn dễ hình dung hoặc đoạn code của minh chẳn hạn

hì hì cam ơn

Hiểu lơ mơ, chưa chắc lắm. Bạn post lên 1 bản vẽ *.dwg làm ví dụ thì hay hơn. Chức năng up của diễn đàn hình như chưa ổn. Bạn có thể dùng các Free Host để up. Nhiều lắm, ví dụ như:

http://www.mediafire.com/

Vào đó đăng ký (Create a Free Account), up file rồi copy link, paste vào bài viết là xong ngay.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hiểu lơ mơ, chưa chắc lắm. Bạn post lên 1 bản vẽ *.dwg làm ví dụ thì hay hơn. Chức năng up của diễn đàn hình như chưa ổn. Bạn có thể dùng các Free Host để up. Nhiều lắm, ví dụ như:

<a href="http://www.mediafire.com/" target="_blank">http://www.mediafire.com/</a>

Vào đó đăng ký (Create a Free Account), up file rồi copy link, paste vào bài viết là xong ngay.

Cám ơn ssg đã chỉ giúp: block đây

http://www.cadviet.com/upfiles/hoihoanh_2.dwg

trước nhất dùng bộ lock để quét toàn bộ các đối tượng text xanh, text đỏ, block (có thể quét riêng cho từng loại)

chương trình sẽ cập nhật dữ liệu của text xanh vao CD_HT text đỏ vào CD_TK sau đó cập nhật CC bằng hiệu CD_TK-CD_HT

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cám ơn ssg đã chỉ giúp: block đây

http://www.cadviet.com/upfiles/hoihoanh_2.dwg

trước nhất dùng bộ lock để quét toàn bộ các đối tượng text xanh, text đỏ, block (có thể quét riêng cho từng loại)

chương trình sẽ cập nhật dữ liệu của text xanh vao CD_HT text đỏ vào CD_TK sau đó cập nhật CC bằng hiệu CD_TK-CD_HT

ngược lại chọn tập hợp text thì viết tất cả thông số CD_HT (text xanh) và CD_TK (text đỏ) và CC text vàng chẳn hạn

cám ơn nhiều

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cám ơn ssg đã chỉ giúp: block đây

http://www.cadviet.com/upfiles/hoihoanh_2.dwg

trước nhất dùng bộ lock để quét toàn bộ các đối tượng text xanh, text đỏ, block (có thể quét riêng cho từng loại)

chương trình sẽ cập nhật dữ liệu của text xanh vao CD_HT text đỏ vào CD_TK sau đó cập nhật CC bằng hiệu CD_TK-CD_HT

Chương trình dành cho bạn đây, kèm theo comment cho từng dòng lệnh.

Lưu ý: block của bạn chứa các attrib: CD_TN, CD_TK và CH_CAO phải được xếp đúng theo thứ tự đã nêu (nếu không sẽ xảy ra tình trạng "râu ông nọ cắm cằm bà kia"). Không đúng thứ tự cũng được nhưng phải viết lại code.

Bạn hiểu được toàn bộ code dưới đây sẽ tự bổ sung, phát triển chương trình theo ý thích. Mình vẫn khuyến khích các bạn tự làm, vướng mắc chỗ nào mình sẵn sàng giải đáp hoặc gợi ý thêm.

 

;;;--------------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss) 
   (setq
       e (ssname ss i)
       Le (append Le (list e))
       i (1+ i)
   )
)
Le
)
;;;--------------------------------------------------------------------
(defun getntv(sst p / Lt) ;;;Get Nearest Text Value in sst from p
(setq
   Lt (ss2ent sst)
   neap (lambda (x y)
                (<
                (distance p (cdr (assoc 10 (entget x))))
                (distance p (cdr (assoc 10 (entget y))))
                )
            )
   Lt (vl-sort Lt 'neap)
)
(cdr (assoc 1 (entget (car Lt))))
)
;;;--------------------------------------------------------------------
(defun C:UPH(/ e p t1 t2 t3 e1 e2 e3 d1 d2 d3) ;;;UPdate Height
(setq
   e (car (entsel "\nSelect height block:")) ;;;Select block
   p (cdr (assoc 10 (entget e))) ;;;Insert point of block
   t1 (getntv (ssget "X" '((0 . "TEXT") (62 . 3))) p) ;;;Green text value nearest from p
   t2 (getntv (ssget "X" '((0 . "TEXT") (62 . 1))) p) ;;;Red text value nearest from p
   t3 (rtos (- (atof t2) (atof t1))) ;;;Subtract
   e1 (entnext e) ;;;Attrib CD_TN entity
   e2 (entnext e1) ;;;Attrib CD_TK entity
   e3 (entnext e2) ;;;Attrib CH_CAO entity
   d1 (entget e1) ;;;Get data1
   d1 (subst (cons 1 t1) (assoc 1 d1) d1) ;;;Change data1
   d2 (entget e2) ;;;Get data2
   d2 (subst (cons 1 t2) (assoc 1 d2) d2) ;;;Change data2
   d3 (entget e3) ;;;Get data3
   d3 (subst (cons 1 t3) (assoc 1 d3) d3) ;;;Change data3
)
(entmod d1) ;;;Modify e1
(entmod d2) ;;;Modify e2
(entmod d3)  ;;;Modify e3
(command "regen") ;;;Regenerating
(princ) ;;;Silent quit
)
;;;--------------------------------------------------------------------

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chương trình dành cho bạn đây, kèm theo comment cho từng dòng lệnh.

Lưu ý: block của bạn chứa các attrib: CD_TN, CD_TK và CH_CAO phải được xếp đúng theo thứ tự đã nêu (nếu không sẽ xảy ra tình trạng "râu ông nọ cắm cằm bà kia"). Không đúng thứ tự cũng được nhưng phải viết lại code.

Bạn hiểu được toàn bộ code dưới đây sẽ tự bổ sung, phát triển chương trình theo ý thích. Mình vẫn khuyến khích các bạn tự làm, vướng mắc chỗ nào mình sẵn sàng giải đáp hoặc gợi ý thêm.

 

;;;--------------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss) 
   (setq
       e (ssname ss i)
       Le (append Le (list e))
       i (1+ i)
   )
)
Le
)
;;;--------------------------------------------------------------------
(defun getntv(sst p / Lt) ;;;Get Nearest Text Value in sst from p
(setq
   Lt (ss2ent sst)
   neap (lambda (x y)
                (<
                (distance p (cdr (assoc 10 (entget x))))
                (distance p (cdr (assoc 10 (entget y))))
                )
            )
   Lt (vl-sort Lt 'neap)
)
(cdr (assoc 1 (entget (car Lt))))
)
;;;--------------------------------------------------------------------
(defun C:UPH(/ e p t1 t2 t3 e1 e2 e3 d1 d2 d3) ;;;UPdate Height
(setq
   e (car (entsel "\nSelect height block:")) ;;;Select block
   p (cdr (assoc 10 (entget e))) ;;;Insert point of block
   t1 (getntv (ssget "X" '((0 . "TEXT") (62 . 3))) p) ;;;Green text value nearest from p
   t2 (getntv (ssget "X" '((0 . "TEXT") (62 . 1))) p) ;;;Red text value nearest from p
   t3 (rtos (- (atof t2) (atof t1))) ;;;Subtract
   e1 (entnext e) ;;;Attrib CD_TN entity
   e2 (entnext e1) ;;;Attrib CD_TK entity
   e3 (entnext e2) ;;;Attrib CH_CAO entity
   d1 (entget e1) ;;;Get data1
   d1 (subst (cons 1 t1) (assoc 1 d1) d1) ;;;Change data1
   d2 (entget e2) ;;;Get data2
   d2 (subst (cons 1 t2) (assoc 1 d2) d2) ;;;Change data2
   d3 (entget e3) ;;;Get data3
   d3 (subst (cons 1 t3) (assoc 1 d3) d3) ;;;Change data3
)
(entmod d1) ;;;Modify e1
(entmod d2) ;;;Modify e2
(entmod d3)  ;;;Modify e3
(command "regen") ;;;Regenerating
(princ) ;;;Silent quit
)
;;;--------------------------------------------------------------------

Trước mắt mình cảm ơn ssg

Thực ra mình ý thức việc tự thực hiện các ý tưởng của của mình nhưng mà bí rồi mới nhờ anh em

Mình thấy có nhiều ông cứ tưởng diễn đàn này là nơi "làm từ thiện" nên có nhiều đòi hỏi thái quá

Thực ra đoạn yêu cầu trên là một phần trong việc lập cách giải quyết một vấn đề dài ngoằn nhưng mà mình không nêu ra vì những đoạn khác mình làm được . mình đang muốn học lisp mà

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trước mắt mình cảm ơn ssg

Thực ra mình ý thức việc tự thực hiện các ý tưởng của của mình nhưng mà bí rồi mới nhờ anh em

Mình thấy có nhiều ông cứ tưởng diễn đàn này là nơi "làm từ thiện" nên có nhiều đòi hỏi thái quá

Thực ra đoạn yêu cầu trên là một phần trong việc lập cách giải quyết một vấn đề dài ngoằn nhưng mà mình không nêu ra vì những đoạn khác mình làm được . mình đang muốn học lisp mà

rất tuyệt mình đã test rồi nhưng mà còn đoạn ngược lại ssg chỉ giúp luôn nhé

tức là lấy dữ liệu ra từ thuộc tính ví dụ khi chọn block thì nó sẽ ghi text thậm chí còn tính toán một chút rồi ghi ra (như là lấy chênh cao của block này cộng với chênh cao của block khác)

và lấy ra được toạ độ điểm chèn nữa chứ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
rất tuyệt mình đã test rồi nhưng mà còn đoạn ngược lại ssg chỉ giúp luôn nhé

tức là lấy dữ liệu ra từ thuộc tính ví dụ khi chọn block thì nó sẽ ghi text thậm chí còn tính toán một chút rồi ghi ra (như là lấy chênh cao của block này cộng với chênh cao của block khác)

và lấy ra được toạ độ điểm chèn nữa chứ

Bạn hiểu được code của chương trình trên thì đương nhiên làm được "đoạn ngược lại". Bạn đang tập lập trình lisp, mình đề nghị lần này không làm thay mà chỉ gợi ý và hướng dẫn bạn tự làm. OK?

1) Trước tiên, bạn có thể cho mình biết: bạn hiểu về Entity và Selection Set, cũng như biết cách áp dụng chúng trong chương trình như thế nào? Xem như bài test để nắm được khái quát level của bạn, từ đó mình sẽ có gợi ý phù hợp.

2) Nếu chưa đọc, hãy tham khảo bài sau:

http://www.cadviet.com/forum/index.php?showtopic=1980

3) Trong chương trình trên:

e: Attribute Block

e1: Attrib CD_TN

e2: Attrib CD_TK

e3: Attrib CH_CAO

Tất cả chúng có kiểu là entity

Hàm entget lấy được toàn bộ data từ chúng

Hàm assoc, kết hợp với hàm cdr sẽ lấy ra được thông tin bất kỳ mà bạn muốn từ data trên

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn hiểu được code của chương trình trên thì đương nhiên làm được "đoạn ngược lại". Bạn đang tập lập trình lisp, mình đề nghị lần này không làm thay mà chỉ gợi ý và hướng dẫn bạn tự làm. OK?

1) Trước tiên, bạn có thể cho mình biết: bạn hiểu về Entity và Selection Set, cũng như biết cách áp dụng chúng trong chương trình như thế nào? Xem như bài test để nắm được khái quát level của bạn, từ đó mình sẽ có gợi ý phù hợp.

2) Nếu chưa đọc, hãy tham khảo bài sau:

http://www.cadviet.com/forum/index.php?showtopic=1980

3) Trong chương trình trên:

e: Attribute Block

e1: Attrib CD_TN

e2: Attrib CD_TK

e3: Attrib CH_CAO

Tất cả chúng có kiểu là entity

Hàm entget lấy được toàn bộ data từ chúng

Hàm assoc, kết hợp với hàm cdr sẽ lấy ra được thông tin bất kỳ mà bạn muốn từ data trên

Mình biết rồi. Tại sao ssg lại cho mình là 1 "lập trình viên". bên "nối điểm" mình đã giải thích rồi

1. mình tự học từ sách và không bài bản nên về lý thuyết thực ra "lơ mơ" chủ yếu vận dụng các ví dụ để lập thôi.

2. ban đầu khi học lisp mình nghĩ để tiết kiệm thời gian khi vẽ thôi (mình là KS XD DD - ĐHBK Đà Nẵng công tác được hơn 10 năm rồi, hồi mình đi học làm gì có máy để học thậm chí thuyết minh đồ án tốt nghiệp phải thuê người ta đánh). sau thì thấy vui vui nên nghiên cứu thêm nhưng tới khi bí thế là không biết hỏi ai, chán quá nghỉ.

3. nay vào diển đàn thấy anh em "tài quá" lại đam mê nghiên cứu tiếp

chính vì vậy về lý thuyết mình lơ mơ, nghiên cứu không sâu (thực ra do bí mà bỏ qua), quá trình thực hành thì khập khiển

nhưng dù sao cũng rất hấp dẫn

cám ơn cadviet, cam ơn ssg rất nhiều!

ssg đánh giá như vậy thật là oan cho anh em

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thông cảm với bạn vì attrib block là đối tượng phức tạp. Bạn mới làm quen với entity, lại chọn đúng cái phức tạp mà "chơi" nên lúng túng cũng phải!

Đoạn lisp sau lấy ra được các thuộc tính từ attrib block có tên "caodomoc" trong bản vẽ của bạn. Kết quả nhận được là:

p: toạ độ điểm chèn block, kiểu point (list có 3 thành phần)

CD_TN: cao độ hiện trạng, kiểu string

CD_TK: cao độ thiết kế, kiểu string

CH_CAO: độ chênh cao, kiểu string

Bạn có thể sử dụng chúng để làm gì tuỳ ý. Hàm alert cuối cùng chỉ là ví dụ, minh hoạ cho việc áp dụng các kết quả nhận được.

 

(defun C:GP() ;;;Get Properties
(setq
;;;Lay cac doi tuong trong attrib block
   e (car (entsel "\nSelect attrib block:"))
   e1 (entnext e)
   e2 (entnext e1)
   e3 (entnext e2)

;;;Lay toan bo data tu cac doi tuong tren
   d (entget e)
   d1 (entget e1)
   d2 (entget e2)
   d3 (entget e3)

;;;Lay ra cac gia tri can quan tam tu cac data
   p (cdr (assoc 10 d))
   CD_TN (cdr (assoc 1 d1))
   CD_TK (cdr (assoc 1 d2))
   CH_CAO (cdr (assoc 1 d3))
)

;;;Vi du minh hoa su dung cac gia tri nhan duoc
(alert
   (strcat
       "\nREPORT:"
       "\n\tCao do hien trang: " CD_TN
       "\n\tCao do thiet ke: " CD_TK
       "\n\tDo chenh cao: " CH_CAO
       "\n\tToa do diem chen block: " (rtos (car p)) "; " (rtos (cadr p)) "; " (rtos (caddr p))
   )
)
)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Thông cảm với bạn vì attrib block là đối tượng phức tạp. Bạn mới làm quen với entity, lại chọn đúng cái phức tạp mà "chơi" nên lúng túng cũng phải!

Đoạn lisp sau lấy ra được các thuộc tính từ attrib block có tên "caodomoc" trong bản vẽ của bạn. Kết quả nhận được là:

p: toạ độ điểm chèn block, kiểu point (list có 3 thành phần)

CD_TN: cao độ hiện trạng, kiểu string

CD_TK: cao độ thiết kế, kiểu string

CH_CAO: độ chênh cao, kiểu string

Bạn có thể sử dụng chúng để làm gì tuỳ ý. Hàm alert cuối cùng chỉ là ví dụ, minh hoạ cho việc áp dụng các kết quả nhận được.

 

(defun C:GP() ;;;Get Properties
(setq
;;;Lay cac doi tuong trong attrib block
   e (car (entsel "\nSelect attrib block:"))
   e1 (entnext e)
   e2 (entnext e1)
   e3 (entnext e2)

;;;Lay toan bo data tu cac doi tuong tren
   d (entget e)
   d1 (entget e1)
   d2 (entget e2)
   d3 (entget e3)

;;;Lay ra cac gia tri can quan tam tu cac data
   p (cdr (assoc 10 d))
   CD_TN (cdr (assoc 1 d1))
   CD_TK (cdr (assoc 1 d2))
   CH_CAO (cdr (assoc 1 d3))
)

;;;Vi du minh hoa su dung cac gia tri nhan duoc
(alert
   (strcat
       "\nREPORT:"
       "\n\tCao do hien trang: " CD_TN
       "\n\tCao do thiet ke: " CD_TK
       "\n\tDo chenh cao: " CH_CAO
       "\n\tToa do diem chen block: " (rtos (car p)) "; " (rtos (cadr p)) "; " (rtos (caddr p))
   )
)
)

thực ra rất hấp dẫn, máy hôm nay đi công tác nên không online được

nhưng mình cũng lấy được thuộc tính rồi

bác xem thử nhé từ của bác nhưng mà mình làm theo kiểu "nhà quê:

 

;;;--------------------------------------------------------------------

(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename

(setq i 0 Le nil)

(repeat (sslength ss)

(setq

e (ssname ss i)

Le (append Le (list e))

i (1+ i)

)

)

Le

)

;;;--------------------------------------------------------------------

(defun getntv(sst p / Lt) ;;;Get Nearest Text Value in sst from p

(setq

Lt (ss2ent sst)

neap (lambda (x y)

(<

(distance p (cdr (assoc 10 (entget x))))

(distance p (cdr (assoc 10 (entget y))))

)

)

Lt (vl-sort Lt 'neap)

)

(cdr (assoc 1 (entget (car Lt))))

)

;;;--------------------------------------------------------------------

(defun C:UPH(/ e p t1 t2 t3 e1 e2 e3 d1 d2 d3) ;;;UPdate Height

(setq

e (car (entsel "\nSelect height block:")) ;;;Select block

p (cdr (assoc 10 (entget e))) ;;;Insert point of block

t1 (getntv (ssget "X" '((0 . "TEXT") (62 . 3))) p) ;;;Green text value nearest from p

t2 (getntv (ssget "X" '((0 . "TEXT") (62 . 1))) p) ;;;Red text value nearest from p

t3 (rtos (- (atof t2) (atof t1)) 2 2) ;;;Subtract

;t3 (rtos caotrinh 2 2)

e1 (entnext e) ;;;Attrib CD_TN entity

e2 (entnext e1) ;;;Attrib CD_TK entity

e3 (entnext e2) ;;;Attrib CH_CAO entity

 

d1 (entget e1) ;;;Get data1

tt1 (assoc 1 d1)

d1 (subst (cons 1 t1) (assoc 1 d1) d1) ;;;Change data1

d2 (entget e2) ;;;Get data2

tt2 d2

d2 (subst (cons 1 t2) (assoc 1 d2) d2) ;;;Change data2

d3 (entget e3) ;;;Get data3

d3 (subst (cons 1 t3) (assoc 1 d3) d3) ;;;Change data3

)

(entmod d1) ;;;Modify e1

(entmod d2) ;;;Modify e2

(entmod d3) ;;;Modify e3

(command "regen") ;;;Regenerating

(princ tt1)

(princ "\n")

(princ (+ 1 (atof (cdr tt1))))

(setvar "CECOLOR" "cyan")

(command ".text" "s" "Standard" "j" "bl" p 0 (+ 1 (atof (cdr tt1))) ^C^C)

 

(princ) ;;;Silent quit

)

;;;--------------------------------------------------------------------

hì hì

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
pác hoanh và bac ssg đã trả lời rồi nhưng thực sự tôi vẫn thấy lơn mơ quá các pác có thể cho hẳn mình một đoạn code giải bài này rồi mình mới tiếp tục cuộc hành trình được: - có một loạt block trên bản vẽ (thuộc tính caodoht, caodotk, chenhcao) và một đôi text (màu xanh, màu đỏ chẵn hạn) - hô xung phong một pác lấy thằng text màu xanh gần nhất (điểm chèn block) gán cho caodoht, text màu đỏ cũng gần nhất cho caodotk; tính chenhcao=caotk-caodoht một đoạn khác: chọn vài block thôi các pác chỉ giup thế này cho dễ hiểu - chọn vài block có thuộc tính như nói trên : hô xung phong nữa thì sinh ra thằng text màu xanh màu đỏ tại điểm chèn chẵn hạn - với lại làm sao để mình bỏ cái block vào đây để các pạn dễ hình dung hoặc đoạn code của minh chẳn hạn hì hì cam ơn

 

Cho mền tham gia chút nhé.

Để làm được điều trên, có thể xây dựng các hàm sau:

-1 Hàm gán giá trị cho thuộc tính:

setatt (ent Tag value) : Trong đó ent: block, tag: thuộc tính cần gán, value: giá trị cần gán

 

-1 Hàm tìm text gần nhất block

textnear (ent ss) : Trong đó ent: block, ss: là tập hợp text

 

Sau khi xây dựng hai hàm này (cũng ngắn thôi) thì mọi việc sẽ đơn giản

Hàm chính:

Quét hết bock: ss = (ssget "X" '((0 . "INSERT")(2 . "CAODOMOC")))

Quét hết chữ xanh: ss1 = (ssget "X" '((0 . "TEXT") (62 . 3)))

Tương tự cho chữ đỏ: ss2 = (ssget "X" '((0 . "TEXT") (62 . 1)))

 

Sau đó :

cứ mỗi block trong ss, tìm trong ss1 cái nào gần block nhất (textnear bock ss1) thì gán cho "CD_TN" (setatt block "CD_TN" text)

tương tự tìm trong ss2 gán cho "CD_TK"

lấy hiệu gán cho CH_CAO

 

Các bác thấy ổn không?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

À, mà theo mình mấy bác không nên sử dụng cách lấy thuộc tính bằng entnext và update bằng entmod. Cách này phải biết rõ bock có bao nhiêu att, và mỗi att có vị trí ở đâu.

Để tổng quát, các bác tham khảo code sau xem. đọan code này liệt kê ra tất cả att và value của nó.

Từ đây có thể triển khai ra các hàm khác để set, hoặc get att theo như ý muốn.

 

(defun getatt (ent / att atts obj)
(vl-load-com)
(setq obj (vlax-ename->vla-object ent))
(setq atts  (safearray-value  (variant-value (vla-getattributes obj))))

(foreach att atts
 (princ  (vlax-get att 'tagstring))
   	(princ ": ")
   	(princ  (vlax-get att 'textstring))
   	(princ "\n")
   	)
  )

 

 

Ví dụ: (getatt (car (entsel)))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×