Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
nvduong

Lisp vẽ pline qua các text theo giá trị tăng dần

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

nvduong    6

Chào AE CadViet

Mình có việc cần nhờ AE giúp như sau

mình có 1 số text có đánh giá trị từ 1 đến... Giờ minh cần 1 cái lisp vẽ pline nối chúng lại theo thứ tự từ 1 đến...

mình đã search trên diễn đàn nhưng chưa ra kết quả

mong các bạn giúp mình

Cám ơn các bạn rất nhiều

  • Vote tăng 1
  • Vote giảm 2

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
quansla    232

Chào AE CadViet

Mình có việc cần nhờ AE giúp như sau

mình có 1 số text có đánh giá trị từ 1 đến... Giờ minh cần 1 cái lisp vẽ pline nối chúng lại theo thứ tự từ 1 đến...

mình đã search trên diễn đàn nhưng chưa ra kết quả

mong các bạn giúp mình

Cám ơn các bạn rất nhiều

đề ra quá thiếu giữ kiên, đánh số như thế nào, đánh số trong file .txt,.. hay là đánh số theo chỉ định cách quét chuột các Text có sẵn trong Model của Cad.

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
nvduong    6

đề ra quá thiếu giữ kiên, đánh số như thế nào, đánh số trong file .txt,.. hay là đánh số theo chỉ định cách quét chuột các Text có sẵn trong Model của Cad.

Cám ơn bạn đã phản hồi và xin lỗi vì đã viết không đầy đủ. Mình nhờ viết lisp vẽ pline theo chỉ định cách quét chuột các Text có sẵn trong Model của Cad.

  • Vote tăng 1
  • Vote giảm 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
quansla    232

Mình phải hiểu yêu cầu của bạn như thế nào đây?

  1. Trong Model có n Text (nội dung các Text không quan trọng) . Yêu cầu nối các Text với nhau bằng một Pline mới (điểm nối là điểm nào?)?
  2. Trong Model có n Text (điểm đặt/chèn các Text không quan tâm). Nội dung mỗi Text là một toạ độ điểm (x-y- (z? ?)) phân cách với nhau bằng (??) . Yêu cầu vẽ Pline nối các điểm M(x,y,z) giống với nội dung Text.
  3. Phương án khác

Bạn không  có hình mô tả, không có file dwg chỉ dẫn, quá ít giữ kiện cho bài toán của 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
hiepttr    523

Mình phải hiểu yêu cầu của bạn như thế nào đây?

  1. Trong Model có n Text (nội dung các Text không quan trọng) . Yêu cầu nối các Text với nhau bằng một Pline mới (điểm nối là điểm nào?)?
  2. Trong Model có n Text (điểm đặt/chèn các Text không quan tâm). Nội dung mỗi Text là một toạ độ điểm (x-y- (z? ?)) phân cách với nhau bằng (??) . Yêu cầu vẽ Pline nối các điểm M(x,y,z) giống với nội dung Text.
  3. Phương án khác

Bạn không  có hình mô tả, không có file dwg chỉ dẫn, quá ít giữ kiện cho bài toán của bạn.

:D :D :D

Trong model có n Text, nội dung của các text là các số nguyên int (có thể là ko có text có nội dung trùng nhau)

>>> y/c vẽ 1 PL đi qua điểm chèn của mỗi text, nối các text theo thứ tự tăng dần của nội dung text.

  • 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
hochoaivandot    108

(defun LM:ss->ent ( ss / i l )
(if ss
(repeat (setq i (sslength ss))
(setq l (cons (ssname ss (setq i (1- i))) l))
)
)
)
(defun dxf (code e) (cdr (assoc code (entget e))))
(defun MakeLWPolyline (listpoint closed Linetype LTScale Layer Color xdata / Lst)
(setq Lst (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")
(cons 8 (if Layer Layer (getvar "Clayer")))
(cons 6 (if Linetype Linetype "bylayer"))
(cons 48 (if LTScale LTScale 1))
(cons 62 (if Color Color 256))
'(100 . "AcDbPolyline")
(cons 90 (length listpoint))
(cons 70 (if closed 1 0))))
(foreach PP listpoint (setq Lst (append Lst (list (cons 10 PP)))))
(if xdata (setq Lst (append lst (list (cons -3 (list xdata))))))
(entmakex Lst));end
(defun C:ttt(/ ss lst lstPt)
(setq ss (ssget (list (cons 0 "TEXT"))))
(setq lst (LM:ss->ent ss))
(setq lst (vl-sort lst
(function (lambda (e1 e2)
(< (atof (dxf 1 e1)) (atof (dxf 1 e2)))))))
(setq lstPt (mapcar '(lambda (x) (dxf 10 x)) lst))
(MakeLWPolyline lstPt nil nil nil nil nil nil)
)

Phải thế không bạn?

Các text bạn chọn phải là số nhé. Và thứ tự đỉnh Pline là thứ tự lớn bé của các số...

  • 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
phamthanhbinh    3.123

Sửa e1 >> e2

Hề hề hề,

Thiệt tình chưa hiểu rõ ý bác DoanvanHa.

Ý bác là trong hàm (vl-sort .....) thay thế e1 vào vị trí của (atof (dxf 1 e1)) và e2 vào vị trí của (atof (dxf 1 e2)) và thay dấu so sánh nhỏ hơn thành lớn hơn ạ???

Hay là bác nhắc lỗi chính tả và bác Hochoaivandot đã chỉnh sửa trong lisp rồi nhỉ???

Việc sắp xếp theo trật tữ lớn hơn hay nhỏ hơn đâu có ảnh hưởng chi nhiều tới cái đường polyline tạo ra nhỉ??? Có chăng chỉ là cấc trật tự đỉnh ngược nhau thôi mà. 

Cứ theo lisp thì e1 và e2 là các ename mà so sánh chúng với nhau thì khá là ....... khó làm. Chả hay bác có thể chỉ dẫn rõ thêm 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
hochoaivandot    108

Hề hề hề,

Thiệt tình chưa hiểu rõ ý bác DoanvanHa.

Ý bác là trong hàm (vl-sort .....) thay thế e1 vào vị trí của (atof (dxf 1 e1)) và e2 vào vị trí của (atof (dxf 1 e2)) và thay dấu so sánh nhỏ hơn thành lớn hơn ạ???

Hay là bác nhắc lỗi chính tả và bác Hochoaivandot đã chỉnh sửa trong lisp rồi nhỉ???

Việc sắp xếp theo trật tữ lớn hơn hay nhỏ hơn đâu có ảnh hưởng chi nhiều tới cái đường polyline tạo ra nhỉ??? Có chăng chỉ là cấc trật tự đỉnh ngược nhau thôi mà. 

Cứ theo lisp thì e1 và e2 là các ename mà so sánh chúng với nhau thì khá là ....... khó làm. Chả hay bác có thể chỉ dẫn rõ thêm không ạ....

 

Hihi. Bác phamthanhbinh à, là ban đầu hochoaivandot code bị nhầm 

(< (atof (dxf 1 e1)) (atof (dxf 1 e1)))

nên Doan Van Ha nhắc. Và hochoaivandot đã fix trực tiếp vào lisp. Nên bác Bình không hiểu thôi.

Cảm ơn 2 bác đã tham gia

  • 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
Tue_NV    3.841

Mình thấy để so sánh list gồm các string (dạng số) có thể sử dụng :

(vl-sort lst '<) hay sử dụng (acad_strlsort  lst) cho gọn

  • Vote tăng 2

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
Doan Van Ha    2.678

Mình thấy để so sánh list gồm các string (dạng số) có thể sử dụng :

(vl-sort lst '<) hay sử dụng (acad_strlsort  lst) cho gọn

1). Cái thứ 1 thì cũng phải chuyển list string qua list real/int

(vl-sort '("1" "3" "222") '<) >> ("1" "222" "3")

(vl-sort '(1 3 222) '<) >> (1 3 222)

2). Cái thứ 2 thì hoàn toàn không ổn.

(acad_strlsort '("1" "3" "222")) >> ("1" "222" "3")

(acad_strlsort '(1 3 222)) >> error

3). Với lại, HHVD đang sort list ename cơ mà, đâu phải sort list string?

(acad_strlsort '("1" "3" "222"))
("1" "222" "3")
(acad_strlsort '("1" "3" "222"))
("1" "222" "3")
  • 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

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


×