Đến nội dung


Hình ảnh

Thêm phần tử vào list tại vị trí chỉ định


  • Please log in to reply
16 replies to this topic

#1 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 27 October 2014 - 10:49 AM

cả nhà cho em hỏi e có một danh sách list như sau: (1 2 3 4 5 6 7 8 9 10 11 12) giờ em muốn thêm phần tử 15 chẳng hạn vào giữa 3 và 4, hoặc vào cuối danh sách thì là thế nào???

thanks cả nhà......

 


  • 0

#2 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 27 October 2014 - 12:26 PM

cả nhà cho em hỏi e có một danh sách list như sau: (1 2 3 4 5 6 7 8 9 10 11 12) giờ em muốn thêm phần tử 15 chẳng hạn vào giữa 3 và 4, hoặc vào cuối danh sách thì là thế nào???

thanks cả nhà......

Hề hề hề<

Bạn có thể tham khảo thằng acet này xem nhé.

(ACET-LIST-INSERT-NTH element list int): Thêm phần tử (element) vào danh sách (list) tại vị trí thứ (int)

trong đó: element là phần tử bất kỳ, list là một danh sách có hoặc chưa có phần tử nào, int là một số nguyên.

Khi int lớn hơn số phần tử có trong danh sách thì list sẽ được thêm vào các phần tử nil cho tới trước vị trí của phần tử element thêm vào. 

(ACET-LIST-INSERT-NTH element list int): Thêm phần tử (element) vào danh sách (list) tại vị trí thứ (int)
trong đó: element là phần tử bất kỳ, list là một danh sách có hoặc chưa có phần tử nào, int là một số nguyên.
Khi int lớn hơn số phần tử có trong danh sách thì list sẽ được thêm vào các phần tử nil cho tới trước vị trí của phần tử element thêm vào. 
(ACET-LIST-INSERT-NTH element list int): Thêm phần tử (element) vào danh sách (list) tại vị trí thứ (int)
trong đó: element là phần tử bất kỳ, list là một danh sách có hoặc chưa có phần tử nào, int là một số nguyên.
Khi int lớn hơn số phần tử có trong danh sách thì list sẽ được thêm vào các phần tử nil cho tới trước vị trí của phần tử element thêm vào. 

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

#3 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 30 October 2014 - 11:27 AM

thanks cả nhà

e có thắc mắc nữa là

giờ e có các điểm point, hoặc text em muốn vẽ đường pline đi qua các điểm point, hoặc điểm  của text khi dùng hàm (ssget) để chọn vào point hoặc text thì làm thế nào?????

mong các cao thủ chỉ giáo...thks.


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 30 October 2014 - 12:44 PM

Việc lấy các điểm của text và point thì dùng cái náy

(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))
 

Nhưng cái khó là ở chỗ sắp xếp các điểm làm sao cho cái dg pline nó trơn tru.

(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))
 
(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))
 
(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))

  • 0

#5 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 30 October 2014 - 03:42 PM

ý của e là vẽ đường pline đi qua các điểm point và text đó à....chú lấy toạ độ em cũng biết cách lấy ra rồi...thks


  • 0

#6 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 30 October 2014 - 04:00 PM

Giả sử bạn đã có list điểm tên lst, tạo pline bằng

(entmake (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline")) (cons (cons 90 (length lst))
(mapcar '(lambda (x) (cons 10 x)) lst))))

  • 1

#7 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 30 October 2014 - 10:25 PM

Việc lấy các điểm của text và point thì dùng cái náy

 

(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))
 

Nhưng cái khó là ở chỗ sắp xếp các điểm làm sao cho cái dg pline nó trơn tru.

(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))
 
(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))
 
(mapcar 'cdr (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT,POINT"))))))))

Hề hề hề,

Bác Tot77 có lưu ý tới trường hợp các text có canh lề khác với Left và baseline không vậy. Khi đó điểm đặt của text là điểm có mã dxf 11 chứ không phải là 10.


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

#8 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 30 October 2014 - 10:53 PM

Dxf 10 của text bao giờ cũng có, còn dxf 11 thì có cái = 0,0,0. Do đó lấy cái chuẩn đỡ phải phân biệt left right chi cho phiền. Vả lại đó cũng k phải vấn đề chủ thớt quan tâm.
  • 0

#9 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 31 October 2014 - 08:11 PM

thks anh Tot77

nhân đây anh cho e hỏi luôn, khi e xác định giao điểm của đường 3dpoly và mặt 3dface dùng các hàm lisp nhu sau:

(setq ss(ssget))
(setq s1(vlax-ename->vla-object (ssname ss 0))
      s2(vlax-ename->vla-object (ssname ss 1))
)
(setq lstg (vlax-invoke s1 'IntersectWith s2 acExtendOtherEntity))

sao không được, trong khi đó nó lại được khi xác định giao tuyến của các đường với nhau, ví dụ: line & circle, pline & line, hoặc 3dpoly & pline .....

mong mọi người chỉ giúp....

thks very much.....


  • 0

#10 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 01 November 2014 - 08:55 AM

Được mà bạn, trong 2d vẫn dc, trong 3d thì bạn cần bảo đảm xem nó có thực sự giao nhau hay k, nhìu khi thấy nó giao mà lại k giao.
  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 01 November 2014 - 12:28 PM

Trong trường hợp tổng quát không thể tìm được giao điểm của 3dpoly và 3dface, dù thực tế nó có.


  • 0

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


#12 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 02 November 2014 - 10:00 PM

Trong trường hợp tổng quát không thể tìm được giao điểm của 3dpoly và 3dface, dù thực tế nó có.

Nghĩa là sao ạ???


  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 November 2014 - 10:02 PM

Nghĩa là không tìm được giao của 1 đường và 1 mặt.


  • 0

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


#14 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 02 November 2014 - 10:03 PM

Được mà bạn, trong 2d vẫn dc, trong 3d thì bạn cần bảo đảm xem nó có thực sự giao nhau hay k, nhìu khi thấy nó giao mà lại k giao.

Tot77, on 01 Nov 2014 - 08:48, said:

không được bạn ơi......mình chọn đường 3dPOLY và mặt 3dFace giao nhau rồi nhưng không ra kết quả gì cả


  • 0

#15 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 03 November 2014 - 08:26 AM

Bạn vẽ trên mặt phẳng z=0 thì dùng IntersectWith nó sẽ có kết quả, còn trên 3d thì không dùng IntersectWith được mà phải dùng phương pháp khác (hơi bị khó) để tìm giao.


  • 0

#16 DesignAutoLisp

DesignAutoLisp

    biết vẽ circle

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

Đã gửi 05 November 2014 - 04:44 AM

Bạn vẽ trên mặt phẳng z=0 thì dùng IntersectWith nó sẽ có kết quả, còn trên 3d thì không dùng IntersectWith được mà phải dùng phương pháp khác (hơi bị khó) để tìm giao.

Phương thức khác ở đây là gì vậy, anh có thể chỉ giúp được không ạ???


  • 0

#17 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 05 November 2014 - 07:34 AM

Là giải bài toán hình học không gian đó bạn, cái này thì tôi không giúp gì được rồi.


  • 0