Đến nội dung


Hình ảnh

nhập các text đi theo các block để làm ký hiệu


  • Please log in to reply
14 replies to this topic

#1 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 08:32 AM

Mình đang phải nhập các text đi theo các block để làm ký hiệu cho block ấy. Mà các block này nằm dọc trên đường pline. Bạn có cách nào để làm việc này mà mất ít thời gian không. Chỉ giúp mình với, cám ơn bạn nhiều!
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 24 September 2008 - 09:28 AM

Mình đang phải nhập các text đi theo các block để làm ký hiệu cho block ấy. Mà các block này nằm dọc trên đường polyline. Bạn có cách nào để làm việc này mà mất ít thời gian không. Chỉ giúp mình với, cám ơn bạn nhiều!

Chưa hiểu mục đích và khó khăn trong công việc của bạn.

Bạn hãy nói rõ hơn, nên có file dwg minh họa.
  • 0

#3 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 09:42 AM

Chưa hiểu mục đích và khó khăn trong công việc của bạn.

Bạn hãy nói rõ hơn, nên có file dwg minh họa.

Đây là bản vẽ mình đang làm. Các block này là các đèn, và việc của mình là phải đánh số thứ tự cho các đèn ấy. Mình ko biết phải làm thế nào cho nhanh cả, bạn có cách nào không chỉ mình với!
http://www.cadviet.c...files/banve.jpg
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 24 September 2008 - 10:19 AM

Đây là bản vẽ mình đang làm. Các block này là các đèn, và việc của mình là phải đánh số thứ tự cho các đèn ấy. Mình ko biết phải làm thế nào cho nhanh cả, bạn có cách nào không chỉ mình với!
http://www.cadviet.c...files/banve.bmp

Xin hỏi thêm bạn các thông tin:

- Toạ độ của TEXT có liên quan như thế nào với toạ độ của block?
- giá trị của text theo quy luật nào?
  • 0

#5 Phidoi_gabay

Phidoi_gabay

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 10:22 AM

Đây là bản vẽ mình đang làm. Các block này là các đèn, và việc của mình là phải đánh số thứ tự cho các đèn ấy. Mình ko biết phải làm thế nào cho nhanh cả, bạn có cách nào không chỉ mình với!
http://www.cadviet.c...files/banve.bmp

Sao bạn không dùng Tcount xem ?
  • 0

#6 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 10:44 AM

Xin hỏi thêm bạn các thông tin:

- Toạ độ của TEXT có liên quan như thế nào với toạ độ của block?
- giá trị của text theo quy luật nào?

- Thực ra toạ độ của Text so với toạ độ của block ko cần chính xác lắm. Nhưng để có thể mặc định cho một loạt các text khác nhau thì mình định sẽ xác định toạ độ của text như sau:
http://www.cadviet.c...s/toadotext.jpg
- Còn giá trị của block sẽ tăng dần theo dãy block bố trí trên đường pline. Ví dụ đèn đầu tiên là 2/1, các đèn tiếp theo là 2/2, 2/3...(Hiện tại mình đang dùng lệnh tcount để làm việc này)
  • 0

#7 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 24 September 2008 - 12:02 PM

- Thực ra toạ độ của Text so với toạ độ của block ko cần chính xác lắm. Nhưng để có thể mặc định cho một loạt các text khác nhau thì mình định sẽ xác định toạ độ của text như sau:
http://www.cadviet.c...s/toadotext.bmp
- Còn giá trị của block sẽ tăng dần theo dãy block bố trí trên đường pline. Ví dụ đèn đầu tiên là 2/1, các đèn tiếp theo là 2/2, 2/3...(Hiện tại mình đang dùng lệnh tcount để làm việc này)

Bạn đang dùng TCOUNT thì gặp khó khăn gì không?

bạn mong muốn lisp mới hơn TCOUNT ở điểm gì?
  • 0

#8 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 12:23 PM

Bạn đang dùng TCOUNT thì gặp khó khăn gì không?

bạn mong muốn lisp mới hơn TCOUNT ở điểm gì?

Khó khăn của mình không phải là ở lệnh tcount mà ở việc phải đi copy từng text một đến các vị trí của block ấy. Có đến khoảng 40block nằm trên một đường pline. Nếu dùng lệnh copy các text thì sẽ mất nhiều thời gian.
  • 0

#9 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

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

Đã gửi 24 September 2008 - 01:02 PM

Khó khăn của mình không phải là ở lệnh tcount mà ở việc phải đi copy từng text một đến các vị trí của block ấy. Có đến khoảng 40block nằm trên một đường pline. Nếu dùng lệnh copy các text thì sẽ mất nhiều thời gian.


Đề nghị bạn (các bạn) khi post ảnh lên diễn đàn thì hãy dùng đuôi *.jpg cho nhanh, dễ đọc, up cũng nhanh
Bạn up cái duoi bmp làm tôi chăng muốn đọc! (không đọc nổi, lâu quá)
  • 0
Hãy ước cho trọn 1 ước mơ!

#10 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 01:20 PM

Đề nghị bạn (các bạn) khi post ảnh lên diễn đàn thì hãy dùng đuôi *.jpg cho nhanh, dễ đọc, up cũng nhanh
Bạn up cái duoi bmp làm tôi chăng muốn đọc! (không đọc nổi, lâu quá)

Sorry mọi người. Mình vội quá nên ko để ý. Mình đã up lại ảnh rồi đấy! Bạn xem lại giúp mình nhé! Thank
  • 0

#11 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 24 September 2008 - 03:36 PM

Hichic. Ai biết cách giải quyết làm ơn chỉ giúp mình với!
Mình cảm ơn lắm lắm :cheers:
  • 0

#12 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 24 September 2008 - 08:01 PM

Khó khăn của mình không phải là ở lệnh tcount mà ở việc phải đi copy từng text một đến các vị trí của block ấy. Có đến khoảng 40block nằm trên một đường pline. Nếu dùng lệnh copy các text thì sẽ mất nhiều thời gian.

Hãy sử dụng tính năng của block, cộng thêm một chút sáng tạo trong cách dùng. Phương án giải quyết như sau:
Cách 1: dùng Tcount
- Gọi tên block bóng đèn là A, bạn hãy tạo một block với tên B chứa block A + text đánh số cột
- Thay vì chèn block A như thường lệ, hãy chèn block B
- Sau khi chèn xong, hãy chọn tất cả các block B và explode. Chỉnh sửa tất cả các text tên cột cho đúng ý (nên dùng filter hoặc ssx để chỉnh cho đồng bộ).
- Bạn đã có các text như ý để sử dụng với Tcount

Cách 2: dùng lisp với thuật toán:
- Chọn text đầu tiên
- Chọn điểm gốc copy
- Chọn điểm chèn cột tiếp theo (+ options (đánh số tự động hay thay đổi)
Đây là lisp đánh số cột điện tôi sưu tầm và sửa lại, bạn có thể tham khảo:
**Danh so cot den:
;;;=====Increasing copy=====
(defun c:dsc (/ ang x y ent tg tg1tg2 num_r num_c num_inc dis_r dis_c num top idnum
dx dy bottom inc tgnum attr attr_ent t_base b_base locat value
deci stnum loca1 loca2 tt count inctg inctg1 bpoint mx my nx ny bx by)
(setq idnum 0)
(while (/= idnum 1)
(setq ent (entsel "\nHay lua chon so ma ban muon copy : "))
(if ent
(progn
(setq e (car ent))
(setq tg (entget e))
(if (= (cdr (assoc 0 tg)) "TEXT") (setq idnum 1))
)
(princ)
)
)

(setq num_inc (getreal "\nHay nhap he so tang giam <1> : "))
(if (= num_inc nil) (setq num_inc 1))

(setq bpoint (getpoint "\nChon diem goc de copy : "))
(setq x (car bpoint))
(setq y (car(cdr bpoint)))

(if (and (= (cdr (assoc 72 tg)) 0) (= (cdr (assoc 73 tg)) 0))
(progn
(setq bx (car (cdr (assoc 10 tg))))
(setq by (car (cdr (cdr (assoc 10 tg)))))
)
(progn
(setq bx (car (cdr (assoc 11 tg))))
(setq by (car (cdr (cdr (assoc 11 tg)))))
)
)

(setq attr (cdr tg)) ;attr chua cac thuoc tinh cua Entity nguon
(setq tg (cdr (assoc 1 tg)))
(setq inc 0)
(setq tg1 "")
(setq t_base "")
(setq b_base "")
(setq idnum 0)
(setq top 0)
(setq bottom 0)
(setq stnum "")
(setq deci 0)
(repeat (strlen tg)
(if (or (and (> (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 47)
(< (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 58))
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 32)
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46))
(progn
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46) (setq deci inc))
(if (= inc 0)
(progn
(setq idnum 1)
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46)
(setq b_base (strcat "." b_base)))
)
)
(if (= bottom 1) (progn (setq bottom 0) (setq idnum 1) (setq top 1)))
(if (and (= idnum 0) (= top 1)) (setq t_base (strcat tgnum t_base)))
(if (= idnum 1)
(progn
(if (and (= tgnum "0") (> inc 0)) (setq stnum (strcat stnum "0")) (setq stnum ""))
(setq tg1 (strcat tgnum tg1))
)
)
)
(if (= inc 0)
(progn
(setq b_base (strcat tgnum b_base))
(setq bottom 1)
)
(if (= bottom 1)
(setq b_base (strcat tgnum b_base))
(progn
(setq top 1)
(setq t_base (strcat tgnum t_base))
(if (= idnum 1) (setq idnum 0))
)
)
)
)
(setq inc (+ inc 1))
)

(if (= tg1 "") (exit))
(setq num (atof tg1))
(setq count 1)

(while (setq bpoint (getpoint "\nChon diem copy tiep theo : "))
(setq num (+ num num_inc))
(if (>= (strlen b_base) 3)
(cond
( (or (= "A" (strcase (substr b_base 2 1))
)
(= "B" (strcase (substr b_base 2 1))
)
)
(setq b_base (strcat (substr b_base 1 1) (chr (1+ (ascii (substr b_base 2 1))) ) (substr b_base 3)
)
)
)
((= "C" (strcase (substr b_base 2 1)))
(setq b_base (strcat (substr b_base 1 1) "A") )
)
)
(cond
( (or (= "A" (strcase (substr b_base 2 1))
)
(= "B" (strcase (substr b_base 2 1))
)
)
(setq b_base (strcat (substr b_base 1 1) (chr (1+ (ascii (substr b_base 2 1))) ) (substr b_base 3)
)
)
)
((= "C" (strcase (substr b_base 2 1)))
(setq b_base (strcat (substr b_base 1 1) "A") )
)
)
)
(setq value (strcat t_base (strcat stnum (rtos num 2 deci)) b_base))
(setq nx (car bpoint))
(setq ny (car(cdr bpoint)))
(setq dx (- nx x))
(setq dy (- ny y))
(setq mx (car (getvar "ucsxdir")))
(setq my (car (cdr (getvar "ucsxdir"))))
(setq loca1 (+ bx (* mx dx)))
(setq loca2 (+ by (* my dx)))
(setq mx (car (getvar "ucsydir")))
(setq my (car (cdr (getvar "ucsydir"))))
(setq loca1 (+ loca1 (* mx dy)))
(setq loca2 (+ loca2 (* my dy)))
(setq attr_ent (subst (cons 1 value) (assoc 1 attr) attr))
(if (and (= (cdr (assoc 72 attr_ent)) 0) (= (cdr (assoc 73 attr_ent)) 0))
(setq attr_ent (subst (list 10 loca1 loca2 0) (assoc 10 attr_ent) attr_ent))
(setq attr_ent (subst (list 11 loca1 loca2 0) (assoc 11 attr_ent) attr_ent))
)
(entmake attr_ent)
(setq count (+ count 1))
) ;end while
(princ)
)

  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#13 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 25 September 2008 - 09:02 AM

Hãy sử dụng tính năng của block, cộng thêm một chút sáng tạo trong cách dùng. Phương án giải quyết như sau:
Cách 1: dùng Tcount
- Gọi tên block bóng đèn là A, bạn hãy tạo một block với tên B chứa block A + text đánh số cột
- Thay vì chèn block A như thường lệ, hãy chèn block B
- Sau khi chèn xong, hãy chọn tất cả các block B và explode. Chỉnh sửa tất cả các text tên cột cho đúng ý (nên dùng filter hoặc ssx để chỉnh cho đồng bộ).
- Bạn đã có các text như ý để sử dụng với Tcount

Cách 2: dùng lisp với thuật toán:
- Chọn text đầu tiên
- Chọn điểm gốc copy
- Chọn điểm chèn cột tiếp theo (+ options (đánh số tự động hay thay đổi)
Đây là lisp đánh số cột điện tôi sưu tầm và sửa lại, bạn có thể tham khảo:

**Danh so cot den:
;;;=====Increasing copy=====
(defun c:dsc (/ ang x y ent tg tg1tg2 num_r num_c num_inc dis_r dis_c num top idnum
dx dy bottom inc tgnum attr attr_ent t_base b_base locat value
deci stnum loca1 loca2 tt count inctg inctg1 bpoint mx my nx ny bx by)
(setq idnum 0)
(while (/= idnum 1)
(setq ent (entsel "\nHay lua chon so ma ban muon copy : "))
(if ent
(progn
(setq e (car ent))
(setq tg (entget e))
(if (= (cdr (assoc 0 tg)) "TEXT") (setq idnum 1))
)
(princ)
)
)

(setq num_inc (getreal "\nHay nhap he so tang giam <1> : "))
(if (= num_inc nil) (setq num_inc 1))

(setq bpoint (getpoint "\nChon diem goc de copy : "))
(setq x (car bpoint))
(setq y (car(cdr bpoint)))

(if (and (= (cdr (assoc 72 tg)) 0) (= (cdr (assoc 73 tg)) 0))
(progn
(setq bx (car (cdr (assoc 10 tg))))
(setq by (car (cdr (cdr (assoc 10 tg)))))
)
(progn
(setq bx (car (cdr (assoc 11 tg))))
(setq by (car (cdr (cdr (assoc 11 tg)))))
)
)

(setq attr (cdr tg)) ;attr chua cac thuoc tinh cua Entity nguon
(setq tg (cdr (assoc 1 tg)))
(setq inc 0)
(setq tg1 "")
(setq t_base "")
(setq b_base "")
(setq idnum 0)
(setq top 0)
(setq bottom 0)
(setq stnum "")
(setq deci 0)
(repeat (strlen tg)
(if (or (and (> (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 47)
(< (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 58))
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 32)
(= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46))
(progn
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46) (setq deci inc))
(if (= inc 0)
(progn
(setq idnum 1)
(if (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46)
(setq b_base (strcat "." b_base)))
)
)
(if (= bottom 1) (progn (setq bottom 0) (setq idnum 1) (setq top 1)))
(if (and (= idnum 0) (= top 1)) (setq t_base (strcat tgnum t_base)))
(if (= idnum 1)
(progn
(if (and (= tgnum "0") (> inc 0)) (setq stnum (strcat stnum "0")) (setq stnum ""))
(setq tg1 (strcat tgnum tg1))
)
)
)
(if (= inc 0)
(progn
(setq b_base (strcat tgnum b_base))
(setq bottom 1)
)
(if (= bottom 1)
(setq b_base (strcat tgnum b_base))
(progn
(setq top 1)
(setq t_base (strcat tgnum t_base))
(if (= idnum 1) (setq idnum 0))
)
)
)
)
(setq inc (+ inc 1))
)

(if (= tg1 "") (exit))
(setq num (atof tg1))
(setq count 1)

(while (setq bpoint (getpoint "\nChon diem copy tiep theo : "))
(setq num (+ num num_inc))
(if (>= (strlen b_base) 3)
(cond
( (or (= "A" (strcase (substr b_base 2 1))
)
(= "B" (strcase (substr b_base 2 1))
)
)
(setq b_base (strcat (substr b_base 1 1) (chr (1+ (ascii (substr b_base 2 1))) ) (substr b_base 3)
)
)
)
((= "C" (strcase (substr b_base 2 1)))
(setq b_base (strcat (substr b_base 1 1) "A") )
)
)
(cond
( (or (= "A" (strcase (substr b_base 2 1))
)
(= "B" (strcase (substr b_base 2 1))
)
)
(setq b_base (strcat (substr b_base 1 1) (chr (1+ (ascii (substr b_base 2 1))) ) (substr b_base 3)
)
)
)
((= "C" (strcase (substr b_base 2 1)))
(setq b_base (strcat (substr b_base 1 1) "A") )
)
)
)
(setq value (strcat t_base (strcat stnum (rtos num 2 deci)) b_base))
(setq nx (car bpoint))
(setq ny (car(cdr bpoint)))
(setq dx (- nx x))
(setq dy (- ny y))
(setq mx (car (getvar "ucsxdir")))
(setq my (car (cdr (getvar "ucsxdir"))))
(setq loca1 (+ bx (* mx dx)))
(setq loca2 (+ by (* my dx)))
(setq mx (car (getvar "ucsydir")))
(setq my (car (cdr (getvar "ucsydir"))))
(setq loca1 (+ loca1 (* mx dy)))
(setq loca2 (+ loca2 (* my dy)))
(setq attr_ent (subst (cons 1 value) (assoc 1 attr) attr))
(if (and (= (cdr (assoc 72 attr_ent)) 0) (= (cdr (assoc 73 attr_ent)) 0))
(setq attr_ent (subst (list 10 loca1 loca2 0) (assoc 10 attr_ent) attr_ent))
(setq attr_ent (subst (list 11 loca1 loca2 0) (assoc 11 attr_ent) attr_ent))
)
(entmake attr_ent)
(setq count (+ count 1))
) ;end while
(princ)
)

Cám ơn bạn rất nhiều. Mình đang áp dụng cách thứ 2 của bạn. Cũng rất hay, không phải sử dụng tcount và không phải chỉnh sửa text. Mình không biết về cách viết lisp, chỉ biết sử dụng thôi :cheers: . Nhưng bạn cho mình mạo muội hỏi một chút nhé, liệu mình có thể phát triển đoạn lisp này lên để khi sử dụng mình chỉ việc thực hiện các thao tác sau:
- chọn block đầu tiên mình chèn text
- chọn toạ độ chèn tương đối của text so với toạ độ của block (chỉ xác định trong lần đầu tiên với block đầu tiên), có thể thông qua hình thức click chuột từ điểm A(trên block) đến điểm B(điểm chèn text)
- chọn hình thức tăng, giảm hay không đổi số thứ tự của text (như trong tcount ấy)
- cuối cùng sẽ chọn tất cả các block mà mình muốn chèn text
Kết quả là chương trình sẽ tự động chèn text vào các block mà không cần phải click chuột vào từng điểm chèn của block!
Hihi, trình bày lủng củng quá mà không biết mình có đòi hỏi quá không nhỉ :s_big:
  • 0

#14 huaductiep

huaductiep

    biết vẽ rectang

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

Đã gửi 05 December 2013 - 01:46 AM

Bác chỉ chi tiết cách làm được ko ah? Em làm như vậy rồi mà vẫn ko được :(

Hãy sử dụng tính năng của block, cộng thêm một chút sáng tạo trong cách dùng. Phương án giải quyết như sau:
Cách 1: dùng Tcount
- Gọi tên block bóng đèn là A, bạn hãy tạo một block với tên B chứa block A + text đánh số cột
- Thay vì chèn block A như thường lệ, hãy chèn block B
- Sau khi chèn xong, hãy chọn tất cả các block B và explode. Chỉnh sửa tất cả các text tên cột cho đúng ý (nên dùng filter hoặc ssx để chỉnh cho đồng bộ).
- Bạn đã có các text như ý để sử dụng với Tcount

Cách 2: dùng lisp với thuật toán:
- Chọn text đầu tiên
- Chọn điểm gốc copy
- Chọn điểm chèn cột tiếp theo (+ options (đánh số tự động hay thay đổi)
Đây là lisp đánh số cột điện tôi sưu tầm và sửa lại, bạn có thể tham khảo:


**Danh so cot den:;;;=====Increasing copy=====(defun c:dsc (/ ang x y ent tg tg1tg2 num_r num_c num_inc dis_r dis_c num top idnum               dx dy bottom inc tgnum attr attr_ent t_base b_base locat value                deci stnum loca1 loca2 tt count inctg inctg1 bpoint mx my nx ny bx by)  (setq idnum 0)  (while (/= idnum 1)    (setq ent (entsel "\nHay lua chon so ma ban muon copy : "))    (if ent      (progn        (setq e (car ent))        (setq tg (entget e))        (if (= (cdr (assoc 0 tg)) "TEXT") (setq idnum 1))      )      (princ)    )  )  (setq num_inc (getreal "\nHay nhap he so tang giam <1> : "))  (if (= num_inc nil) (setq num_inc 1))  (setq bpoint (getpoint "\nChon diem goc de copy : "))  (setq x (car bpoint))  (setq y (car(cdr bpoint)))  (if (and (= (cdr (assoc 72 tg)) 0) (= (cdr (assoc 73 tg)) 0))    (progn      (setq bx (car (cdr (assoc 10 tg))))      (setq by (car (cdr (cdr (assoc 10 tg)))))    )    (progn      (setq bx (car (cdr (assoc 11 tg))))      (setq by (car (cdr (cdr (assoc 11 tg)))))    )  )  (setq attr (cdr tg))	;attr chua cac thuoc tinh cua Entity nguon  (setq tg (cdr (assoc 1 tg)))  (setq inc 0)  (setq tg1 "")  (setq t_base "")  (setq b_base "")  (setq idnum 0)  (setq top 0)  (setq bottom 0)  (setq stnum "")   (setq deci 0)   (repeat  (strlen tg)        (if  (or (and (> (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 47)                     (< (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 58))                    (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 32)                    (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46))      (progn            (if  (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46) (setq deci inc))                (if (= inc 0)             (progn               (setq idnum 1)               (if  (= (ascii (setq tgnum (substr tg (- (strlen tg) inc) 1))) 46)                   (setq b_base (strcat "." b_base)))                            )          )          (if (= bottom 1) (progn (setq bottom 0) (setq idnum 1) (setq top 1)))          (if (and (= idnum 0) (= top 1)) (setq t_base (strcat tgnum t_base)))          (if (= idnum 1)             (progn                  (if (and (= tgnum "0") (> inc 0)) (setq stnum (strcat stnum "0")) (setq stnum ""))              (setq tg1 (strcat tgnum tg1))            )          )      )      (if (= inc 0)         (progn          (setq b_base (strcat tgnum b_base))          (setq bottom 1)        )        (if (= bottom 1)          (setq b_base (strcat tgnum b_base))          (progn            (setq top 1)            (setq t_base (strcat tgnum t_base))            (if (= idnum 1) (setq idnum 0))          )        )      )    )    (setq inc (+ inc 1))  )    (if (= tg1 "") (exit))  (setq num (atof tg1))  (setq count 1)  (while (setq bpoint (getpoint "\nChon diem copy tiep theo : "))     (setq num (+ num num_inc))    (if (>= (strlen b_base) 3)      (cond    ( (or (= "A" (strcase (substr b_base 2 1))	     )	     (= "B" (strcase (substr b_base 2 1))		)	  )     (setq b_base (strcat (substr b_base 1 1) (chr (1+ (ascii (substr b_base 2 1))) ) (substr b_base 3)			  )	   )     )    ((= "C" (strcase (substr b_base 2 1)))	(setq b_base (strcat (substr b_base 1 1) "A") )	)    )      (cond    ( (or (= "A" (strcase (substr b_base 2 1))	     )	     (= "B" (strcase (substr b_base 2 1))		)	  )     (setq b_base (strcat (substr b_base 1 1) (chr (1+ (ascii (substr b_base 2 1))) ) (substr b_base 3)			  )	   )     )    ((= "C" (strcase (substr b_base 2 1)))	(setq b_base (strcat (substr b_base 1 1) "A") )	)    )      )     (setq value (strcat t_base (strcat stnum (rtos num 2 deci)) b_base))     (setq nx (car bpoint))     (setq ny (car(cdr bpoint)))     (setq dx (- nx x))     (setq dy (- ny y))     (setq mx (car (getvar "ucsxdir")))     (setq my (car (cdr (getvar "ucsxdir"))))     (setq loca1 (+ bx (* mx dx)))     (setq loca2 (+ by (* my dx)))     (setq mx (car (getvar "ucsydir")))     (setq my (car (cdr (getvar "ucsydir"))))     (setq loca1 (+ loca1 (* mx dy)))     (setq loca2 (+ loca2 (* my dy)))     (setq attr_ent (subst (cons 1 value) (assoc 1 attr) attr))     (if (and (= (cdr (assoc 72 attr_ent)) 0) (= (cdr (assoc 73 attr_ent)) 0))       (setq attr_ent (subst (list 10 loca1 loca2 0) (assoc 10 attr_ent) attr_ent))       (setq attr_ent (subst (list 11 loca1 loca2 0) (assoc 11 attr_ent) attr_ent))     )     (entmake attr_ent)     (setq count (+ count 1))  )	 ;end while  (princ))

  • 0

#15 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 December 2013 - 03:13 PM

Bác chỉ chi tiết cách làm được ko ah? Em làm như vậy rồi mà vẫn ko được :(

 

Bác Snowman đã chỉ cho bạn rất chi tiết rồi còn gì........

 

Hãy sử dụng tính năng của block, cộng thêm một chút sáng tạo trong cách dùng. Phương án giải quyết như sau:
Cách 1: dùng Tcount
- Gọi tên block bóng đèn là A, bạn hãy tạo một block với tên B chứa block A + text đánh số cột
- Thay vì chèn block A như thường lệ, hãy chèn block B
- Sau khi chèn xong, hãy chọn tất cả các block B và explode. Chỉnh sửa tất cả các text tên cột cho đúng ý (nên dùng filter hoặc ssx để chỉnh cho đồng bộ).
- Bạn đã có các text như ý để sử dụng với Tcount

 


  • 0