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.
Đăng nhập để thực hiện theo  
DesignAutoLisp

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

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

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

 

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

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. 

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

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.

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
Tot77    501

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

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
Tot77    501

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

 

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.

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
Tot77    501

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.

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

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

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
Tot77    501

Đượ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.

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

 

Đượ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ả

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
Tot77    501

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.

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

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

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  

×