Đến nội dung


Hình ảnh
- - - - -

Chon text trong autolist


  • Please log in to reply
9 replies to this topic

#1 anhbt82

anhbt82

    biết pan

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

Đã gửi 24 May 2008 - 12:28 PM

Chao moi nguoi trong dien dan, minh la mem moi, xin moi nguoi giup cho van de nay:

Mình có viết 1 list cộng nhiều text (số integer) theo 1 trật tự nhất định. Mình gặp phải vấn đề chọn text theo cửa sổ nó không theo đúng trật tự mình muốn, text nào tạo ra trước được chọn trước bởi vậy việc cộng không theo đúng trật tự (minhdùng hàm ssget để chọn đói tượng).

ví dụ: trên bản vẽ cad mình có những text này:

a b c d e f g

Mục đích list mình viết: - quét chọn các đối tượng bản vẽ
- c =a +b rồi d= c+b rồi e= c+d........ Nhưng nếu các text không tạo ra đúng trật tự thì việc cộng bi sai

Xin các bạn chỉ mình cách khắc phục
  • 0

#2 ssg

ssg

    biết lệnh adcenter

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

Đã gửi 24 May 2008 - 02:22 PM

Chao moi nguoi trong dien dan, minh la mem moi, xin moi nguoi giup cho van de nay:

Mình có viết 1 list cộng nhiều text (số integer) theo 1 trật tự nhất định. Mình gặp phải vấn đề chọn text theo cửa sổ nó không theo đúng trật tự mình muốn, text nào tạo ra trước được chọn trước bởi vậy việc cộng không theo đúng trật tự (minhdùng hàm ssget để chọn đói tượng).

ví dụ: trên bản vẽ cad mình có những text này:

a b c d e f g

Mục đích list mình viết: - quét chọn các đối tượng bản vẽ
- c =a +b rồi d= c+b rồi e= c+d........ Nhưng nếu các text không tạo ra đúng trật tự thì việc cộng bi sai

Xin các bạn chỉ mình cách khắc phục

Bạn thử làm ví dụ sau:
Tạo 1 đối tượng text. Tại dòng command, nhập:
Command: (setq d (entget (car (entsel))))
Select object: chọn đối tượg text nói trên, kết quả nhận được có dạng:
((-1 . ) (0 . "TEXT") (330 . name: 40077cf8>) (5 . "2D0") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"0") (100 . "AcDbText") (10 130.193 147.152 0.0) (40 . 2.5) (1 . "1") (50 .
0.0) (41 . 0.7) (51 . 0.0) (7 . "vnsimple") (71 . 0) (72 . 0) (11 0.0 0.0 0.0)
(210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0))
Ngoài Entity name, bạn chú ý ở DXF 5 có chuỗi "2D0", đó là chuỗi số hexa, gọi là Handle (tạm gọi là bí danh) của entity. Handle tồn tại cùng với entity, không trùng nhau và theo quy luật: cái tạo ra sau có handle lớn hơn cái tạo ra trước. Bạn so sánh handle sẽ biết thứ tự tạo thành của chúng.

Để lấy handle: (setq hd (cdr (assoc 5 d)))
Nhân tiện nói thêm, để lấy entity từ handle: (setq e (handent hd))

Hy vọng rằng bạn đã hiểu và tự xử lý được?
  • 0

#3 anhbt82

anhbt82

    biết pan

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

Đã gửi 26 May 2008 - 12:08 PM

Mình cảm ơn bạn. Mình hiểu ý bạn, nhưng các text trên bản vẽ của mình lại không được sắp xếp theo thứ tự được tao ra, nên việc biết text nào tạo ra trước hay sau cũng không có ý nghĩa. Vậy bạn có cách nào không, chỉ mình với.
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 12:58 PM

Mình cảm ơn bạn. Mình hiểu ý bạn, nhưng các text trên bản vẽ của mình lại không được sắp xếp theo thứ tự được tao ra, nên việc biết text nào tạo ra trước hay sau cũng không có ý nghĩa. Vậy bạn có cách nào không, chỉ mình với.

Thế text của bạn sắp xếp theo thứ tự nào?
  • 0

#5 anhbt82

anhbt82

    biết pan

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

Đã gửi 26 May 2008 - 01:42 PM

Thế text của bạn sắp xếp theo thứ tự nào?

Text của mình sắp xếp thế này:

Ví dụ:
a b c d e f g h .......

a=b+c rồi thì e= d+c rồi thì g= e+f .... cứ như vậy cho đến hết, mục đích mình viết list là vậy. Các text không có thứ tự tạo ra trước hay sau
  • 0

#6 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 01:55 PM

Thế text của bạn sắp xếp theo thứ tự nào?

Text của mình sắp xếp thế này:

Ví dụ:
a b c d e f g h .......

a=b+c rồi thì e= d+c rồi thì g= e+f .... cứ như vậy cho đến hết, mục đích mình viết list là vậy. Các text không có thứ tự tạo ra trước hay sau

thế thì bạn sắp xếp theo giá trị X của điểm chèn text!
  • 0

#7 anhbt82

anhbt82

    biết pan

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

Đã gửi 26 May 2008 - 04:22 PM

thế thì bạn sắp xếp theo giá trị X của điểm chèn text!



Cách làm theo trục X hay Y mình cũng làm rồi, nhưng nó hơi mất công 1 chút là phải hỏi người dùng là chọn theo truc X hay Y. Không biết bạn còn cách nào không ?

Nhân đây bạn Nguyen Hoanh cho mình hỏi là ký tự nào đại diện cho các con số khi mình muốn Replace ?
  • 0

#8 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 04:35 PM

Cách làm theo trục X hay Y mình cũng làm rồi, nhưng nó hơi mất công 1 chút là phải hỏi người dùng là chọn theo truc X hay Y. Không biết bạn còn cách nào không ?

Nhân đây bạn Nguyen Hoanh cho mình hỏi là ký tự nào đại diện cho các con số khi mình muốn Replace ?


hoàn toàn không hiểu vấn đề của bạn.

- Tại sao lại phải hỏi người dùng là chọn X hay Y? khi các chữ viết từ trái qua phải thì mặc nhiên là được sắp xếp theo X mà không cần phải hỏi.
- "ký tự nào đại diện cho các con số khi mình muốn Replace", không hiểu bạn hỏi gì bởi không biết bạn đang dùng thuật toán, hàm hay lệnh nào để replace.
  • 0

#9 anhbt82

anhbt82

    biết pan

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

Đã gửi 26 May 2008 - 04:55 PM

thế thì bạn sắp xếp theo giá trị X của điểm chèn text!


Cảm ơn ban, chắc chỉ còn cách này thôi, vì text của mình khi thì nó theo truc X khi thì Y, có lúc thì cần cộng theo chiều tăng, chiều giảm trục X, Y nên cũng hơi rườm rà khi dùng vì phải hỏi 2 lần. Không biết bạn có cách nào khác đơn giản hơn không ?

Mình có dùng cái lệnh Tcount mà bản chỉ.
Ví dụ: mình có nhiều text c3 c4 c5 c6 c7 c8 c9 c10 ......
Khi dùng Tcount mình đã xếp lại được c3 1 c4 2 c5 3 c6 4 c7 5 c7 6 c8 7 c9 8 c10 9
Làm sao để bỏ đi các số 3 4 5 6 7 8 9 10 để còn lại các text minh muốn là c1 c2 c3 c4 c5 c6 c7 c8 c9
  • 0

#10 ssg

ssg

    biết lệnh adcenter

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

Đã gửi 26 May 2008 - 05:10 PM

Góp ý:
Bạn là programmer, phải biết cách diễn đạt rõ ràng để người khác hiểu chính xác vấn đề của bạn. Người khác không phải là bạn, hoàn toàn chưa có một khái niệm gì về việc bạn đang làm. Thú thật, đọc một loạt bài trao đổi, mình cũng chưa hiểu ý bạn muốn gì!
Lưu ý thêm, ssget bằng bằng select window không sắp xếp các thành phần trong ss theo thứ tự tạo thành của các entities. Chính vì vậy, ngay bài đầu tiên, mình đã hiểu sai vấn đề là bạn muốn chọn theo thứ tự tạo thành.
  • 1