Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

16 giờ trước, NgTheChien.37 đã nói:

Trước em có tìm thấy lisp chia cung theo khoảng cách or số đoạn trên diễn đàn mình như đính kèm.

Tuy nhiên lisp hiện tại chỉ cho phép thực hiện trên từng đối tượng, không thể chọn được nhiều đối tượng cùng lúc.

VD: Em muốn chia 3 cung khác nhau, mỗi khung chia thành 4 đoạn chẳng hạn thì phải chạy lisp 3 lần cho 3 cung này.

Nhờ các bác chỉ cách or bổ sung code để có thể chia cùng lúc nhiều cung khác nhau với ạ!

Em cảm ơn ^T^

dc.lsp

Vì lisp có tùy chọn chia theo khoảng cách, trong đó có việc pick điểm khởi đầu, nên chọn 1 đống không giải quyết được tùy chọn 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

Mọi người cho mình hỏi, làm thế nào để lấy được cái selection set như ví dụ trong hình: các đối tượng trong hình mới chỉ đang chọn thủ công, và không nằm trong previous selection set.

Mình xin cảm ơn !

Screenshot_1.png

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

Pha

14 phút trước, Duong Nhat Duy đã nói:

Mọi người cho mình hỏi, làm thế nào để lấy được cái selection set như ví dụ trong hình: các đối tượng trong hình mới chỉ đang chọn thủ công, và không nằm trong previous selection set.

Mình xin cảm ơn !

 

Có phải ý muốn hỏi này không?

(setq ss (ssget "I"))

  • 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

 

 

Vào lúc 23/11/2019 tại 23:06, Doan Van Ha đã nói:

Because lisp has the option of dividing by distance, including starting point selection, choosing a heap does not solve this option.

 

Đồng ý chỉ heap không giải quyết tùy chọn này. Hơn nữa, tôi đang xem xét các nghiên cứu khác nhau và biên soạn một hướng dẫn cho trang web này khi tôi đang làm việc như một tác giả ở đây https://www.reviewsed.com/ Hy vọng các bạn đặt đầu vào của bạn sau khi tôi hoàn thành nó

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

Các bạn cho mình hỏi chút:

Mình có 1 nested entity dạng như này:

(setq nent (car (nentsel)))

(có thể là entity bình thường, ko nằm trong block, xref, hoặc entity trong block, hoặc trong block của block)

Bây giờ mình muốn lấy cái layer của block ngoài cùng chứa cái entity kia thì làm ntn nhỉ ?

Mình xin cảm ơ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
13 phút trước, Duong Nhat Duy đã nói:

Các bạn cho mình hỏi chút:

Mình có 1 nested entity dạng như này:

  • cadvietlisp.lsp
    lisp help
  •  

(setq nent (car (nentsel)))

(có thể là entity bình thường, ko nằm trong block, xref, hoặc entity trong block, hoặc trong block của block)

Bây giờ mình muốn lấy cái layer của block ngoài cùng chứa cái entity kia thì làm ntn nhỉ ?

Mình xin cảm ơn !

(cdr (assoc 8 (entget (last (last (nentsel))))))

Bác dùng cái này để lấy layer block ngoài cùng, còn đối với đối tượng không nằm trong block thì kết hợp vs hàm if

  • 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
1 giờ trước, Doan Nguyen Van đã nói:
  • cadvietlisp.lsp
    lisp help
  •  

(cdr (assoc 8 (entget (last (last (nentsel))))))

Bác dùng cái này để lấy layer block ngoài cùng, còn đối với đối tượng không nằm trong block thì kết hợp vs hàm if

Ủa hay nhỉ, cảm ơn bạn 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

Các bác cho em hỏi chút ạ!

Em rất muốn tạo bảng Table như trong hình nhưng đang vướng 1 số chỗ. Rất mong các bác cho em lời tư vấn hoặc giới thiệu cho em một vài hàm hoặc 1 số trang web có tài liệu em nghiên cứu. Việc tạo table với cấu trúc file đơn giản như STT X Y Z CODE thì em nghiên cứu hàm Addtable của Lee-Mac em làm được rồi. Nhưng cấu trúc file phức tạp như trong hình thì hơi khó. Rất mong các bác tương trợ. Cảm ơn các bác nhiều.

https://i844.photobucket.com/albums/ab7/thanhduan2407/Screenshot_1_zpsj03s9mz8.jpg

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
10 giờ trước, thanhduan2407 đã nói:

Các bác cho em hỏi chút ạ!

Em rất muốn tạo bảng Table như trong hình nhưng đang vướng 1 số chỗ. Rất mong các bác cho em lời tư vấn hoặc giới thiệu cho em một vài hàm hoặc 1 số trang web có tài liệu em nghiên cứu. Việc tạo table với cấu trúc file đơn giản như STT X Y Z CODE thì em nghiên cứu hàm Addtable của Lee-Mac em làm được rồi. Nhưng cấu trúc file phức tạp như trong hình thì hơi khó. Rất mong các bác tương trợ. Cảm ơn các bác nhiều.

https://i844.photobucket.com/albums/ab7/thanhduan2407/Screenshot_1_zpsj03s9mz8.jpg

 

@thanhduan2407Để mergecell bạn dùng hàm này xử lý cho từng thằng

(vl-catch-all-apply
		   (function (lambda () (vla-MergeCells VlaObj minRow maxRow minCol maxCol )))
		 )

minRow maxRow minCol maxCol là số hàng, cột để xác định phạm vi các ô cần merge

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
9 giờ trước, tien2005 đã nói:

 

@thanhduan2407Để mergecell bạn dùng hàm này xử lý cho từng thằng


(vl-catch-all-apply
		   (function (lambda () (vla-MergeCells VlaObj minRow maxRow minCol maxCol )))
		 )

minRow maxRow minCol maxCol là số hàng, cột để xác định phạm vi các ô cần merge

Cảm ơn bác đã trả lời. Em sẽ tìm hiểu dầ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
1 giờ} trướ}c, thanhduan2407 đã nói:

Cảm ơn bác đã trả lời. Em sẽ tìm hiểu dần.

Làm luôn! dần dà chi nữa…! kkk...

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
54 phút trước, quocmanh04tt đã nói:

Làm luôn! dần dà chi nữa…! kkk...

Dạ, tại em phải đi làm. Lúc nào rảnh mới ngồi xem được. Em vẫn còn gà mờ về table này lắm. 
Việc Mergecell này là khi đã có Table rồi. Em muốn vẽ Table từ tệp cấu trúc dữ liệu. Chắc phải nghiên cứu dài dài mới làm được bác ạ.

Không biết bác @quocmanh04tt có đoạn code mẫu nào cho em học tậ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
49 phút trước, thanhduan2407 đã nói:

Dạ, tại em phải đi làm. Lúc nào rảnh mới ngồi xem được. Em vẫn còn gà mờ về table này lắm. 
Việc Mergecell này là khi đã có Table rồi. Em muốn vẽ Table từ tệp cấu trúc dữ liệu. Chắc phải nghiên cứu dài dài mới làm được bác ạ.

Không biết bác @quocmanh04tt có đoạn code mẫu nào cho em học tập được không ạ?

Mình thường làm: Cứ tạo 1 table có số hàng số cột theo chủ ý, sau đó chỗ nào cần Merge thì Merge thôi.

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

Tui có MTEXT này, mà sao thay đổi width của nó không được, kể cả dùng entmod và vla-put-width. Mọi người giúp xem.


(defun c:mwid (/ ent)
 (vl-load-com)
 (if (and (setq ent (car (entsel "\nSelect MTEXT: ")))
          (eq "MTEXT" (cdadr (entget ent))))
     (vla-put-width (vlax-ename->vla-object ent) 0.3))
 (princ))

 

Hoi_CV.dwg

Hoi_CV.png

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
46 phút trước, Doan Van Ha đã nói:

Tui có MTEXT này, mà sao thay đổi width của nó không được, kể cả dùng entmod và vla-put-width. Mọi người giúp xem.

 



(defun c:mwid (/ ent)
 (vl-load-com)
 (if (and (setq ent (car (entsel "\nSelect MTEXT: ")))
          (eq "MTEXT" (cdadr (entget ent))))
     (vla-put-width (vlax-ename->vla-object ent) 0.3))
 (princ))

 

 

Hoi_CV.dwg

Hoi_CV.png

Put-width chỉ áp dụng cho Text thôi bác ơi, cái này bác đổi contents, ví dụ thêm: ...W=0.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
 
 
 
 
44 phút trước, Doan Van Ha đã nói:

Tui có MTEXT này, mà sao thay đổi width của nó không được, kể cả dùng entmod và vla-put-width. Mọi người giúp xem.

 



(defun c:mwid (/ ent)
 (vl-load-com)
 (if (and (setq ent (car (entsel "\nSelect MTEXT: ")))
          (eq "MTEXT" (cdadr (entget ent))))
     (vla-put-width (vlax-ename->vla-object ent) 0.3))
 (princ))

 

 

Hoi_CV.dwg

 

Nó có thay đổi đấy chứ, bác thử set giá trị là 10000 sẽ thấy sự khác biệt.

 

Nhưng hình như ý bác muốn set widthFactor giống dText ?! 

bác xem phần Contents.

image.png.c9124590dcc21953d3470cdc21d190da.png

  • 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

Nói tóm lại: tôi muốn set width = 0.3 như dtext thì phải làm sao (set bằng lisp, không sửa trong style, không sửa bằng lệnh mtedit)?

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

Dùng tạm

(setq g (entget ent))
(entmod (subst (cons 1  "{\\W0.3;\\C6;Ph\U+1EA7n thi\U+1EBFt b\U+1ECB l\U+1EAFp \U+0111\U+1EB7t}") (assoc 1 g) g))

Phần xử lý dxf 1 có lẽ không phức tạp lắm đối với bạn

  • 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ôi đã thử thay nhiều lần thì nó lồng kiểu này chán lắm.

{\W0.00;{\W0.50;{\W0.70;{\W1.00;{\C6;Phần thiết bị lắp đặt}}}}}

Hóa ra thay width của nó phức tạp dữ!

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
20 phút trước, Doan Van Ha đã nói:

Tôi đã thử thay nhiều lần thì nó lồng kiểu này chán lắm.

{\W0.00;{\W0.50;{\W0.70;{\W1.00;{\C6;Phần thiết bị lắp đặt}}}}}

Hóa ra thay width của nó phức tạp dữ!

Cháu viết cho bác đây:

(defun changewidth (ent width_)
(setq str (cdr (Assoc 1 (entget ent))))
(if (setq n (vl-string-search "\\W" str))
    (progn
      (setq str1 (substr str (+ n 1)))
      (setq str2 (vl-string-subst "" "\\W" str1))
      (setq str3 (vl-string-left-trim "01234546789." str2))
      (setq num (vl-string-subst "" str3 str2))
      (setq str2 (strcat "\\W" num))
	  (setq str4  (strcat "\\W" (rtos width_ 2)))
	  
	  (setq str (vl-string-subst str4 str2 str))
	  (entmod (subst (cons 1 str) (assoc 1 (entget ent)) (entget ent)))
	 
      )(entmod (subst (cons 1 (strcat "{\\W" (rtos width_ 2) str)) (assoc 1 (entget ent)) (entget ent)))

  )
  )
(defun c:te ()
  (setq ent (Car (entsel "pick Text")))
  (setq width_ (getreal "nhap width:"))
  (changewidth ent width_)
  )

 

  • 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

Xử lý format mtext của Cad rất khó chịu.

Theo cách của @Doan Nguyen Van Thì khi nếu text có format width factor chỉ 1 đoạn trong text thì nó chỉ ảnh hưởng đoạn đó thôi.

Muốn xử lý triệt để cho các trường hợp thì không dược.

Nếu an toàn  thì dùng unformat cùa LeeMac rồi format lại. Hay nghiên cứu kỹ về format mtext thôi.

Có thể  nghiên cứu kỹ hơn ỡ đây

  • 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

Khi muốn hiệu chỉnh Width của Mtext mà Width <  0.1*Height thì Mtext coi như chưa có gì xảy ra.

Ở đây Height của Mtext =900 thì width = 90.1 thì việc hiệu chỉnh mới thấy xảy ra được.

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

Chào các anh/ chị,

 

Hiện tại em có cóp nhặt được đoạn Code để dim điểm giao

Em muốn chỉnh sửa để dùng hàm Grread cho Dimension nhưng chưa làm được

Anh chị có thể Code giúp em 1 đoạn để tham khảo với được ko ạ

 

Em cảm ơn!

DimINT-Dim giao diem.LSP

  • 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

Các bạn cho mình hỏi:

Mình có đoạn code

(command "._BPOLY")
(while (> (getvar "CMDACTIVE") 0)
 (command pause)
 )

Lệnh BPOLY nó tạo 1 vài polyline, làm thế nào để lấy được thông tin các polyline đó, như dạng selection set chẳng hạn.

Mình cảm ơ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

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

×