Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 nvduong

nvduong

    biết vẽ line

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

Đã gửi 11 September 2013 - 10:30 AM

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


  • -1
Happiness, like anything else in life, needs to be nurtured by all your endeavours

#2 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 643 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 11 September 2013 - 10:50 AM

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.


  • 0

#3 nvduong

nvduong

    biết vẽ line

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

Đã gửi 11 September 2013 - 11:27 AM

đề 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.


  • 0
Happiness, like anything else in life, needs to be nurtured by all your endeavours

#4 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 643 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 12 September 2013 - 02:20 AM

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.


  • 0

#5 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 12 September 2013 - 08:11 AM

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.


  • 1

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#6 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 12 September 2013 - 10:03 AM

(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ố...


  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 12 September 2013 - 10:07 AM

Sửa e1 >> e2


  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#8 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 12 September 2013 - 10:10 AM

Bác Đoàn Văn Hạ nhìn nhanh thật. 


  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#9 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 12 September 2013 - 11:29 AM

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 ạ....


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#10 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 12 September 2013 - 11:32 AM

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


  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 September 2013 - 12:13 PM

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


  • 2

#12 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 12 September 2013 - 01:43 PM

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")

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.