Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

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

Thế này nhé :

Thay vì bạn chọn thứ tự Text theo chiều mũi tên -> bạn vẽ 1 Pline qua các Text đó như hình bạn đã post. PLINE này bạn nên để vào lớp DEFPOINTS để khi in ra không thấy và có thể ẩn nó đi bất cứ lúc nào (sử dụng lệnh Layoff). Sau này muốn sửa số và chạy lại Lisp thì cho hiện cái Pline này lên và ... chạy, khỏi mất công chọn ......Text. Chú ý rằng Pline này : điểm đầu -> điểm cuối phải đi theo chiều mũi tên nhé

 

Về kết quả xuất của Lisp : Xuất ra Table -> Muốn chuyển qua Excel thì cứ Chọn cái Table mà Export là xong -> Tiếp muốn chuyển qua CAD theo đối tượng OLE(như bản vẽ của bạn) thì cứ copy -> paste là xong

 

PS : Không nên sử dụng đối tượng OLE trong CAD mà nên sử dụng Table

 

 

 

Em xuất được ra Table trong cad rồi nhưng ko xuất sang excell đc. export sang ko ra cái j cả, bác xem giúp em với nhé. Thanks bá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
Em xuất được ra Table trong cad rồi nhưng ko xuất sang excell đc. export sang ko ra cái j cả, bác xem giúp em với nhé. Thanks bác nha

Bạn đã sử dụng lệnh tableexport chưa?

  • 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
Bạn đã sử dụng lệnh tableexport chưa?

 

 

Cảm ơn bác Tue nha, em làm đc rồi, Chúc bác khoẻ, công việc tốt và ngày càng có nhiều lisp hay

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 ơn bác Tue nha, em làm đc rồi, Chúc bác khoẻ, công việc tốt và ngày càng có nhiều lisp hay

Thực ra, mình đã lầm. Cứ tưởng đường PLINE màu đỏ trong file của bạn upload lên là có sẳn, hoá ra không phải.

Yêu cầu của bạn rất rõ phải chọn thứ tự là Text. Tue_NV muốn tối ưu hơn nên đã chọn PLINE thay vì chọn Text nhưng đã lầm vì PLINE không có sẵn. Bạn chọn Text không cần theo thứ tự, Lisp sẽ sắp xếp cho bạn từ trái qua phải hay từ phải qua trái do User định.

 

Theo Tue_NV thấy thì bạn muốn xuất kết quả Excel

Yêu cầu của bạn khá giống với yêu cầu của UtCung cách đây vài hôm và Tue_NV đã giải quyết thành công.

Bạn xem có đúng không nhé

1. Chọn các Text

2. Lisp sắp xếp Text từ trái qua phải hay từ phải qua trái do User định

3. Xuất sang Table hay Excel với 2 text trên mỗi hàng

 

Tue_NV hơi bận. Bạn chịu khó sài đỡ cái Lisp kia vậ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

CadViêt mình có lish chuyển đổi Hatch có associative và ngược lại chưa nhỉ?

nếu chưa có nhờ bác nào viết giúp! chứ mỗi lần muốn chuyển đổi lại phải hatch lại để chọn associative thì hơi ngại! :rolleyes:

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
CadViêt mình có lish chuyển đổi Hatch có associative và ngược lại chưa nhỉ?

nếu chưa có nhờ bác nào viết giúp! chứ mỗi lần muốn chuyển đổi lại phải hatch lại để chọn associative thì hơi ngại! :rolleyes:

Cải tiến từ Lisp move hatch trong topic này :

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

Tue_NV viết thêm đôi chút cho phù hợp với yêu cầu của bạn :

(defun c:hma ()
(setvar "hpassoc" 1)
(setvar "osmode" 512)
(setq ddd (entsel "\nChuyen Hatch : Non-associative -> associative"))
(while 
(null ddd)
(princ "\nDoi tuong khong phai la Hatch! Chon lai")
(setq ddd (entsel "\nChon Hatch mau :"))
)

(setq ename ddd
elist (entget (car ename))
etyp (cdr (assoc 0 elist))
old (getvar "clayer")
);setq

(if (/= etyp "HATCH")
(prompt "\nKHONG PHAI DOI TUONG HATCH! HAY THU LAI!")
(progn
(setq layn (cdr (assoc 8 elist)))
(setvar "HPNAME" (cdr (assoc 2 elist)))
))

(if (= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn

(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
))

(if (/= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn

;(setq pt1 (getpoint "\nCHON MOT DIEM TRONG VUNG SE HATCH: "))
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)

);progn
);if
(princ)
);defun
;;;;;;;;;;;;;
(defun c:hmna ()
(setvar "hpassoc" 0)
(setvar "osmode" 512)
(setq ddd (entsel "\nChuyen Hatch : associative -> Non-associative"))
(while 
(null ddd)
(princ "\nDoi tuong khong phai la Hatch! Chon lai")
(setq ddd (entsel "\nChon Hatch mau :"))
)

(setq ename ddd
elist (entget (car ename))
etyp (cdr (assoc 0 elist))
old (getvar "clayer")
);setq

(if (/= etyp "HATCH")
(prompt "\nKHONG PHAI DOI TUONG HATCH! HAY THU LAI!")
(progn
(setq layn (cdr (assoc 8 elist)))
(setvar "HPNAME" (cdr (assoc 2 elist)))
))

(if (= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn

(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)
))

(if (/= (setvar "HPNAME" (cdr (assoc 2 elist))) "SOLID")
(Progn

;(setq pt1 (getpoint "\nCHON MOT DIEM TRONG VUNG SE HATCH: "))
(setq pt1 (cadr ddd))
(setvar "clayer" layn)
(entdel (car ename))
(command "bhatch" pt1 "")
(setvar "clayer" old)

);progn
);if
(princ)
);defun

  • Vote tăng 2

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 út hỏi cái này tí.

Khi mình dùng các lệnh field (link các giá trị) thì text link nó có vùng giống như hatch xung quanh, trong bản vẽ có nhiều text này làm nhức mắt quá (út lại bị đau mắt nữa) bác nào biết cách đổi màu của vùng hatch xung quanh text này chỉ dùm út với.

Cảm ơn cadviet! Chúc mọi người sức khoẻ!

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 út hỏi cái này tí.

Khi mình dùng các lệnh field (link các giá trị) thì text link nó có vùng giống như hatch xung quanh, trong bản vẽ có nhiều text này làm nhức mắt quá (út lại bị đau mắt nữa) bác nào biết cách đổi màu của vùng hatch xung quanh text này chỉ dùm út với.

Cảm ơn cadviet! Chúc mọi người sức khoẻ!

Út nên post bài đúng chủ đề. Nên post vào Kỹ thuật AutoCAD thì hợp lý

đổi màu thì Tue_NV không biết cách. Nhưng để bỏ nó đi thì thiết lập biến fielddisplay và cho nó =0

 

Command: fielddisplay

 

Enter new value for FIELDDISPLAY : 0

 

hoặc option -> Tab User Preferences bỏ dấu tick Display background of field

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ải tiến từ Lisp move hatch trong topic này :

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

Tue_NV viết thêm đôi chút cho phù hợp với yêu cầu của bạn :

..................

Cách khác để chuyển Hatch từ associative -> Non-associative

 

(defun C:ha(/ obj ss);Chuyen Hatch : associative -> Non-associative
 (if (and
(setq ss (ssget "+.:S:N" (list (cons 0 "HATCH"))))
(setq obj (vlax-Ename->Vla-Object(ssname ss 0)))
(= (vla-get-AssociativeHatch obj) :vlax-true))
   (vla-put-AssociativeHatch obj :vlax-false)    )
 (princ))

  • 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
Thực ra, mình đã lầm. Cứ tưởng đường PLINE màu đỏ trong file của bạn upload lên là có sẳn, hoá ra không phải.

Yêu cầu của bạn rất rõ phải chọn thứ tự là Text. Tue_NV muốn tối ưu hơn nên đã chọn PLINE thay vì chọn Text nhưng đã lầm vì PLINE không có sẵn. Bạn chọn Text không cần theo thứ tự, Lisp sẽ sắp xếp cho bạn từ trái qua phải hay từ phải qua trái do User định.

 

Theo Tue_NV thấy thì bạn muốn xuất kết quả Excel

Yêu cầu của bạn khá giống với yêu cầu của UtCung cách đây vài hôm và Tue_NV đã giải quyết thành công.

Bạn xem có đúng không nhé

1. Chọn các Text

2. Lisp sắp xếp Text từ trái qua phải hay từ phải qua trái do User định

3. Xuất sang Table hay Excel với 2 text trên mỗi hàng

 

Tue_NV hơi bận. Bạn chịu khó sài đỡ cái Lisp kia vậy

Thanks bác Tue NV nha, khi nào có thời gian rảnh em sẽ thảo luận với bác rõ hơn về bài toán này, dùng lisp kia của bác em cũng giải quyết gần xong vđề của mình rồi(mỗi tội hơi lâu :rolleyes:)

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 bạn mình có một số vấn đề cần hỏi các bạn như sau:

- Mình lần lượt vẽ từ trái sang phải 5 đoạn thẳng. sau đó mình vẽ đoạn thẳng thứ 6 vào giữa đoạn thẳng 2 và 3.

- Mình chọn tất cả đối tượng thì cad sẽ hiểu là lấy đoạn thẳng thứ 6 trước rồi tiếp theo là 5, 4, 3, 2, 1.

- Khi mình viết lisp đo khoảng cách giữa các đoạn từ trái sang phải thì xảy ra tình trạng đo khoảng cách giữa 1 và 2, 2 và 3, 3 và 4, 4 và 5, 5 và 6.

- Như vậy là đo theo trình tự vẽ của cad.

- Bây giờ mình muốn máy đo theo trình tự của mình từ trái sang phải 1-2, 2-6, 6-3, 3-4, 4-5.

Mong các bạn giúp mì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

chào các bác các bác giúp em viết lisp

thứ nhất là:

trong cad có lênh OFFSET nhưng em muốn OFFSET đối tượng 3dpolyline cũng giống như OFFSET đối tượng 2D về cao độ của 3D là bằng nhau giống như cái 3D ban đầu vì lệnh của cad là không OFFSET được các đối tượng 3D mà phải nhập tọa độ cho chúng mới OFFSET được như vậy thì rất lâu vì bản vã của em có rất nhiều đối tượng 3D

thứ 2 là :

em có các đối tượng 2D polyline cần lisp để khi quét qua chúng các đối tượng 2D được chuyển thành 3D và các điểm cắt qua là có cao độ theo hướng mình quét qua và cao độ đó do người dùng nhập vào và cứ mỗi đường cao độ có bước chênh lệch nhau một bước là dellta do người dùng cho

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 ơn Gia Bach!

Món này ngon nhưng không "hợp khẩu vị" của út, vì út dùng để đo rất nhiều cái khác nhau nên cái lisp của út sẽ phù hợp hơn. Chỉ khổ nỗi mỗi lần ghi ra text thì nó luôn có 1 khoảng cách phía trước. Út muốn xoá khoảng cách trống ở phía trước này

Cảm ơn mọi nguời!

Bác nào rãnh giúp út với!

Lisp út đang dùng: http://www.cadviet.com/upfiles/2/chieu_dai_2_c2_1.rar

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ác nào rãnh giúp út với!

Lisp út đang dùng: http://www.cadviet.com/upfiles/2/chieu_dai_2_c2_1.rar

Út thay dòng này :

(emkT (strcat " " (rtos total) S2) p)

bằng dòng này :

(emkT (strcat (rtos total) S2) p)

 

Chúc Út thành công

  • 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

Mong các bạn giúp đơ. Mình cần 1 lisp để vẽ taluy đường. Mình đã thử tìm trong diễn đàn nhưng đều ko dùng hiệu quả. Mình cần lisp hỗ trợ vẽ taluy bao gồm 3 đường dài, 2 đường ngắn, khoảng cách giữa các đường do mình tự cho. hiện mình đang làm thủ công rất mất thời gian. Mong mọi người giúp đỡ. Chân thà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 thay dòng này :

(emkT (strcat " " (rtos total) S2) p)

bằng dòng này :

(emkT (strcat (rtos total) S2) p)

 

Chúc Út thành công

Cảm ơn Bác Tuệ nhiều! Út làm được rồi! Chúc Bác sức khỏe!

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 bạn mình có một số vấn đề cần hỏi các bạn như sau:

- Mình lần lượt vẽ từ trái sang phải 5 đoạn thẳng. sau đó mình vẽ đoạn thẳng thứ 6 vào giữa đoạn thẳng 2 và 3.

- Mình chọn tất cả đối tượng thì cad sẽ hiểu là lấy đoạn thẳng thứ 6 trước rồi tiếp theo là 5, 4, 3, 2, 1.

- Khi mình viết lisp đo khoảng cách giữa các đoạn từ trái sang phải thì xảy ra tình trạng đo khoảng cách giữa 1 và 2, 2 và 3, 3 và 4, 4 và 5, 5 và 6.

- Như vậy là đo theo trình tự vẽ của cad.

- Bây giờ mình muốn máy đo theo trình tự của mình từ trái sang phải 1-2, 2-6, 6-3, 3-4, 4-5.

Mong các bạn giúp mình.

Không biết Lisp của bạn viết thế nào và "đo khoảng cách" của bạn là dùng lệnh DIM hay Distance

Theo tôi hiểu là bạn có 5 đường thẳng đứng, chèn thêm 1 đường vào giữa, muốn xác định khoảng cách giữa các đường thẳng.

Nếu sử dụng lisp bạn hãy lấy tọa độ X của điểm đầu (hoặc cuối) các đoạn thẳng nhét vào 1 list rồi sau đó sử dụng lệnh vl-sort để sắp xếp theo thứ tự tăng giảm, cuối cùng là tính toán sự chênh lệch các tọa độ trong list đã được sắp xế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

Chân thành nhờ các bác cao thủ lips giúp em với! chẳng là khi em dim bản vẽ, những chỗ khoảng cách lớn thì dim bình thường và đẹp nhưng những chỗ khoảng cách nhỏ chữ số dim tự nhiên nhảy hàng trông rất xấu, em lại phải tiến hành lệnh di chuyển dim để cho đường dim trở lại thẳng hàng, việc này rất tốn thời gian và công sức. Các bác cao thủ viết lips viết hộ em 1 lips chỉ cần đánh lệnh là đường dim ngon như bình thường với. Em cám ơn các cao thủ nhiều nhiều. Có hình vẽ minh hoạ bên dưới các bác xem qua cho em với nhé hihihi Thanks

http://www.cadviet.com/upfiles/2/dim_1.dwg

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ân thành nhờ các bác cao thủ lips giúp em với! chẳng là khi em dim bản vẽ, những chỗ khoảng cách lớn thì dim bình thường và đẹp nhưng những chỗ khoảng cách nhỏ chữ số dim tự nhiên nhảy hàng trông rất xấu, em lại phải tiến hành lệnh di chuyển dim để cho đường dim trở lại thẳng hàng, việc này rất tốn thời gian và công sức. Các bác cao thủ viết lips viết hộ em 1 lips chỉ cần đánh lệnh là đường dim ngon như bình thường với. Em cám ơn các cao thủ nhiều nhiều. Có hình vẽ minh hoạ bên dưới các bác xem qua cho em với nhé hihihi Thanks

http://www.cadviet.com/upfiles/2/dim_1.dwg

Cần gì Lisp. Setting lại DimStyle là đuợc.

chọn option : Always keep text between ext lines

 

fit_txt_dim.jpg

  • 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
Không biết Lisp của bạn viết thế nào và "đo khoảng cách" của bạn là dùng lệnh DIM hay Distance

Theo tôi hiểu là bạn có 5 đường thẳng đứng, chèn thêm 1 đường vào giữa, muốn xác định khoảng cách giữa các đường thẳng.

Nếu sử dụng lisp bạn hãy lấy tọa độ X của điểm đầu (hoặc cuối) các đoạn thẳng nhét vào 1 list rồi sau đó sử dụng lệnh vl-sort để sắp xếp theo thứ tự tăng giảm, cuối cùng là tính toán sự chênh lệch các tọa độ trong list đã được sắp xếp.

Chào bạn 18011985,

Vấn đề như bạn nói theo mình hiểu là do bạn chọn tập hợp các đối tượng đoạn thẳng bằng hàm SSget. Khi dùng lệnh này thì các đối tượng được chọn sẽ được sắp xếp trong tập chọn theo trình tự bạn thiết lập chúng trong cad.

Vậy để có thể sắp xếp lại các đồi tượng này theo đúng ý của bạn (theo trật tự từ trái sang phải hoặc ngược lại) bạn phải dựa vào tọa độ của các điểm chuẩn trên các đoạn thẳng mà bạn đã vẽ . Bác hoa35ktxd đã hướng dẫn bạn một cách làm rồi đó. Bạn cũng có thể tự nghĩ ra cách khác như tạo một đường thẳng giao với các đoạn thẳng của bạn rồi lấy tập hợp các giao điểm này để xử lý .......

Về vấn đề này, bác Tue_NV có nhiều kinh nghiệm lắm, bạn có thể tham khảo bác ấy qua tin nhắn trên diễn đàn.

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

mong các bác sửa giúp mình lisp này với:

http://www.cadviet.com/upfiles/2/doitruc.lsp

mình đang dùng lisp trên để đánh số thứ tự tự động nhưng lisp này lại chỉ cho đánh đến 100 thôi nay mình muốn lisp này đánh số tự động không bị giới hạn. Rất mong các bác giúp đỡ mình sửa lisp này nhé! xin cảm ơn 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

Nhờ viết lisp sửa cao độ của bản vẽ san nền

Mình có một bản vẽ san nền (bản vẽ 1) được tạo ra nhờ lisp SANNEN down trên diễn đàn Cadviet: Tại các mắt lưới đã có các khối thuộc tính. Tuy nhiên do nhu cầu tính toán, cần phải thay đổi hàng loạt giá trị cao độ theo một số gia nhất định. Cao độ thiết kế (CD_TK) được thay đổi tự động bỡi lisp SANNEN, còn cao độ tự nhiên (CD_TN) thì "pick từng phát một" :cheers:

Cần nhờ đến lisp với yêu cầu như sau:

Nhập lệnh->nhập số gia cần thay đổi (ví dụ trong bản vẽ số gia là -0.1)->chọn đối tượng trên màn hình, OK cho kết quả như bản vẽ 2

*Hoặc để sử dụng lisp trên phạm vi rộng, có thể thực hiện theo yêu cầu sau:

Nhập lệnh-> yêu cầu nhập tên thuộc tính cần thay đổi (ví dụ CD_TK)->nhập số gia->chọn đối tượng, OK chương trình tự lọc các thuộc tính (CD_TK) và thực hiện thay đổi

http://www.cadviet.com/upfiles/2/bientapcd.rar

Cám ơn các bạn trướ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
Nhờ viết lisp sửa cao độ của bản vẽ san nền

Mình có một bản vẽ san nền (bản vẽ 1) được tạo ra nhờ lisp SANNEN down trên diễn đàn Cadviet: Tại các mắt lưới đã có các khối thuộc tính. Tuy nhiên do nhu cầu tính toán, cần phải thay đổi hàng loạt giá trị cao độ theo một số gia nhất định. Cao độ thiết kế (CD_TK) được thay đổi tự động bỡi lisp SANNEN, còn cao độ tự nhiên (CD_TN) thì "pick từng phát một" :cheers:

Cần nhờ đến lisp với yêu cầu như sau:

Nhập lệnh->nhập số gia cần thay đổi (ví dụ trong bản vẽ số gia là -0.1)->chọn đối tượng trên màn hình, OK cho kết quả như bản vẽ 2

*Hoặc để sử dụng lisp trên phạm vi rộng, có thể thực hiện theo yêu cầu sau:

Nhập lệnh-> yêu cầu nhập tên thuộc tính cần thay đổi (ví dụ CD_TK)->nhập số gia->chọn đối tượng, OK chương trình tự lọc các thuộc tính (CD_TK) và thực hiện thay đổi

http://www.cadviet.com/upfiles/2/bientapcd.rar

Cám ơn các bạn trước nhá!

Bạn chạy thử LISP : cộng (trừ) giá trị của Block thuộc tính.

chatt.jpg

tên lệnh : ChAtt (Change Attributes)

- chọn Block cần thay đổi

- chọn Tag thuộc tính tuơng ứng cần thay đổi

- nhập số gia (muốn trừ, nhập số âm)

- chọn đối tượng trên màn hình

 

File download : ChAtt.zip

  • Vote tăng 2

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.

×