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

[yêu cầu ] lisp nối text tự động !

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

cho phép e đào mộ lisp này 1 chút , lisp của a ketxu dùng nối lisp tốt theo yêu cầu của bác jang nhưng lúc nối xong thì e thấy text bị chuyển vị trí? dịch sang bên trái 1 chút có thể nào giữ nguyên vị trí của text đc k ạ, 

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

cho phép e đào mộ lisp này 1 chút , lisp của a ketxu dùng nối lisp tốt theo yêu cầu của bác jang nhưng lúc nối xong thì e thấy text bị chuyển vị trí? dịch sang bên trái 1 chút có thể nào giữ nguyên vị trí của text đc k ạ, 

Hề hề hề

Có hai text được nối lại thành 1. Vậy bạn muốn giữ nguyên vị trí của text nào ??????

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ào bác Bình :0 ví dụ tex 15,20 đang bị tách thành 2 text 15 và ,20 thì e muốn nó nối lại với nhau va giữ nguyên vj trí của text 15 ( phần nguyên) còn phần thập phân ,20 thì theo sau thôi ạ :) bác vào giúp e chút với :) e cũng đang cần gấp :0 thank bác 

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ào bác Bình :0 ví dụ tex 15,20 đang bị tách thành 2 text 15 và ,20 thì e muốn nó nối lại với nhau va giữ nguyên vj trí của text 15 ( phần nguyên) còn phần thập phân ,20 thì theo sau thôi ạ :) bác vào giúp e chút với :) e cũng đang cần gấp :0 thank bác 

Hề hề hề,

Việc căn chỉnh text này phụ thuộc vào cấu tạo của các text thành phần. Vì thế bạn hãy gửi một bản vẽ có các text cần nối lên để mình xem cụ thể các text này được căn lề ra sao. Từ đó mới có thể căn text ghép đúng vị trí của text cũ được bạn ạ. Có thể sẽ có trường hợp kết quả chỉ gần trùng chứ không thể trùng hoàn được bạn ạ. Do khoảng cách giữa các ký tự trong text không phải lúc nào cũng là bằng nhau.

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

vâng đây là file của e :) các text bị rời nhau ra a ạ . http://www.cadviet.com/upfiles/3/48377_bd.dwg

Hề hề hề, Với bản vẽ bạn gửi lên, tức là với cấu trúc các text tương tự như vậy, cùng chiều cao text, cùng cách căn lề thì bạn có thể sử dụng lisp của bác ketxu và thêm dòng code sau đây vào cuối vòng lặp (while ..... )

(command "move" (vlax-vla-object->ename tobj) "" (setq p (getpoint)) (list (+ (car p) 1.6) (cadr p) (caddr p)))

 

Hy vọng đúng ý bạ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
Vào lúc 11/7/2012 tại 22:02, ketxu đã nói:

@Giang : không ai nghi ngờ sự nhiệt tình của bác Bình, vậy mà .. Bảo sao ...

Mình nhắc lại với riêng G lần nữa, nếu sau này bạn có cần sự giúp đỡ của CV, hãy suy nghĩ về cách đặt vấn đề của mình. Những bài thiếu rõ ràng hoặc chứng tỏ sự hời hợt sẽ bị xóa thẳng tay.

 

Code nhanh cho bạn lisp này, khi hỏi d thì bạn nhập hoặc đo d như thế nào tùy cách bạn định nghĩa khoảng cách Text, nhập sai thì k nên trách lisp làm việc sai ý bạn. Khi kiểm tra nó sẽ so sánh INSERTION POINT

- Khi hỏi = d hay <=d, nếu bạn đánh < hoặc space thì tự động hiểu là <= d thì nối. Nếu đánh chữ nào khác thì tính là bằng (TUYỆT ĐỐI)

 

 


(defun c:test(/ lstObj d ans ins! tObj tam isFound lstObj lstRs)
(setq lstObj (mapcar 'vlax-ename->vla-object (acet-ss-to-list (ssget (list (cons 0 "*TEXT")))))
 d (getdist "\nKhoang cach :")
 ans (getstring "\n<=d hay =d ? [<] :")
)
(defun ins!(e)(vlax-get e 'Insertionpoint))
(while (setq tObj (car lstObj))
(setq tam (ins! tObj))
(cond ((setq isFound (vl-member-if '(lambda(x)(and (setq kc (- (distance (ins! x) tam) d))(if (wcmatch ans ",<")(not (minusp kc))(zerop kc))))
 	(setq lstObj (cdr lstObj))))
  (setq isFound (vl-sort isFound '(lambda(x y)(< (distance (ins! x) tam)(distance (ins! y) tam))))
lstObj (vl-remove (car isFound) lstObj)
lstRs (vl-sort (list tobj (car isFound)) '(lambda(x y)(< (car (ins! x))(car (ins! y))))))
  (vla-put-textstring (car lstRs)
(strcat
(vla-get-textstring (car lstRs)) ","
(vla-get-textstring (last lstRs))
)
  )
  (vla-delete (last lstRs))
 )
)
)
)
 

 

 

- Mình cũng k kiểm tra text của bạn là số hay không đâu, dù công việc đó vô cùng đơn giản, nhưng bạn yêu cầu là text quét chọn all

- Mình cũng nói luôn là bạn định nối các text theo khoảng cách phương x thì sẽ sai bét. Tự bạn tìm hiểu nguyên nhân nhé :")

 

Chúc bạn may mắn

Thank Ketxu!

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
Vào lúc 11/7/2012 tại 22:02, ketxu đã nói:

@Giang : không ai nghi ngờ sự nhiệt tình của bác Bình, vậy mà .. Bảo sao ...

Mình nhắc lại với riêng G lần nữa, nếu sau này bạn có cần sự giúp đỡ của CV, hãy suy nghĩ về cách đặt vấn đề của mình. Những bài thiếu rõ ràng hoặc chứng tỏ sự hời hợt sẽ bị xóa thẳng tay.

 

Code nhanh cho bạn lisp này, khi hỏi d thì bạn nhập hoặc đo d như thế nào tùy cách bạn định nghĩa khoảng cách Text, nhập sai thì k nên trách lisp làm việc sai ý bạn. Khi kiểm tra nó sẽ so sánh INSERTION POINT

- Khi hỏi = d hay <=d, nếu bạn đánh < hoặc space thì tự động hiểu là <= d thì nối. Nếu đánh chữ nào khác thì tính là bằng (TUYỆT ĐỐI)

 

 


(defun c:test(/ lstObj d ans ins! tObj tam isFound lstObj lstRs)
(setq lstObj (mapcar 'vlax-ename->vla-object (acet-ss-to-list (ssget (list (cons 0 "*TEXT")))))
 d (getdist "\nKhoang cach :")
 ans (getstring "\n<=d hay =d ? [<] :")
)
(defun ins!(e)(vlax-get e 'Insertionpoint))
(while (setq tObj (car lstObj))
(setq tam (ins! tObj))
(cond ((setq isFound (vl-member-if '(lambda(x)(and (setq kc (- (distance (ins! x) tam) d))(if (wcmatch ans ",<")(not (minusp kc))(zerop kc))))
 	(setq lstObj (cdr lstObj))))
  (setq isFound (vl-sort isFound '(lambda(x y)(< (distance (ins! x) tam)(distance (ins! y) tam))))
lstObj (vl-remove (car isFound) lstObj)
lstRs (vl-sort (list tobj (car isFound)) '(lambda(x y)(< (car (ins! x))(car (ins! y))))))
  (vla-put-textstring (car lstRs)
(strcat
(vla-get-textstring (car lstRs)) ","
(vla-get-textstring (last lstRs))
)
  )
  (vla-delete (last lstRs))
 )
)
)
)
 

 

 

- Mình cũng k kiểm tra text của bạn là số hay không đâu, dù công việc đó vô cùng đơn giản, nhưng bạn yêu cầu là text quét chọn all

- Mình cũng nói luôn là bạn định nối các text theo khoảng cách phương x thì sẽ sai bét. Tự bạn tìm hiểu nguyên nhân nhé :")

 

Chúc bạn may mắn

Thank Ketxu, mình cũng đang cần lisp này!

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  

×