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ị

Mình muốn bắt dính vào một điểm, nó không vẽ đến đó mà chạy đi đâu mất tăm!

Nếu có điểm để bắt thì dùng luôn lệnh line chứ dùng lk làm gì nữa ssg :bigsmile:

 

Lệnh này chủ yếu giúp cho người vẽ đỡ phải nhân chia, cảm ơn ssg!

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 đơn giản vậy, không riêng gì lệnh line, còn các lệnh khác thì sao? Nhất là các lệnh trong nhóm modify, như stretch chẳng hạn, rất khó xử lý. Đã làm thì phải triệt để, không thể nửa vời được.

Chiều ý các bạn, mình đã làm thử 1 đoạn sau, chỉ riêng cho lệnh line. Khi bạn dùng chuột định hướng và nhập số thì không có vấn đề gì, nhưng khi sử dụng object snap bạn sẽ thấy nó thế nào ấy. Mình muốn bắt dính vào một điểm, nó không vẽ đến đó mà chạy đi đâu mất tăm! Nói thật tình, mình không mê lập các chương trình loại này, và vẫn khuyến khích các bạn luôn luôn vẽ đúng kích thước thật và dùng layout để trình bày.

 

(defun C:LK( / k p1 p2 a L oldos);;;Line command with scale factor k
(if (not scf) (setq scf 1.0))
(setq k (getreal (strcat "\nScale factor <" (rtos scf) ">:" )))
(if (not k) (setq k scf) (setq scf k))
(setq p1 (getpoint "\nFrom point:"))
(setq oldos (getvar "osmode"))
(while (setq p2 (getpoint p1 "\nNext point:"))
(setq
	a (angle p1 p2)
	L (* k (distance p1 p2))
	p2 (polar p1 a L)
)
(setvar "osmode" 0)
(command "line" p1 p2 "")
(setvar "osmode" oldos)
(setq p1 p2)
)
)

thanks bác Ssg về đoạn lisp này

đúng như bác nói thì khi sdụng lisp này thì phải lăn tăn mình đang ở tỉ lệ nào thật vì đoạn lisp này bắt ta nhập scale factor khi vẽ. vấn đề mình muốn hỏi là:bác có thể chỉnh lại lisp trên để khi mình đang ở tỷ lệ hiện hành thì lisp sẽ tự động scale mà không phai nhập scale factor khong?

yêu cầu có lẽ hơi khó. mong bác cho mấy đàn em được nở mày nở mặt. hi` hì.

chúc bác thành công!

Mình đồng ý với quan điểm của bác pooh_21. nếu có lện này thì người dùng khỏi phải tính toán khi vẽ và không quan trọng mình đang ở tỷ lệ nào. Ví dụ Dim hiện hành là 25 thì tự động nhân 4, dim 20 thì nhân 5, dim 50 thì nhân 2.... vì khi mình khai dimension style mình đã nhập hệ số scale factor rù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
thanks bác Ssg về đoạn lisp này

đúng như bác nói thì khi sdụng phải lăn tăn mình đang ở tỉ lệ nào thật

"- Giả sử có được chương trình theo yêu cầu, khi sử dụng cũng chẳng sướng ích gì vì cứ phải “lăn tăn” trong đầu là mình đang ở tỷ lệ nào?"

bác có thể chỉnh lại để khi mình đang ở tỷ lệ hiện hành thì lisp sẽ tự động scale mà không phai nhập scale factor khong?

yêu cầu có lẽ hơi khó. mong bác cho mấy đàn em được nở mày nở mặt. hi` hì. chúc bác thành công

Nếu các bạn cảm thấy dùng được theo kiểu của lệnh LK trên thì mình sẽ bổ sung thêm chút nữa. Có mấy điều cần hỏi lại:

1) "Tỷ lệ hiện hành" theo ý bạn là gì? Có phải căn cứ vào "Overall Scale" của Dimstyle hiện hành không?

2) Ngoài line, có thể thêm vài lệnh thường dùng nữa trong nhóm Draw và Modify: Line, Circle, Rectangle, Copy, Move, Scale, và... gì nữa? Nói chung là giới hạn thôi chứ không làm hết được.

 

P/S:

Sorry, đọc lại bài trên của bạn thì hệ số tỷ lệ k = 1/Scale Factor ở tab Primary Unit. Đúng 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
Nếu các bạn cảm thấy dùng được theo kiểu của lệnh LK trên thì mình sẽ bổ sung thêm chút nữa. Có mấy điều cần hỏi lại:

1) "Tỷ lệ hiện hành" theo ý bạn là gì? Có phải căn cứ vào "Overall Scale" của Dimstyle hiện hành không?

2) Ngoài line, có thể thêm vài lệnh thường dùng nữa trong nhóm Draw và Modify: Line, Circle, Rectangle, Copy, Move, Scale, và... gì nữa? Nói chung là giới hạn thôi chứ không làm hết được.

trước hết mình xin chân thành cám ơn và Hoan hô sự nhiệt tình của ssg.

nếu được bác có thể bổ sung thêm cái offset nữa

Như mình đã nói thì mình cũng chưa rành lắm về cad do vây bản vẽ của mình chỉ vẽ trên model. khi mình vẽ thì thường tạo các kiểu Dimstyle như 100, 25, 20, 10 để ghi cho các hình khác nhau. (mặt bằng 1/100, chi tiết 1/25, 1/20...)

Ví dụ khi mình khởi tạo 1 bve bằng MVSETUP với scale factor 1/100

sau đó tạo kiểu dim25 thì mình chọn Scale factor = 0.25 , 20 thì Scale factor = 0.25 trong thẻ Primary . còn cái "UnitsOverall Scale" thì không đụng tớ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
Nếu các bạn cảm thấy dùng được theo kiểu của lệnh LK trên thì mình sẽ bổ sung thêm chút nữa...

Tất cả có 6 lệnh: Line, Circle, Rectangle, Copy, Move, Offset. Có lẽ cũng đủ dùng cho các thao tác cơ bản?

Xin lưu ý các dòng nhắc nhở ở đầu chương trình. Tác giả vẫn bảo lưu quan điểm và mong rằng đến một lúc nào đó sẽ không còn ai cần đến chuơng trình này nữa!

 


;;;**************************************************************************
;;;WARNING:
;;;This program simulate some AutoCAD commands but all 
;;;parameters are enlarged by scale K = 1/ Dimscale Factor
;;;Use in necessary cases only. DO NOT MISUSE !!!
;;;Written by ssg - www.cadviet.com - November, 2007
;;;**************************************************************************


;;;---------------------------------------------------------------------------------------
(defun PreScale(action / dsf) ;;;Get dimscale factor and osmode variable
(setq dsf (getvar "dimlfac"))
(setq k (/ 1 dsf))
(prompt (strcat "\n" action "\tDimscale factor=" (rtos dsf) "\tEnlarge scale=" (rtos k)))
(setq oldos (getvar "osmode"))
)
;;;================================================
(defun C:LK( / k oldos p1 p2 a L) ;;;Line command with scale k
(PreScale "LineK")
(setq p1 (getpoint "\nFirst point:"))
(while (setq p2 (getpoint p1 "\nNext point:"))
   (setq
       a (angle p1 p2)
       L (* k (distance p1 p2))
       p2 (polar p1 a L)
   )
   (setvar "osmode" 0)
   (command "line" p1 p2 "")
   (setvar "osmode" oldos)
   (setq p1 p2)
)
(princ)
)
;;;================================================
(defun C:CIK( / k oldos p1 r) ;;;Draw circle with scale k
(PreScale "CircleK")
(setq
   p1 (getpoint "\nCenter point:")
   r (* k (getdist p1 "\nRadius:"))
)
(setvar "osmode" 0)
(command "circle" p1 r)
(setvar "osmode" oldos)
(princ)
)
;;;================================================
(defun C:RK( / k oldos w h p1 p2) ;;;Draw rectangle with scale k
(PreScale "RectangK")
(setq
   w (getreal "\nWidth:")
   h (getreal "\nHeight:")
   p1 (getpoint "\nBase point:")
   p2 (list (+ (car p1) (* k w)) (+ (cadr p1) (* k h)))
)
(setvar "osmode" 0)
(command "rectangle" p1 p2)
(setvar "osmode" oldos)
(princ)
)

;;;================================================
(defun C:CK( / k oldos ss p1 p2 a L) ;;;Copy command with scale k
(PreScale "CopyK")
(setq
   ss (ssget)
   p1 (getpoint "\nBase point:")
   p2 (getpoint p1 "\nSecond point:")
   a (angle p1 p2)
   L (* k (distance p1 p2))
   p2 (polar p1 a L)
)
(setvar "osmode" 0)
(command "copy" ss "" p1 p2)
(setvar "osmode" oldos)
(princ)
)
;;;================================================
(defun C:MK( / k oldos ss p1 p2 a L) ;;;Move command with scale k
(PreScale "MoveK")
(setq
   ss (ssget)
   p1 (getpoint "\nBase point:")
   p2 (getpoint p1 "\nSecond point:")
   a (angle p1 p2)
   L (* k (distance p1 p2))
   p2 (polar p1 a L)
)
(setvar "osmode" 0)
(command "move" ss "" p1 p2)
(setvar "osmode" oldos)
(princ)
)
;;;================================================
(defun C:OK( / k oldos ko) ;;;Offset command with scale k
(PreScale "OffsetK")
(if (not ofd) (setq ofd 10))
(setq ko (getreal (strcat "\nOffset distance <" (rtos ofd) ">:")))
(if (not ko) (setq ko ofd) (setq ofd ko))
(command "offset" (* k ko) pause)
(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
Tất cả có 6 lệnh: Line, Circle, Rectangle, Copy, Move, Offset. Có lẽ cũng đủ dùng cho các thao tác cơ bản?

Xin lưu ý các dòng nhắc nhở ở đầu chương trình. Tác giả vẫn bảo lưu quan điểm và mong rằng đến một lúc nào đó sẽ không còn ai cần đến chuơng trình này nữa!

 


;;;**************************************************************************
;;;WARNING:
;;;This program simulate some AutoCAD commands but all 
;;;parameters are enlarged by scale K = 1/ Dimscale Factor
;;;Use in necessary cases only. DO NOT MISUSE !!!
;;;Written by ssg - www.cadviet.com - November, 2007
;;;**************************************************************************

 

Biết nói gì nhĩ. Tuyệt các bác ạ

Mình sẽ cố gắng để đến một lúc không còn cần chương trình này. nhưng Hiện tại thì thấy hay và cần thiết.

Mấy bác dùng thử rồi cho ý kiến. Thanks Ssg

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

@ssg lệnh trên đang thiếu tính năng đặt lại tỉ lệ scale, hiện tại khi chọn tỉ lệ lần đầu thì lần sau bật lại vẫn tiếp tục tỉ lệ đó :bigsmile:

 

Phiền ssg cho thêm một lệnh ví dụ tl (tỉ lệ) để thay đổi tỉ lệ vẽ cho các lệnh lk, ck, ... 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
@ssg lệnh trên đang thiếu tính năng đặt lại tỉ lệ scale, hiện tại khi chọn tỉ lệ lần đầu thì lần sau bật lại vẫn tiếp tục tỉ lệ đó :bigsmile:

 

Phiền ssg cho thêm một lệnh ví dụ tl (tỉ lệ) để thay đổi tỉ lệ vẽ cho các lệnh lk, ck, ... Thanks!

Không có gì khó khăn. Nhưng đã thống nhất dùng K = 1/ Dimscale Factor rồi mà? Khi bạn thay đổi dimstyle hiện hành thì K tự động đổi theo. Thêm tùy chọn chủ động thiết lập k không hay đâu. Lại phải "lăn tăn trong đầu là mình đang ở tỷ lệ nà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

Cái này hay nhưng sao mọi nguwowig không cho ý kiến nhĩ. Phiền Bác Ssg có thể bổ sung thêm cái stretch đượ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
Cái này hay nhưng sao mọi nguwowig không cho ý kiến nhĩ. Phiền Bác Ssg có thể bổ sung thêm cái stretch được không?

Mình đã nói từ trước rồi. Cái "thằng" stretch này "khó chơi" lắm, chưa nghĩ ra cách 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
Mình đã nói từ trước rồi. Cái "thằng" stretch này "khó chơi" lắm, chưa nghĩ ra cách gì!

 

Ừm ! Đúng đó pà con. Cái này đối tượng chon không giống như mấy cái kia thôi tha cho bác ssg đi.

Mình dùng copy để lấy điểm chuẩn rối s bình thường cũng được. Khà khà :bigsmile:

  • 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
Mình đã nói từ trước rồi. Cái "thằng" stretch này "khó chơi" lắm, chưa nghĩ ra cách gì!

Có cách rồi, chưa giống lắm nhưng xài được:

 


;;;**************************************************************************
;;;WARNING:
;;;This program simulate some AutoCAD commands but all 
;;;parameters are enlarged by scale K = 1/ Dimscale Factor
;;;Use in necessary cases only. DO NOT MISUSE !!!
;;;Written by ssg - www.cadviet.com - November, 2007
;;;**************************************************************************


;;;---------------------------------------------------------------------------------------
(defun PreScale(action / dsf) ;;;Get dimscale factor and osmode variable
(setq dsf (getvar "dimlfac"))
(setq k (/ 1 dsf))
(prompt (strcat "\n" action "\tDimscale factor=" (rtos dsf) "\tEnlarge scale=" (rtos k)))
(setq oldos (getvar "osmode"))
)
;;;================================================
(defun C:LK( / k oldos p1 p2 a L) ;;;Line command with scale k
(PreScale "LineK")
(setq p1 (getpoint "\nFirst point:"))
(while (setq p2 (getpoint p1 "\nNext point:"))
   (setq
       a (angle p1 p2)
       L (* k (distance p1 p2))
       p2 (polar p1 a L)
   )
   (setvar "osmode" 0)
   (command "line" p1 p2 "")
   (setvar "osmode" oldos)
   (setq p1 p2)
)
(princ)
)
;;;================================================
(defun C:CIK( / k oldos p1 r) ;;;Draw circle with scale k
(PreScale "CircleK")
(setq
   p1 (getpoint "\nCenter point:")
   r (* k (getdist p1 "\nRadius:"))
)
(setvar "osmode" 0)
(command "circle" p1 r)
(setvar "osmode" oldos)
(princ)
)
;;;================================================
(defun C:RK( / k oldos w h p1 p2) ;;;Draw rectangle with scale k
(PreScale "RectangK")
(setq
   w (getreal "\nWidth:")
   h (getreal "\nHeight:")
   p1 (getpoint "\nBase point:")
   p2 (list (+ (car p1) (* k w)) (+ (cadr p1) (* k h)))
)
(setvar "osmode" 0)
(command "rectangle" p1 p2)
(setvar "osmode" oldos)
(princ)
)

;;;================================================
(defun C:CK( / k oldos ss p1 p2 a L) ;;;Copy command with scale k
(PreScale "CopyK")
(setq
   ss (ssget)
   p1 (getpoint "\nBase point:")
   p2 (getpoint p1 "\nSecond point:")
   a (angle p1 p2)
   L (* k (distance p1 p2))
   p2 (polar p1 a L)
)
(setvar "osmode" 0)
(command "copy" ss "" p1 p2)
(setvar "osmode" oldos)
(princ)
)
;;;================================================
(defun C:MK( / k oldos ss p1 p2 a L) ;;;Move command with scale k
(PreScale "MoveK")
(setq
   ss (ssget)
   p1 (getpoint "\nBase point:")
   p2 (getpoint p1 "\nSecond point:")
   a (angle p1 p2)
   L (* k (distance p1 p2))
   p2 (polar p1 a L)
)
(setvar "osmode" 0)
(command "move" ss "" p1 p2)
(setvar "osmode" oldos)
(princ)
)
;;;================================================
(defun C:OK( / k oldos ko) ;;;Offset command with scale k
(PreScale "OffsetK")
(if (not ofd) (setq ofd 10))
(setq ko (getreal (strcat "\nOffset distance <" (rtos ofd) ">:")))
(if (not ko) (setq ko ofd) (setq ofd ko))
(command "offset" (* k ko) pause)
(princ)
)
;;;================================================
(defun C:SK( / p1 p2 ss e p3 p4 a L) ;;;Stretch command with scale k
(PreScale "StretchK")
(setvar "osmode" 0)
(setq
   p1 (getpoint "\nSpecify crossing-window... \tFirst corner:")
   p2 (getcorner p1 "\nOpposite corner:")
)
(setvar "osmode" oldos)
(setq ss (ssget "c" p1 p2))
(while (setq e (ssname ss 0)) (redraw e 3) (ssdel e ss))
(setq
   p3 (getpoint "\nBase point:")
   p4 (getpoint p3 "\nSecond point:")
   a (angle p3 p4)
   L (* k (distance p3 p4))
   p4 (polar p3 a L)
)
(setvar "osmode" 0)
(command "stretch" "c" p1 p2 "" p3 p4)
(setvar "osmode" oldos)
(princ)
)
;;;================================================

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

Cho mình xin lisp thay đổi giá trị biến overall scale khi chọn dimmension , và 1 lisp nữa là hiển thị giá trị overall scale khi chọn dim, mong các bác chỉ 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
Có cách rồi, chưa giống lắm nhưng xài được:

đúng rồi, xài được nhưng chư giống lắm

Vẫn còn khó dùng.

Thương cho trót luôn bác ssg a`. bác cố gắng làm cho giống mấy thằng LK, MK... thì hay quá

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

Cho mình xin lisp thay đổi giá trị biến overall scale khi chọn dimmension , và 1 lisp nữa là hiển thị giá trị overall scale khi chọn dim, mong các bác chỉ 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

SAO KHÔNG AI TRẢ LỜI EM THẾ.......

 

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:

- Nhập chiều dài phuong L1.

- Nhập chiều dài theo phương L2.

- Nhập số nhịp theo L1

- Nhập số nhịp theo L2

=> Cái này để hình thành sơ bộ mặt bằng thôi.

Nếu cần anh hảy phát triển nó lên như sau:

Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.

Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.

Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

 

Em xin cám ơn anh rất nhiều.

 

:) :bigsmile:

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
SAO KHÔNG AI TRẢ LỜI EM THẾ.......

 

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:

- Nhập chiều dài phuong L1.

- Nhập chiều dài theo phương L2.

- Nhập số nhịp theo L1

- Nhập số nhịp theo L2

=> Cái này để hình thành sơ bộ mặt bằng thôi.

Nếu cần anh hảy phát triển nó lên như sau:

Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.

Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.

Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

 

Em xin cám ơn anh rất nhiều.

 

:) :bigsmile:

 

Chú này lười quá. Là dân kỹ thuật thì phải chăm chỉ lên chứ.

Bác Hòanh mà làm vụ này là làm hư em đó.

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 đã nói từ trước rồi. Cái "thằng" stretch này "khó chơi" lắm, chưa nghĩ ra cách gì!

À hay là bác ssg xem thèn mstrech của essprest í . Có khi đi theo hướng đó để chọn đối tượng là ok mà !

  • 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
SAO KHÔNG AI TRẢ LỜI EM THẾ.......

 

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:

- Nhập chiều dài phuong L1.

- Nhập chiều dài theo phương L2.

- Nhập số nhịp theo L1

- Nhập số nhịp theo L2

=> Cái này để hình thành sơ bộ mặt bằng thôi.

Nếu cần anh hảy phát triển nó lên như sau:

Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.

Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.

Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

 

Em xin cám ơn anh rất nhiều.

 

:) :bigsmile:

 

BẠn dùng cái này xem sao?

lệnh là LC

 

;VE LUOI COT
(defun c:LC ()
(setq om (getvar "osmode"))
(setvar "osmode" 0)
(setq tile (getreal "\nCho biet Ti Le ve 1/x, x="))
(setq p0 (getpoint "\n Chon Basic Point:"))
(setq nc (getreal "\n Nhap chieu ngang cua cot : "))
(setq dc (getreal "\n Nhap chieu doc cua cot : "))
(setq p1 	(polar 	(polar p0 pi (/ (* nc hstl) 2 tile) )	(* pi 1.5)	(/ (* dc hstl) 2 tile)  )  )
(setq p2 	(polar 	(polar p0 0 (/ (* nc hstl) 2 tile) )	(* pi 0.5)	(/ (* dc hstl) 2 tile)  )  )
(command "rectang" p1 p2)
(command "hatch" "solid" "l" "")
(setq bcn (getreal "\n Buoc cot theo phuong ngang : "))
(setq nn (getint "\n So buoc cot phuong ngang : "))
(setq w1 	(polar 	(polar p1 pi (/ (* nc hstl) 2 tile) )	(* pi 1.5)	(/ (* dc hstl) 2 tile)  )  )
(setq w2 	(polar 	(polar p2 0 (/ (* nc hstl) 2 tile) )	(* pi 0.5)	(/ (* dc hstl) 2 tile)  )  )
(command "select" "w" w1 w2 "")
(command "array" "p" "" "r" "1" (+ nn 1) (/ (* bcn hstl) tile) )
(command "line" (polar p0 pi (/ (* 1000 hstl) tile)) (polar p0 0 (/ (* (+ (* bcn nn) 1000) hstl) tile) ) "")
(setq w1 (polar (polar p0 pi (/ (* hstl 2000) tile)) (* pi 1.5)  (/ (* hstl 2000) tile) ))
(setq w2 (polar (polar p0 0 (/ (* (+ (* bcn nn) 2000) hstl) tile) ) (* pi 0.5)  (/ (* hstl 2000) tile) ))
(command "zoom" "w" w1 w2)
(command "select" "w" w1 w2 "")
(setq bcd (getreal "\n Buoc cot theo phuong doc : "))
(setq nd (getint "\n So buoc cot phuong doc : "))
(command "array" "p" "" "r" (+ nd 1) "1" (/ (* hstl bcd) tile) )
(command "line" (polar p0 (* pi 1.5) (/ (* hstl 1000) tile))  (polar p0 (* pi 0.5)  (/ (* (+ (* bcd nd) 1000) hstl) tile))  "")
(command "array" "l" "" "r" "1" (+ nn 1) (/ (* hstl bcn) tile) )
(setq w2 (polar w2 (* pi 0.5) (/ (* (+ (* bcd nd) 2000) hstl) tile))  )  
(command "zoom" "w" w1 w2)
(setvar "osmode" om)

)

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 nào có thể cho em xin một lisp vẽ cầu thang không?

nhập góc nghiêng (độ), Số bậc ( hay chiều rộng bậc) thì tự 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
Bác nào có thể cho em xin một lisp vẽ cầu thang không?

nhập góc nghiêng (độ), Số bậc ( hay chiều rộng bậc) thì tự vẽ

Uhm đúng òi ....em cũng đang cần cái này.....Anh nào cho em vớ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ạn có thể post yêu cầu về autolisp ở topic này.

Bác Hoành có thể giúp em một lisp đếm tất cả các hình tròn và hình lục giác trong bản vẽ.

Lisp có 2 lệnh : 1/ đếm hình tròn, 2/ đếm hình lục giác.

Khi nhập lệnh 1 hoặc 2 thì yêu cầu nhập R (Đối với hình lục giác R là Bk đường tròn ngoại tiếp)

(nếu được thì có thêm phần mở rộng là : khi đếm xong, yêu cầu pick điểm chèn, chọn điểm chèn sẽ có một text ghi số hình vừa đếm = số)

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 có thể giúp em một lisp đếm tất cả các hình tròn và hình lục giác trong bản vẽ.

Lisp có 2 lệnh : 1/ đếm hình tròn, 2/ đếm hình lục giác.

Khi nhập lệnh 1 hoặc 2 thì yêu cầu nhập R (Đối với hình lục giác R là Bk đường tròn ngoại tiếp)

(nếu được thì có thêm phần mở rộng là : khi đếm xong, yêu cầu pick điểm chèn, chọn điểm chèn sẽ có một text ghi số hình vừa đếm = số)

Cám ơn

 

Theo tôi đếm hình tròn thì dể thôi nhưng phần lục giác thì hơi khó không biết bác nguyenhoanh có cao kiến gì 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

trong khi chờ dợi tôi tặng bác để đếm hình tròn này

Lệnh: cht

Không gỏ bán kính mà là chọn 1 CIRCLE làm chuẩn

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;;;;;;;;;

 

(Defun c:cht ( )

(prompt "\nChon Circle mau.")

(setq DT (car (entsel)))

(setq DT (entget DT))

(setq STNAME (cdr (assoc 40 DT)))

 

(Princ "\nHay chon vung :")

(setq SS (ssget (list (cons 0 "CIRCLE")

(cons 40 STNAME)

)

)

)

 

(if (Null ss)

(princ "\nKhong tim thay doi tuong nao")

)

(IF (/= NIL SS) (PROGN

(setq Sl (SSLength SS))

(princ (strcat "\nTim thay: <" (itoa sl) "> doi tuong"))

)

)

(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

Cái này hơi khó vì không có đối tượng POLYGON mà chỉ là một đường LWPOLYLINE (0 . "LWPOLYLINE"), có 6 nét (90 . 6) và đường kín (70 . 1).

Và đi kèm là các tọa độ....

Vậy nên vẫn làm được nhưng mà hơi dài dòng một chú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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×