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ị

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
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
2 giờ trước, Duong Nhat Duy đã nói:

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

Mình có đoạn code

  • cadvietlisp.lsp
    lisp help
  •  

(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 !

Lưu lại entlast. Trước Rồi entnext để lấy.

(setq lastent (entlast))

(while (setq x (entnext lastent)) (setq lastent x))

(setq x nil))

(command "._BPOLY") (while (> (getvar "CMDACTIVE") 0) (command pause) )
(while  (setq lastent (entnext lastent)) (setq x (cons lastent x)))

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

Lưu lại entlast. Trước Rồi entnext để lấy.

(setq lastent (entlast))

(while (setq x (entnext lastent)) (setq lastent x))

(setq x nil))

(command "._BPOLY") (while (> (getvar "CMDACTIVE") 0) (command pause) )
(while  (setq lastent (entnext lastent)) (setq x (cons lastent x)))

Mình cảm ơn nhé, tiện bạn cho mình hỏi đoạn 

(setq lastent (entlast))

(while (setq x (entnext lastent)) (setq lastent x))

có ý nghĩa gì nhỉ, khi nào thì (entlast) không lấy được đối tượng sau cùng của bản vẽ

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, Duong Nhat Duy đã nói:

Mình cảm ơn nhé, tiện bạn cho mình hỏi đoạn 

(setq lastent (entlast))

(while (setq x (entnext lastent)) (setq lastent x))

có ý nghĩa gì nhỉ, khi nào thì (entlast) không lấy được đối tượng sau cùng của bản vẽ

Khi entlast là block có att. Có thể là 1 ent khác có ent con đọc bằng entnext. Mình chưa test hết.

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 19/4/2020 tại 02:52, ngokiet đã nói:

Lưu lại entlast. Trước Rồi entnext để lấy.

(setq lastent (entlast))

(while (setq x (entnext lastent)) (setq lastent x))

(setq x nil))

(command "._BPOLY") (while (> (getvar "CMDACTIVE") 0) (command pause) )
(while  (setq lastent (entnext lastent)) (setq x (cons lastent x)))

Bạn cho mình hỏi thêm chút là làm sao để lấy được đống point nhập từ người dùng kia, hay là số, xâu đối với các hàm command khác ?

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

Bạn cho mình hỏi thêm chút là làm sao để lấy được đống point nhập từ người dùng kia, hay là số, xâu đối với các hàm command khác ?

Mình cảm ơn !

Dùng initget và getpoint để nhận thông tin rồi mới truyền lại cho command bpoly.  Lúc đó bạn mới lưu được các điểm hay string nhập 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
15 giờ trước, ngokiet đã nói:

Dùng initget và getpoint để nhận thông tin rồi mới truyền lại cho command bpoly.  Lúc đó bạn mới lưu được các điểm hay string nhập vào.

Nhưng mình muốn dùng trực tiếp trong BPOLY để cad nó hightlight cái đường bao đó bạn. Có cách nào khác không 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

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

×