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

Viết Lisp theo yêu cầu

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

Bạn có thể post yêu cầu về autolisp ở topic này.

Bác Hoành ơi cho em xin 1 cái lip : ví dụ trên bản vẽ của mình có 10 loại hatch khác nhau thì khi ra lệnh nó sẻ tạo ra 10 layẻ cùng tên hoặc khác tên với tên của hatch và gán cho mỗi loại hatch 1 layẻ đó được ko, 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
Bác Hoành ơi cho em xin 1 cái lip : ví dụ trên bản vẽ của mình có 10 loại hatch khác nhau thì khi ra lệnh nó sẻ tạo ra 10 layẻ cùng tên hoặc khác tên với tên của hatch và gán cho mỗi loại hatch 1 layẻ đó được ko, cám ơn.

 

Lệnh là H2L (Hatch to Layer)

(defun c:h2l( / s g o n)
 (setq
   s (ssget '((0 . "HATCH")))    	
 )
 (while (setq e (ssname s 0))
   (setq
     g (entget e)
     o (assoc 8 g)
     n (cons 8 (cdr (assoc 2 g)))
     g (subst n o g)
     s (ssdel e s)
   )
   (entmod g)
 )
)

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

bác Hoành có cái Lisp nào giúp vẽ khung nhà cao tầng và bố trí thép cho nhanh không?Lisp vẽ mặt cắt cột và dầm và Lisp giúp thống kê thép nhanh nữa!vì em chưa đọc được các Lisp đó nên nếu đã có bài viết về Lisp này rồi mong các bác thông cảm,thansk 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

Em nhờ các huynh giúp mà đợi mãi không có ai chả lời. Có lẽ nào không Huynh nào giúp được đẹ sao???? :cheers: Đệ nhờ các Huynh giúp viết 1 list để đo kíh thước, yêu cầu đôn giản thôi.

Một bản vẽ của Đệ gồm rất nhiều đường line và polyne, để đo kích thước cho tất cả các đường đó thì rất lâu và tỷ mỉ. Mong các huynh giúp đệ 1 cái list để chỉ bằng 1 thao tác đệ có thể đo được tất cả các kỉch thước đó. Lưu ý kích thước Đệ cần đo là theo phương xiên.Lần trước có Huynh bảo đẹ dùng lênh Qdim nhưng nó chỉ đo theo phương vuông được thôi.Mong các Huynh giúp đẹ mớ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
Bác nào có list tính tổng chiều dài các đoạn thẳng, đoạn cong cho em xin với. Cám ơn nhiều

Bạn đọc ở bài viết này nhé.

http://www.cadviet.com/forum/index.php?sho...art=#entry45857

Chúc vui. :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
Em nhờ các huynh giúp mà đợi mãi không có ai chả lời. Có lẽ nào không Huynh nào giúp được đẹ sao???? :cheers: Đệ nhờ các Huynh giúp viết 1 list để đo kíh thước, yêu cầu đôn giản thôi.

Một bản vẽ của Đệ gồm rất nhiều đường line và polyne, để đo kích thước cho tất cả các đường đó thì rất lâu và tỷ mỉ. Mong các huynh giúp đệ 1 cái list để chỉ bằng 1 thao tác đệ có thể đo được tất cả các kỉch thước đó. Lưu ý kích thước Đệ cần đo là theo phương xiên.Lần trước có Huynh bảo đẹ dùng lênh Qdim nhưng nó chỉ đo theo phương vuông được thôi.Mong các Huynh giúp đẹ mới.

Bạn thử lisp này xem sao. Lệnh AD (AutoDim):

;;;-------------------------------------------------------------
(defun TBCong (x1 x2) (/ (+ x1 x2) 2)) ;;;Trung binh cong
;;;-------------------------------------------------------------
(defun MidP (p1 p2) ;;;Midpoint
(list (TBCong (car p1) (car p2)) (TBCong (cadr p1) (cadr p2)) (TBCong (caddr p1) (caddr p2)))
)
;;;-------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
   (setq L (append L (list (vlax-curve-getPointAtParam e i))))
   (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------
(defun etype (e) (cdr (assoc 0 (entget e)))) ;;;Entity type
;;;-------------------------------------------------------------
(defun dim2p (p1 p2 s) ;;;Dimaligned 2 Point
(command "dimaligned" p1 p2 (polar (MidP p1 p2) (+ (angle p1 p2) (/ pi 2)) s))
)
;;;-------------------------------------------------------------
(defun dimLine(e s) ;;;Dimaligned Line
(dim2p (cdr (assoc 10 (entget e))) (cdr (assoc 11 (entget e))) s)
)
;;;-------------------------------------------------------------
(defun dimPline(e s) ;;;Dimaligned PLine
(setq Lp (getvert e) i 0)
(repeat (1- (length Lp))
   (dim2p (nth i Lp) (nth (1+ i) Lp) s)
   (setq i (1+ i))
)
)
;;;-------------------------------------------------------------
(defun C:AD( / ss s oldos e) ;;;AutoDimaligned Line & Pline
(if (not s0) (setq s0 10))
(setq
   ss (ssget '((0 . "LINE,LWPOLYLINE")))
   s (getdist (strcat "\nKhoang cach tu doi tuong den duong kich thuoc <" (rtos s0) ">:"))
   oldos (getvar "osmode")
)
(if (not s) (setq s s0) (setq s0 s))
(setvar "osmode" 0)
(while (setq e (ssname ss 0))
   (if (= (etype e) "LINE") (dimLine e s) (dimPline e s))
   (ssdel e ss)
)
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------

 

Lưu ý:

1. Yêu cầu của bạn nếu chỉ với Line thì có thể đơn giản, nhưng có cả Pline thì cũng khá lôi thôi khi lập trình

2. Khi dim trực tiếp, user có sự nhìn nhận tổng quát để đặt vị trí dim linh hoạt, phù hợp với nhiều tình huống khác nhau. Với chương trình thì không (hoặc khó) được như vậy vì mọi chương trình đều mang tính máy móc và cứng nhắc. Trong chương trình trên, vị trí đặt dim được áp đặt theo một kiểu duy nhất, cách đối tượng một khoảng do user nhập vào tại dòng nhắc "Khoang cach tu doi tuong den duong kich thuoc <10>:". Mặc định lần đầu là 10, các lần sau chương trình tự nhớ trị số lần trước (nếu bạn chấp nhận trị số trong dấu móc nhọn thì chỉ cần Enter). Tuy nhiên, nhược điểm cũng chính là ưu điểm, bạn cứ yên chí rằng tất cả các dim đều nằm cách đối tượng một khoảng bằng nhau, đều tăm tắp!

3. AutoDim của bất cứ chương trình nào (kể cả các trình CAD "chính quy" có tính năng này), chỉ giúp user tiết kiệm được phần lớn thời gian, nhưng sau đó thường phải edit, chỉnh sửa thêm cho phù hợp.

4. Một điều quan trọng nữa cần lưu ý, khi dùng lisp trên, các dim tạo thành không có tính năng dimassoc. Nghĩa là khi bạn edit đối tượng, dim không tự động update theo đượ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
Bạn thử lisp này xem sao. Lệnh AD (AutoDim):

;;;-------------------------------------------------------------
(defun TBCong (x1 x2) (/ (+ x1 x2) 2)) ;;;Trung binh cong
;;;-------------------------------------------------------------
(defun MidP (p1 p2) ;;;Midpoint
(list (TBCong (car p1) (car p2)) (TBCong (cadr p1) (cadr p2)) (TBCong (caddr p1) (caddr p2)))
)
;;;-------------------------------------------------------------
(defun getVert (e / i L) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(vl-load-com)
(repeat (fix (+ (vlax-curve-getEndParam e) 1))
   (setq L (append L (list (vlax-curve-getPointAtParam e i))))
   (setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------
(defun etype (e) (cdr (assoc 0 (entget e)))) ;;;Entity type
;;;-------------------------------------------------------------
(defun dim2p (p1 p2 s) ;;;Dimaligned 2 Point
(command "dimaligned" p1 p2 (polar (MidP p1 p2) (+ (angle p1 p2) (/ pi 2)) s))
)
;;;-------------------------------------------------------------
(defun dimLine(e s) ;;;Dimaligned Line
(dim2p (cdr (assoc 10 (entget e))) (cdr (assoc 11 (entget e))) s)
)
;;;-------------------------------------------------------------
(defun dimPline(e s) ;;;Dimaligned PLine
(setq Lp (getvert e) i 0)
(repeat (1- (length Lp))
   (dim2p (nth i Lp) (nth (1+ i) Lp) s)
   (setq i (1+ i))
)
)
;;;-------------------------------------------------------------
(defun C:AD( / ss s oldos e) ;;;AutoDimaligned Line & Pline
(if (not s0) (setq s0 10))
(setq
   ss (ssget '((0 . "LINE,LWPOLYLINE")))
   s (getdist (strcat "\nKhoang cach tu doi tuong den duong kich thuoc <" (rtos s0) ">:"))
   oldos (getvar "osmode")
)
(if (not s) (setq s s0) (setq s0 s))
(setvar "osmode" 0)
(while (setq e (ssname ss 0))
   (if (= (etype e) "LINE") (dimLine e s) (dimPline e s))
   (ssdel e ss)
)
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------

 

Lưu ý:

1. Yêu cầu của bạn nếu chỉ với Line thì có thể đơn giản, nhưng có cả Pline thì cũng khá lôi thôi khi lập trình

2. Khi dim trực tiếp, user có sự nhìn nhận tổng quát để đặt vị trí dim linh hoạt, phù hợp với nhiều tình huống khác nhau. Với chương trình thì không (hoặc khó) được như vậy vì mọi chương trình đều mang tính máy móc và cứng nhắc. Trong chương trình trên, vị trí đặt dim được áp đặt theo một kiểu duy nhất, cách đối tượng một khoảng do user nhập vào tại dòng nhắc "Khoang cach tu doi tuong den duong kich thuoc <10>:". Mặc định lần đầu là 10, các lần sau chương trình tự nhớ trị số lần trước (nếu bạn chấp nhận trị số trong dấu móc nhọn thì chỉ cần Enter). Tuy nhiên, nhược điểm cũng chính là ưu điểm, bạn cứ yên chí rằng tất cả các dim đều nằm cách đối tượng một khoảng bằng nhau, đều tăm tắp!

3. AutoDim của bất cứ chương trình nào (kể cả các trình CAD "chính quy" có tính năng này), chỉ giúp user tiết kiệm được phần lớn thời gian, nhưng sau đó thường phải edit, chỉnh sửa thêm cho phù hợp.

4. Một điều quan trọng nữa cần lưu ý, khi dùng lisp trên, các dim tạo thành không có tính năng dimassoc. Nghĩa là khi bạn edit đối tượng, dim không tự động update theo được.

Rất cảm ơn anh ssg cai nay tôt quá rùi rất cảm ơn anh 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

Nho Bac Hoanh, giup

Như là công việc đo đạc đất đai

Khi đo xong ta vẽ hình thửa đất

tính diện tích hình đó , thể hiện chiều dài các cạnh thửa đất

Xong nó tư động ghi các tọa độ đỉnh của hình và chiều dài qua các điểm vào bảng

http://www.cadviet.com/upfiles/hskttd.rar

Rat mong duoc bac giup

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

 

Chào các bác. Các bác giúp em viết chương trình lisp cho hình trên với. Cám ơn các bác nhiều.

Chào bạn tyanhcad,

Bạn có phải là dân kỹ thuật không vậy?

Bạn yêu cầu người khác làm một cái việc mà bạn không cho người ta biết đầy đủ các yêu cầu của bạn thì là đánh đố người ta à?

Cái hình vẽ của bạn thiếu kích thước tùm lum thì vẽ cái gì?

Đề nghị bạn cần nghiêm túc hơn khi post yêu cầu của mình.

Rất buồn khi phải nói những điều đơn giản này giữa những người làm kỹ thuật với nhau 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
Bạn có thể post yêu cầu về autolisp ở topic này.

Chào các bác.

Em đang làm ở 1 dự án Khu đô thị mới. Bọn em đang phải làm công tác ĐBGPMB nhưng các sếp lại không cho mua phần mềm mà NV phải tự làm.

Em có 1 cái khó khăn là phải làm sơ họa cho các thửa đất cần ĐBGP như file gửi kèm:

help.jpg

- phải có chiều dài từng cạnh của thửa đất (nếu chiều dài được đặt trên phương của cạnh thì càng tốt)

Các bác xem có cách nào giúp em giải quyết việc pick chiều dài từng cạnh 1 cách nhanh nhất được không ạ?

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

Trên diễn đàn đã có Lips "ẩn" và "hiện" lại các đối tượng đã ẩn, xin đề xuất các cao thủ viết thêm Lips chuyển đổi qua lại giữa các đối tượng 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

Chào bạn phamthanhbinh. Mình đã nói là viết cho mình một cái lisp chứ không phải là biểu vẽ hình đó ra. Là như vậy nè, viết lisp khung giống như vậy để mình đưa vào autocad xong mình chỉ nhập kích thước của chiều cao từng tầng . Ví dụ 3 tầng thì nhập chiều cao 3 lần, nhập chiều rộng bước cột thì sẽ cho ra một cái khung như vậy. Ý mình là 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
Chào các bác.

Em đang làm ở 1 dự án Khu đô thị mới. Bọn em đang phải làm công tác ĐBGPMB nhưng các sếp lại không cho mua phần mềm mà NV phải tự làm.

Em có 1 cái khó khăn là phải làm sơ họa cho các thửa đất cần ĐBGP như file gửi kèm:

help.jpg

- phải có chiều dài từng cạnh của thửa đất (nếu chiều dài được đặt trên phương của cạnh thì càng tốt)

Các bác xem có cách nào giúp em giải quyết việc pick chiều dài từng cạnh 1 cách nhanh nhất được không ạ?

Thanks!

vấn đề của bác đã đc giải đáp phía trên ,bài của ssq,bác hỏi mà ko đọc bài trước dễ bị bực lắm đó.vì vấn đề này vừa giải đáp xong ở trang 72

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

bach Hoành cho em xin cái LÍP sửa TEXT va Dim TRONG Block với a! và một Lisp như sau:vẽ n đường thẳng vào giữa 2 đường làm gốc tất cả song song nhau và tất cả các đường thẳng vừa vẽ và 2 đường thẳng gốc cách đều nhau! em tìm không được!thanks 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
bach Hoành cho em xin cái LÍP sửa TEXT va Dim TRONG Block với a!em tìm không được!thanks bác trước!

bạn có thể sửa block bằng cách lick 2 lần vào block

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
bach Hoành cho em xin cái LÍP sửa TEXT va Dim TRONG Block với a! và một Lisp như sau:vẽ n đường thẳng vào giữa 2 đường làm gốc tất cả song song nhau và tất cả các đường thẳng vừa vẽ và 2 đường thẳng gốc cách đều nhau! em tìm không được!thanks bác trước!

bạn có thể vẽ các đường song song bằng hatch:ở bảng hatch vào hộp thoại type-use defined- ở ô spacing chỉnh khoảng cách.dùng lệnh explode phá khố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
cam ơn bạn đã trả lời nhưng mà làm như bạn làm sao mà sửa text trong block được?

Hoàn toàn có thể sửa text trong Block được.

bạn có thể sửa block bằng cách lick 2 lần vào block

Ý của bạn Transu là sử dụng lệnh _refedit để sửa đấy 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

chào các bác,em có viết một lệnh để cố định giá trj của dim ,nhưng nó chạy tập tè lắm nên em nhờ các bác sửa hộ cái.cái lisp nhw thế này:

(defun c:convert (/ _ss _sslength _i _data _oldvalue _newvalue)

(setq _ss (ssget '((0 . "dimension"))));

(setq _sslength (sslength _ss))

(setq _i 0)

(repeat _sslength

(setq _data (entget (ssname _ss _i)))

(setq _oldvalue (assoc 1 _data))

(setq _newvalue (cdr (assoc 42 _data)))

(if (= (CDR _oldvalue) "<>") ;check gia tri da bi mod chua

(PROGN

(setq _data (subst (cons 1 (rtos _newvalue)) _oldvalue _data))

(entmod _data)

)

)

(setq _i (1+ _i))

)

)

;lệnh lúc chạy lúc không,em không biết có phải viết nhầm chủ đề không,các bác thông cả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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×