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

Viết Lisp theo yêu cầu

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

Tue_NV    3.841
chào các bác, e muốn xin các bác có cái lisp nào có thể làm đc như sau kô ah :

 

khi click vào text ( DT ) thì tự động chuyển thành chữ có bạch chân ( Bold) làm được với multy thì tốt wa các bác ah. e cảm ơn các bác nhiều

Bạn có nhầm lẫn không? Bold là chữ được tô đậm chứ đâu có phải là chữ gạch chân.

Rút cục là bạn muốn chữ đậm hay chữ gạch chân?

Thêm chữ có gạch chân thì bạn dọc ở đây : http://www.cadviet.com/forum/index.php?showtopic=6991

Còn muốn tô chữ đậm thì bạn đọc ở đây : http://www.cadviet.com/forum/index.php?sho...amp;#entry48704

Lưu ý muốn tô chữ đậm bạn phải biết trước font chữ style mà bạn đang sử dụng.

Chỉnh sửa theo Tue_NV

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
quocanhxd05    6
Lệnh Fillet (F) hoàn toàn có thể giải quyết cho bạn vấn đề này

F enter - chọn R (Nhập vào bán kính cong) - Chọn P enter - quét chọn PL của bạn - enter -> xong

 

Chú ý kích thước của R phải phù hơp.

Cảm ơn bác nhìu.

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
quocanhxd05    6
Bạn có thể post yêu cầu về autolisp ở topic này.

Mình muốn xin 1 file lisp tương tự như lệnh MATCHPROP của cad nhưng lệnh mới này dùng được cho cả các đối tượng nằm trong block.

Cảm ơn các bác trướ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
baodenhp    0
Mình muốn import block được chỉ định theo 1 file toạ độ, định dạng file toạ độ http://www.cadviet.com/upfiles/toa_do.xls (định dạng file gồm tọa độ x,y). Còn về tỷ lệ, góc quay... thì không cần thiết lắm.

Sao ko ai giup minh vay???

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
loiphong    0

Bữa trước ssg có viết dùm Lisp tìm những kích thước bị độ. Bạn có Lisp nào có khả năng tìm được những kích thước đã bị explode ko giúp mình với. Thanks

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
Đoạn Lisp này sẽ giúp bạn thực hiện điều đó.

Khi chạy bạn chọn 2 điểm là 2 góc đối diện của hình chữ nhật và Lisp sẽ tự động Hatch vào hình chữ nhật này.

Đoạn lisp này sử dụng kiểu hatch là kiểu ansi31 với tỷ lệ phóng mẫu là 10 và góc nghiêng mẫu là 0 độ.

(defun c:TOH()
(prompt "\n Nhap 2 toa do la 2 goc doi dien cua hinh chu nhat :")
(setq dc1 (getpoint "\nNhap diem thu nhat :"))
(setq dc2 (getpoint dc1"\nNhap diem thu 2 :"))
(setq dc3 (list(car dc2) (cadr dc1)))
(setq dc4 (list(car dc1) (cadr dc2)))
(command "hatch" "ansi31" "10" "0" "" "y" dc1 dc3 dc2 dc4 "c" "")
(princ)
)

Hy vọng Lisp chạy đúng ý bạn.

 

 

Chào bạn lisp của bạn rất hay có thể tô cho 1 hình bất kỳ miễn là nhập toạ độ các đỉnh cho nó.

Ví dụ (cái này mình lập trên Excel)

(command "layer" "n" "Text" "s" "Text" "c" "1" "" "")

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "text" "j" "M" "117.2,-3" "1" "0" "2.S")

(command "text" "j" "M" "117.2,3" "1" "0" "3.LV")

(command "text" "j" "M" "131.5,-2.5" "1" "0" "4.S")

(command "text" "j" "M" "131.5,3.5" "1" "0" "5.S")

(command "text" "j" "M" "145,2" "1" "0" "6.S")

(command "text" "j" "M" "140.1,-2.8" "1" "0" "7.G")

(command "text" "j" "M" "150.6,-2.5" "1" "0" "8.S")

(command "text" "j" "M" "155.5,2.6" "1" "0" "9.RN")

(command "text" "j" "M" "160.9,-3.8" "1" "0" "10.S")

(command "layer" "n" "Hatch" "s" "Hatch" "c" "3" "" "")

(command "hatch" "ansi31" "2" "0" "" "y" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "109.3,-5" "109.3,-1" "125.1,-1" "125.1,-5" "c" "")

(command "hatch" "ansi36" "2" "0" "" "y" "109.3,1" "109.3,5" "125.1,5" "125.1,1" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "125.1,-5" "125.1,0" "137.9,0" "137.9,-5" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "125.1,2" "125.1,5" "137.9,5" "137.9,2" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "137.9,0" "137.9,4" "152.1,4" "152.1,0" "c" "")

(command "hatch" "ansi32" "2" "90" "" "y" "137.9,-4.6" "137.9,-1" "142.3,-1" "142.3,-4.6" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "142.3,-4.5" "142.3,-0.5" "158.9,-0.5" "158.9,-4.5" "c" "")

(command "hatch" "ansi33" "2" "90" "" "y" "152.1,0.6" "152.1,4.6" "158.9,4.6" "158.9,0.6" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "158.9,-5.6" "158.9,-2" "162.9,-2" "162.9,-5.6" "c" "")

 

 

Nhưng khi sử dụng vào công việc của mình thì mình thấy lại bất cập vì hatch đè nên chữ rất khó đọc nên mình nhờ các bạn giúp mình viết lệnh Hatch kiểu như lệnh Hacth song pick vào miền kép kín thì nó sẽ không bị đè lên text (vì mình có thể vẽ hình bao trước và đã có toạ độ pick nấy luôn toạ độ chèn text) hoặc chỉ cho mình 1 cách làm cho hacth không đè nên text

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
Tue_NV    3.841
Chào bạn lisp của bạn rất hay có thể tô cho 1 hình bất kỳ miễn là nhập toạ độ các đỉnh cho nó.

 

Nhưng khi sử dụng vào công việc của mình thì mình thấy lại bất cập vì hatch đè nên chữ rất khó đọc nên mình nhờ các bạn giúp mình viết lệnh Hatch kiểu như lệnh Hacth song pick vào miền kép kín thì nó sẽ không bị đè lên text (vì mình có thể vẽ hình bao trước và đã có toạ độ pick nấy luôn toạ độ chèn text) hoặc chỉ cho mình 1 cách làm cho hacth không đè nên text

Đây là đoạn Lisp theo ý bạn nè. Bạn hãy đọc và tìm hiểu kỹ hơn sẽ tìm ra lời giải cho công việc của mình :

(defun c:TOH()
(prompt "\n Nhap 2 toa do la 2 goc doi dien cua hinh chu nhat :")
(setq dc1 (getpoint "\nNhap diem thu nhat :"))
(setq dc2 (getpoint dc1"\nNhap diem thu 2 :"))
(prompt "Ban chon Text va hatch se khong de len text")
(setq te (ssget))
(setq dc3 (list(car dc2) (cadr dc1)))
(setq dc4 (list(car dc1) (cadr dc2)))
(command "pline" dc1 dc3 dc2 dc4 "c")
(command "hatch" "ansi31" "10" "0" "L" te "")
(princ)
)

Chúc bạn thành công. :cheers:

Chào bạn Tue_NV và bạn phamthanhbinh!

Rất cán ơn hai bạn đã quan tâm giúp đỡ mình đã làm được rồi.

Cảm ơn bạn. Không nhất thiết phải post bài để bày tỏ cảm ơn như thế này

Tick thanks nhiều nhiều là OK. :cheers:

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 có nhầm lẫn không? Bold là chữ được tô đậm chứ đâu có phải là chữ gạch chân.

Rút cục là bạn muốn chữ đậm hay chữ gạch chân?

Thêm chữ có gạch chân thì bạn dọc ở đây : http://www.cadviet.com/forum/index.php?showtopic=6991

Còn muốn tô chữ đậm thì bạn đọc ở đây : http://www.cadviet.com/forum/index.php?sho...amp;#entry48704

Lưu ý muốn tô chữ đậm bạn phải biết trước font chữ style mà bạn đang sử dụng.

là gạch chân bác ạ, em nhầm :cheers: cảm ơn bác rất là nhiều thanks

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
Chào bạn lisp của bạn rất hay có thể tô cho 1 hình bất kỳ miễn là nhập toạ độ các đỉnh cho nó.

Ví dụ (cái này mình lập trên Excel)

(command "layer" "n" "Text" "s" "Text" "c" "1" "" "")

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "text" "j" "M" "117.2,-3" "1" "0" "2.S")

(command "text" "j" "M" "117.2,3" "1" "0" "3.LV")

(command "text" "j" "M" "131.5,-2.5" "1" "0" "4.S")

(command "text" "j" "M" "131.5,3.5" "1" "0" "5.S")

(command "text" "j" "M" "145,2" "1" "0" "6.S")

(command "text" "j" "M" "140.1,-2.8" "1" "0" "7.G")

(command "text" "j" "M" "150.6,-2.5" "1" "0" "8.S")

(command "text" "j" "M" "155.5,2.6" "1" "0" "9.RN")

(command "text" "j" "M" "160.9,-3.8" "1" "0" "10.S")

(command "layer" "n" "Hatch" "s" "Hatch" "c" "3" "" "")

(command "hatch" "ansi31" "2" "0" "" "y" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "109.3,-5" "109.3,-1" "125.1,-1" "125.1,-5" "c" "")

(command "hatch" "ansi36" "2" "0" "" "y" "109.3,1" "109.3,5" "125.1,5" "125.1,1" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "125.1,-5" "125.1,0" "137.9,0" "137.9,-5" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "125.1,2" "125.1,5" "137.9,5" "137.9,2" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "137.9,0" "137.9,4" "152.1,4" "152.1,0" "c" "")

(command "hatch" "ansi32" "2" "90" "" "y" "137.9,-4.6" "137.9,-1" "142.3,-1" "142.3,-4.6" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "142.3,-4.5" "142.3,-0.5" "158.9,-0.5" "158.9,-4.5" "c" "")

(command "hatch" "ansi33" "2" "90" "" "y" "152.1,0.6" "152.1,4.6" "158.9,4.6" "158.9,0.6" "c" "")

(command "hatch" "ansi31" "2" "0" "" "y" "158.9,-5.6" "158.9,-2" "162.9,-2" "162.9,-5.6" "c" "")

Nhưng khi sử dụng vào công việc của mình thì mình thấy lại bất cập vì hatch đè nên chữ rất khó đọc nên mình nhờ các bạn giúp mình viết lệnh Hatch kiểu như lệnh Hacth song pick vào miền kép kín thì nó sẽ không bị đè lên text (vì mình có thể vẽ hình bao trước và đã có toạ độ pick nấy luôn toạ độ chèn text) hoặc chỉ cho mình 1 cách làm cho hacth không đè nên text

Chào bạn Haiduong2105,

Để có thể sử dụng lisp theo đúng ý mình, bạn nên tìm hiểu kỹ hơn về lisp bạn ạ. Mọi người sẵn sàng giúp bạn song đôi khi không thể đúng hoàn toàn như ý bạn được do hiểu nhầm về cái yêu cầu của bạn hoặc do không nắm được cụ thể cái bạn cần.

Để tránh hatch đè lên text bạn phải tạo một khung pline kín bảo vệ text mà trong topic này mình thấy đã có lisp hình như của bạn Tuan_thietkedien thì phải. Bạn sử dụng lisp này để bao cái text bạn cần bảo vệ lại. Tất nhiên khung bạn phải sửa lisp một tí để cái khung bao text nằm hoàn toàn trong khung cần hatch của bạn.

Sau đó bạn sử dụng đoạn mã sau để hatch sẽ không bị đường hatch đè lên text nữa:

(command "hatch" "ansi31" 10 0 (entsel)) . Khi chạy lisp nó sẽ yêu cầu bạn chọn đối tượng và bạn chọn vào hai khung pline kín đó rồi enter.

Sau khi hatch xong nếu bạn muốn có thể delete cái khung bên trong là OK.

 

Nếu bạn muốn lisp tự chạy hoàn toàn không cần bạn phải chọn đối tượng thì bạn phải dùng hàm (setq) để đặt tên cho các khung pline của bạn rồi trong dòng lệnh command bạn thay hàm (entsel) bằng tên các đối tượng của bạn rồi kết thúc bằng "" tương đương với việc gõ enter là được.

 

Mình có thể viết toàn bộ lisp này cho bạn được nhưng rất mong bạn cố làm thử xem sao, vì nhu vậy bạn sẽ học được nhiếu hơn trong việc ứng dụng lisp vào công việc của mình.

 

Chúc bạn thành cô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
phamthanhbinh    3.123
Đây là đoạn Lisp theo ý bạn nè. Bạn hãy đọc và tìm hiểu kỹ hơn sẽ tìm ra lời giải cho công việc của mình :

(defun c:TOH()
(prompt "\n Nhap 2 toa do la 2 goc doi dien cua hinh chu nhat :")
(setq dc1 (getpoint "\nNhap diem thu nhat :"))
(setq dc2 (getpoint dc1"\nNhap diem thu 2 :"))
(prompt "Ban chon Text va hatch se khong de len text")
(setq te (ssget))
(setq dc3 (list(car dc2) (cadr dc1)))
(setq dc4 (list(car dc1) (cadr dc2)))
(command "pline" dc1 dc3 dc2 dc4 "c")
(command "hatch" "ansi31" "10" "0" "L" te "")
(princ)
)

Chúc bạn thành công. :cheers:

 

Cảm ơn bạn. Không nhất thiết phải post bài để bày tỏ cảm ơn như thế này

Tick thanks nhiều nhiều là OK. :cheers:

Rất cám ơn bác Tue Nv, qua đoạn lisp này mình thấy hay hơn cái cách của mình rất nhiều. Nó không cần phải tạo khung pline cho text nữa. Và do đó cũng không cần phải xóa khung bao này.

Xin phép bác Tue Nv, mình giải thích thêm một chút cho những người mới làm quen với lisp.

Ở đoạn lisp này, bác Tue Nv đã thay đổi cách tạo lệnh hatch , thay vì chọn các đỉnh của khung pline kín như lisp bác đã post lần trước thì bác ấy đã chọn vào chính pline đó bằng tham số "L" nghĩa là đối tượng cuối cùng lisp vừa tạo (Last entity) trên bản vẽ.

Hai cách sử dụng lệnh Hatch này có khác nhau và các bạn mới học lisp nên lưu ý về cú pháp của nó.

Lệnh ssget ở đây cho phép chọn nhiều đối tượng text nhưng người dùng phải lưu ý các text này đều phải nằm trong khung pline mới được. Nếu không hatch sẽ không chạy đượ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
duy782006    1.373
Rất cám ơn bác Tue Nv, qua đoạn lisp này mình thấy hay hơn cái cách của mình rất nhiều. Nó không cần phải tạo khung pline cho text nữa. Và do đó cũng không cần phải xóa khung bao này.

Xin phép bác Tue Nv, mình giải thích thêm một chút cho những người mới làm quen với lisp.

Ở đoạn lisp này, bác Tue Nv đã thay đổi cách tạo lệnh hatch , thay vì chọn các đỉnh của khung pline kín như lisp bác đã post lần trước thì bác ấy đã chọn vào chính pline đó bằng tham số "L" nghĩa là đối tượng cuối cùng lisp vừa tạo (Last entity) trên bản vẽ.

Hai cách sử dụng lệnh Hatch này có khác nhau và các bạn mới học lisp nên lưu ý về cú pháp của nó.

Lệnh ssget ở đây cho phép chọn nhiều đối tượng text nhưng người dùng phải lưu ý các text này đều phải nằm trong khung pline mới được. Nếu không hatch sẽ không chạy được.

Còn 1 cách dùng hatch bằng cách pick điểm trong lisp nửa đó bạn. Bạn tìm đọc các bài viết của bác ssg và nguyenhoanh về lisp tính diện tích bằng cách pick điểm. Áp dụng nguyên tắc này vào lisp này tố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
Tue_NV    3.841
Rất cám ơn bác Tue Nv, qua đoạn lisp này mình thấy hay hơn cái cách của mình rất nhiều. Nó không cần phải tạo khung pline cho text nữa. Và do đó cũng không cần phải xóa khung bao này.

Xin phép bác Tue Nv, mình giải thích thêm một chút cho những người mới làm quen với lisp.

Ở đoạn lisp này, bác Tue Nv đã thay đổi cách tạo lệnh hatch , thay vì chọn các đỉnh của khung pline kín như lisp bác đã post lần trước thì bác ấy đã chọn vào chính pline đó bằng tham số "L" nghĩa là đối tượng cuối cùng lisp vừa tạo (Last entity) trên bản vẽ.

Hai cách sử dụng lệnh Hatch này có khác nhau và các bạn mới học lisp nên lưu ý về cú pháp của nó.

Lệnh ssget ở đây cho phép chọn nhiều đối tượng text nhưng người dùng phải lưu ý các text này đều phải nằm trong khung pline mới được. Nếu không hatch sẽ không chạy được.

Đúng như bạn phamthanhbinh nói. Nhưng ở đây, mình bổ sung thêm một ý nữa là đoạn Lisp trên có thể hatch vào hình có lỗ thủng.

Cái dòng (setq te (ssget)) ở đoạn Code trên : nếu bạn chọn text thì hatch sẽ không đè lên text, còn nếu bạn chọn miền kín nằm trong hình chữ nhật (lỗ thủng) thì Lisp sẽ hatch vào hình chữ nhật trừ vùng lỗ thủng .

Tức là Lisp trên có thể Hatch vào miền kín có lỗ thủng.

Vận dụng đoạn Lisp trên, bạn có thể nhập tọa độ lỗ thủng để Lisp sẽ hatch vào miền trừ vùng lỗ thủ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
nataca    553
Nhờ các Bác viết giúp cho 1 Lisp dùng để vẽ POINT tại các điểm giao nhau của 1 Pline màu vàng với các Lines thẳng đứng như trong bàn vẽ. Xin cảm ơn.

http://www.cadviet.com/upfiles/Intersection_Points.dwg

intersectionpointsso8.jpg

w889.png

(defun C:EI2P ()
 	(vl-load-com)
 	(princ "\n Chon polyline...")
(setq ssp 	(ssget '((0 . "LWPOLYLINE"))))
  	(princ "\n Chon cac duong line...")
(setq 	ssl 	(ssget '((0 . "LINE")))
 			Enp		(ssname ssp 0)
	  	dem		0
		Lpoint	'()
 	)
 	(repeat (sslength ssl)
 		(setq Lpoint	(append  Lpoint (GET_INTERSECTION (ssname ssl dem) Enp))
		  dem		(1+ dem)
  	)
 	)
(foreach p Lpoint
	(entmake (list '(0 . "POINT") (cons 10 p)))
 	)
)


(defun GET_INTERSECTION (e1 e2 / ob1 ob2 V L1 L2)
(setq	ob1 (vlax-ename->vla-object e1)
  		ob2 (vlax-ename->vla-object e2)
		V	(vlax-variant-value
		  		(vla-IntersectWith ob1 ob2 acExtendNone)
			)
)
(if	(/= (vlax-safearray-get-u-bound V 1) -1)
  (progn
	(setq L1 (vlax-safearray->list V)
		  L2 nil
	)
	(while L1
	  (setq L2 (append L2 (list (list (car L1) (cadr L1) (caddr L1)))))
	  (repeat 3 (setq L1 (cdr L1)))
	)
  )
  (setq L2 nil)
)
L2
)

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
xuantran15    112

Chào các bác. Em có một yêu cầu mong các bác giúp đỡ.

 

Công việc của em thường hay gặp phải viiệc chuyển đổi từ một đường Polyline 3D sang Polyline hoặc 2D Polyline, Trước đây em thường dùng land 2004 để làm việc này nhưng lúc được lúc không, vả lại rất vất vả vì một lần như thế phải save qua cad 2004. Em đã thử dùng lisp làm phẳng đối tượng, lisp pl32(cái này dùng là đường pl3D mất luôn) của diễn đàn rồi mà cũng không được. Mong các bác viết dùm cho một cái lisp để thực hiện được điều trên. Thanks các bác nhiều.

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
Rất cám ơn bác Tue Nv, qua đoạn lisp này mình thấy hay hơn cái cách của mình rất nhiều. Nó không cần phải tạo khung pline cho text nữa. Và do đó cũng không cần phải xóa khung bao này.

Xin phép bác Tue Nv, mình giải thích thêm một chút cho những người mới làm quen với lisp.

Ở đoạn lisp này, bác Tue Nv đã thay đổi cách tạo lệnh hatch , thay vì chọn các đỉnh của khung pline kín như lisp bác đã post lần trước thì bác ấy đã chọn vào chính pline đó bằng tham số "L" nghĩa là đối tượng cuối cùng lisp vừa tạo (Last entity) trên bản vẽ.

Hai cách sử dụng lệnh Hatch này có khác nhau và các bạn mới học lisp nên lưu ý về cú pháp của nó.

Lệnh ssget ở đây cho phép chọn nhiều đối tượng text nhưng người dùng phải lưu ý các text này đều phải nằm trong khung pline mới được. Nếu không hatch sẽ không chạy được.

 

Trên các gợi ý của các bạn minh đã sửa lai như thế này (nhưng hơi chuối 1 chút)

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")

hoặc

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "hatch" "ansi31" "2" "0" "L" "100,-4.5" "")

 

cách 2 có vẻ hay hơn vì chỉ cần cấp toạ độ chuẩn của đối tượng là được, còn text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm

nhưng với cách 2 đối tượng bao phải là đối tượng yêu tiên nhất (vẽ mới nhất) (vì nếu có một đố tượng khác chùng toạ độ mới được vẽ thí nó nhân nhầm là đối ttượng đo )

Các bạn cho mình hỏi L (Last entity) là lệnh chọn đối tượng vừa tạo thì có lệnh nào có thể chọn được đối tượng tạo trước đối tượng vùa tạo 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
Tue_NV    3.841
Các bạn cho mình hỏi L (Last entity) là lệnh chọn đối tượng vừa tạo thì có lệnh nào có thể chọn được đối tượng tạo trước đối tượng vùa tạo không

Bạn có thể chọn đối tượng trước đối tượng vừa tạo, thậm chí trước, trước, trước nữa cũng được bằng cách sử dụng lệnh gán kết hợp với hàm ssget và thông số "L"

(setq ss (ssget "L"))

Ví dụ của bạn nhé :

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")

Dòng 1 và dòng 2 bạn tạo nên đfối tượng Text

Dòng thứ 3 bạn tạo nên đối tượng Pline

Dòng thứ 4 là dòng tạo hatch với cách chọn là đối tượng 3, tiếp theo là chọn các đối tượng Text

 

Mình viết lại như thế này bạn tìm hiểu cách chọn nhé :

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(setq te1 (ssget "L"))

(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")

(setq te2 (ssget "L"))

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "hatch" "ansi31" "2" "0" "L" te1 te2 "")

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
Bạn có thể chọn đối tượng trước đối tượng vừa tạo, thậm chí trước, trước, trước nữa cũng được bằng cách sử dụng lệnh gán kết hợp với hàm ssget và thông số "L"

(setq ss (ssget "L"))

Ví dụ của bạn nhé :

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")

Dòng 1 và dòng 2 bạn tạo nên đfối tượng Text

Dòng thứ 3 bạn tạo nên đối tượng Pline

Dòng thứ 4 là dòng tạo hatch với cách chọn là đối tượng 3, tiếp theo là chọn các đối tượng Text

 

Mình viết lại như thế này bạn tìm hiểu cách chọn nhé :

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(setq te1 (ssget "L"))

(command "text" "j" "M" "103.65,-1" "1" "0" "2.S")

(setq te2 (ssget "L"))

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "hatch" "ansi31" "2" "0" "L" te1 te2 "")

Chào bác Tue_Nv,

Đoạn code trên của bác mình đã thấm, tuy nhiên mình nghĩ có lẽ cái bạn Haiduong2105 muốn hình như có khác bác ạ. Theo mình hiểu thì bạn ấy muốn là bạn ấy có tập các đối tượng ss rồi, trong đó chưa xác định được thằng nào anh thằng nào em sất cả. Thế là bạn ấy muốn tìm cách xác định cái thằng áp út là thằng nào cơ bác ạ.

Nếu mình hiểu đúng thì không rõ đoạn code sau đây có làm được không bác Tue_NV nhỉ:

(setq ss (ssget "X" (list (cons 0 "text")))

(setq n (sslength ss))

(setq e (ssname ss 1))

 

Lúc này e là tên của thằng áp út chứ không phải bản thân nó bác ạ.

Sở dĩ mình làm thế này là do đọc bài post của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Tuy nhiên mình vẫn không yên tâm lắm vì như bác ssg nói cái thằng ssget này nó hay chơi khăm mình lắm. Nếu bác có cao kiến gì về việc này thì cho mình biết ý kiến với.

Cám ơn bác trước nha.

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
Tue_NV    3.841
Chào bác Tue_Nv,

Đoạn code trên của bác mình đã thấm, tuy nhiên mình nghĩ có lẽ cái bạn Haiduong2105 muốn hình như có khác bác ạ. Theo mình hiểu thì bạn ấy muốn là bạn ấy có tập các đối tượng ss rồi, trong đó chưa xác định được thằng nào anh thằng nào em sất cả. Thế là bạn ấy muốn tìm cách xác định cái thằng áp út là thằng nào cơ bác ạ.

Nếu mình hiểu đúng thì không rõ đoạn code sau đây có làm được không bác Tue_NV nhỉ:

(setq ss (ssget "X" (list (cons 0 "text")))

(setq n (sslength ss))

(setq e (ssname ss 1))

 

Lúc này e là tên của thằng áp út chứ không phải bản thân nó bác ạ.

Sở dĩ mình làm thế này là do đọc bài post của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Tuy nhiên mình vẫn không yên tâm lắm vì như bác ssg nói cái thằng ssget này nó hay chơi khăm mình lắm. Nếu bác có cao kiến gì về việc này thì cho mình biết ý kiến với.

Cám ơn bác trước nha.

Cảm ơn ban phamthanhBinh

Không phải ý bạn Haiduong2105 là đi xác định thằng áp út là thằng nào đâu.

còn text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm

Ý của bạn ấy là xác định cho được Text mà thôi.

Và khi sử dụng lệnh hatch thì đâu cần có phải xác định thằng nào anh hay thằng nào em làm gì?

Bạn hãy làm một ví dụ là hatch 1 hình chữ nhật bên trong có Text thì bạn hãy chọn text trước sau đó chọn hình chữ nhật sau thì kết quả sẽ như thế nào?

Kết quả sẽ chẳng khác gì khi hatch ta chọn hình chữ nhật trước và chọn các text sau

 

Mình tìm hoài không thấy bài của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Bạn có thể Link bài viết đó về đây được không?

Cảm ơn 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
phamthanhbinh    3.123
Trên các gợi ý của các bạn minh đã sửa lai như thế này (nhưng hơi chuối 1 chút)

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "hatch" "ansi31" "2" "0" "L" "104.65,0" "103.65,-1" "")

hoặc

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(command "hatch" "ansi31" "2" "0" "L" "100,-4.5" "")

 

cách 2 có vẻ hay hơn vì chỉ cần cấp toạ độ chuẩn của đối tượng là được, còn text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm

nhưng với cách 2 đối tượng bao phải là đối tượng yêu tiên nhất (vẽ mới nhất) (vì nếu có một đố tượng khác chùng toạ độ mới được vẽ thí nó nhân nhầm là đối ttượng đo )

Các bạn cho mình hỏi L (Last entity) là lệnh chọn đối tượng vừa tạo thì có lệnh nào có thể chọn được đối tượng tạo trước đối tượng vùa tạo không

 

Chào bạn Haiduong2105,

Về câu hỏi cuối của bạn, bạn có thể tham khảo phần trả lời của bác Tue_NV và của mình ở bài pót trả lời bác ấy. Qua đó bạn lựa chọn cái thích ứng với yêu cầu của bạn.

 

Về hai đoạn lisp của bạn mình góp ý như sau:

Để tránh cái việc lisp chọn nhầm đối tượng do việc lấy các tọa độ điểm như bạn đã thấy, đơn giản là bạn hãy chọn các đối tượng này theo ename của nó là OK.

Muốn vậy bạn có thể dùng hàm entlast sau mỗi lần xài các lệnh vẽ đối tượng để đặt tên cho các đối tượng này là được.

Ví dụ:

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(setq e1 (entlast))

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(setq e2 (entlast))

(command "hatch" "ansi31" "2" "0" e1 e2 "")

 

Có lẽ bạn nên xem lại cái quan niệm này :" text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm" . Thực ra bạn chỉ cần chọn một điểm bất kỳ thuộc đối tượng text là OK rồi. Có thể do bạn chọn kiểu justtify là mid nên điểm chọn ban đầu đặt text '(104.65 0) sẽ không còn nằm trên text nữa mà thôi. Rất may cho bạn là trong hai điểm bạn chọn ' (104.65 0) và '(103.65 -1) ít nhất có một điểm nằm trên text. Nhưng nếu bạn thay đổi nội dung text thì có thể cả hai điểm này đều rơi ra ngoài text và khi đó lisp của bạn sẽ cho kết quả không như ý. (nghĩa là hatch sẽ đè lên text)

Là người lập trình bạn nên loại trừ những lỗi ăn may kiểu này bạn ạ. Phải đảm bảo chương trình của mình chỉ cho ra một kết quả duy nhất trong mọi tình huống chứ không thể để chương trình chạy phập phù lúc được lúc không do người sử dụng lỡ tay sờ nhầm được.

 

Chúc bạn thành cô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
phamthanhbinh    3.123
Cảm ơn ban phamthanhBinh

Không phải ý bạn Haiduong2105 là đi xác định thằng áp út là thằng nào đâu.

 

Ý của bạn ấy là xác định cho được Text mà thôi.

Và khi sử dụng lệnh hatch thì đâu cần có phải xác định thằng nào anh hay thằng nào em làm gì?

Bạn hãy làm một ví dụ là hatch 1 hình chữ nhật bên trong có Text thì bạn hãy chọn text trước sau đó chọn hình chữ nhật sau thì kết quả sẽ như thế nào?

Kết quả sẽ chẳng khác gì khi hatch ta chọn hình chữ nhật trước và chọn các text sau

 

Mình tìm hoài không thấy bài của bác SSG nói rằng khi dùng hàm ssget nếu có các tham số thì nó sẽ chọn các đối tượng theo thứ tự ngược với khi khởi tạo. Bạn có thể Link bài viết đó về đây được không?

Cảm ơn bạn.

 

Chào bác Tue_NV,

Bài viết của bác SSG đây ạ.

http://www.cadviet.com/forum/index.php?sho...=371&st=180

Trong trang này có cả bài của bác Vn.....dos nói về vấn đề xác định trình tự của các đối tượng được chọn bằng hàm ssget. Tuy nhiên mình chưa hiểu hết nên cũng chưa áp dụng được, bác xem thử và cho ý kiến nhé.

 

Còn vấn đề của bạn Haiduong đúng như bác đã nói là chọn text trước hay sau không quan trọng khi hatch. Nhưng bạn ấy đang sợ rằng khi có nhiều đối tượng có trùng điểm chèn thì khi chọn theo điểm sẽ dễ bị nhầm bác ạ.

 

Mình đã có bài trả lời bạn ấy, bác tham khảo nhé.

Cám ơn bác nhiều.

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ình muốn hỏi về lisp chia đoạn line, pline thàng những đoạn nhỏ bằng nhau có kích thước xác định. Bạn nào biết thì giúp mình với nha, thanks nhiều! MÌnh đang cần gấp lắ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
Phiphi-    175
Mình muốn hỏi về lisp chia đoạn line, pline thàng những đoạn nhỏ bằng nhau có kích thước xác định. Bạn nào biết thì giúp mình với nha, thanks nhiều! MÌnh đang cần gấp lắm.

Dùng các LISP được PP post ở đây:

http://www.cadviet.com/forum/index.php?showtopic=9019

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 bạn Haiduong2105,

Về câu hỏi cuối của bạn, bạn có thể tham khảo phần trả lời của bác Tue_NV và của mình ở bài pót trả lời bác ấy. Qua đó bạn lựa chọn cái thích ứng với yêu cầu của bạn.

 

Về hai đoạn lisp của bạn mình góp ý như sau:

Để tránh cái việc lisp chọn nhầm đối tượng do việc lấy các tọa độ điểm như bạn đã thấy, đơn giản là bạn hãy chọn các đối tượng này theo ename của nó là OK.

Muốn vậy bạn có thể dùng hàm entlast sau mỗi lần xài các lệnh vẽ đối tượng để đặt tên cho các đối tượng này là được.

Ví dụ:

(command "pline" "100,-4.5" "100,4.5" "109.3,4.5" "109.3,-4.5" "c")

(setq e1 (entlast))

(command "text" "j" "M" "104.65,0" "1" "0" "1.S")

(setq e2 (entlast))

(command "hatch" "ansi31" "2" "0" e1 e2 "")

 

Có lẽ bạn nên xem lại cái quan niệm này :" text do đặt kiểu mid nên phải chọn 2 điểm nên rễ bị nhầm" . Thực ra bạn chỉ cần chọn một điểm bất kỳ thuộc đối tượng text là OK rồi. Có thể do bạn chọn kiểu justtify là mid nên điểm chọn ban đầu đặt text '(104.65 0) sẽ không còn nằm trên text nữa mà thôi. Rất may cho bạn là trong hai điểm bạn chọn ' (104.65 0) và '(103.65 -1) ít nhất có một điểm nằm trên text. Nhưng nếu bạn thay đổi nội dung text thì có thể cả hai điểm này đều rơi ra ngoài text và khi đó lisp của bạn sẽ cho kết quả không như ý. (nghĩa là hatch sẽ đè lên text)

Là người lập trình bạn nên loại trừ những lỗi ăn may kiểu này bạn ạ. Phải đảm bảo chương trình của mình chỉ cho ra một kết quả duy nhất trong mọi tình huống chứ không thể để chương trình chạy phập phù lúc được lúc không do người sử dụng lỡ tay sờ nhầm được.

 

Chúc bạn thành công.

 

Chào 2 bác rất, rất cám ơn hai bác chi bảo vình mình mới làm thử lisp mà chưa có thời gian đọc sách nền về cơ bản là "Mo" . mình viết lisp theo kiểu (command ....) là xem ở 1 phần mền thiết kế đường nó xuất TN, TD theo kiểu lisp nên bát trước viết để phục vụ cho thông kê các vị trị hỏng trên mặt đường(có tới 1000 vị trí vẽ tay thì vở mặt) do vậy mấy cái lệnh không giông lệnh vẽ là mình không hiểu lắm, nhưng bầy giờ hiểu được lệnh ssget thi bài toán của mình được giải ngẩy. Mục tiêu ở đây của mình là cho tự động Hacth hình trong đó có text (tên của vị trí) do vậy cần xác định được đối tương này để hacth không đè nên chữ.

Bài toán này xem như mình đã giả quết triệt để bằng phương pháp của bác Tue_NV.

Tiện đầy muốn cầu kiến 2 bác như sau:

Mình lập cái này trên excel: đã lập cho nó 1 nút lệnh nhấp vào là xuất ra file.lsp và vào cad đê load, Nhưng mình có ý tưởng khí nhấp vào nút đó nó sẽ tự động gọi cad và load.

Mong các bác giúp đỡ

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×