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ị

Command: ap APPLOAD DonKT.VLX successfully loaded.
Command:
HLisp da tai len thanh cong!
Command:
Command:
Command: DonKt
Unknown command "DONKT".  Press F1 for help.

 

Mình đã thử nhiều lần nhưng lisp Donkt vẫn không dùng được, không hiểu tại sao (hiện mình đang dùng cad 2007). NguyenHoanh xem lại giúp mình nhé!

Sorry, tên lệnh là DKTN chứ không phải là DONKT.

 

Cảm ơn bạn rất nhiều vì đã chỉ ra sai sót này. Lisp này post lên đã lâu, nhưng không ai phản hồi ý kiến cả.

  • 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ác Hoàng ơi cho hỏi hinh như lisp danh cốt có vấn đề trục trặc hay sao mà minh sư dụng cho kết quả không đúng, mình vẽ các đường thẳng cho trước cách nhau một khoảng nào đó (300,500, 800, 1000 mm). cho cốt 00 là đường 1 thì ba đường tiếp theo khi đánh cốt sẽ có kết quả -0.00, đường 4 có kết quả -1.00 (chế độ bắt điêm endpoint)

nhưng nếu dánh cốt o diem lân cận đường thẳng đó lại cho kết quả khác, và khi đánh cốt liên tục theo phương đứng thì giá trị lúc tăng lúc giảm không theo quy luật.

Không rõ câu hỏi của bạn.

 

bạn đã biết cách dùng lệnh đánh cốt chưa?

bạn muốn lệnh đánh cốt sau khi hiệu chỉnh sẽ như thế 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
Bạn có thể post yêu cầu về autolisp ở topic này.

trước đây mình có một lisp khá hay, nhưng máy bị virus nên mất hết

bÁC Hoành có thể viết giúp mình 1 lisp như sau được không?

1.coppy theo tỉ lệ hiện hành

2. dời theo tỉ lệ hiện hành

3. vẽ đương line có chiều dài theo tỉ lệ hiện hành

....

ví dụ ti lệ BV là 1/100. các mặt cắt 1/25

khi đang ở tl1/25 thi vẽ đường line dài 1000 sẽ tự động nhân lên 4 lần (1/25)

coppy và move tương tự

 

nói hơi lủng củng ko biết bác có hiểu hết nội dung ko

Cam ơn bác trươc nha

: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 lâu vậy bác Hoành ?

ra tay nào , ra tay nào , ra tay nào . Nào mình cùngg ra tay ..... ZI`NZIN !

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ước đây mình có một lisp khá hay, nhưng máy bị virus nên mất hết

bÁC Hoành có thể viết giúp mình 1 lisp như sau được không?

1.coppy theo tỉ lệ hiện hành

2. dời theo tỉ lệ hiện hành

3. vẽ đương line có chiều dài theo tỉ lệ hiện hành

....

ví dụ ti lệ BV là 1/100. các mặt cắt 1/25

khi đang ở tl1/25 thi vẽ đường line dài 1000 sẽ tự động nhân lên 4 lần (1/25)

coppy và move tương tự

 

nói hơi lủng củng ko biết bác có hiểu hết nội dung ko

Cam ơn bác trươc nha

:bigsmile:

 

 

Chẳng hiểu bác này muốn gì luôn. Bác nói rõ lại yêu cầu đ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
Không rõ câu hỏi của bạn.

 

bạn đã biết cách dùng lệnh đánh cốt chưa?

bạn muốn lệnh đánh cốt sau khi hiệu chỉnh sẽ như thế nào?

 

Mình đã biết sữ dụng rồi nhưng vì mình muốn thay đổi phần ký hiệu ghi cao độ nên mình ghép thêm vào đó một đoạn lisp nữa để nó tự tạo ra ký hiệu đó mà không phải chep ký hiệu cao độ vào bản vẽ.

 

Mình đã kiểm tra lại rồi, do quá trinh sao chép mình đã vô ý sử đi cái gì đó nên nó cho kết quả sai.

 

Mình muốn hỏi là nếu muốn lựa chọn số thập phân thì phài làm như thế nào, trong lisp đó kết quả cho 3 số thập phân (tức độ chính xác tới mm) nay mình muốn có 2 số thập phân thôi thì làm thế nào? tốt nhất là xuất hiện lên màn hình lựa chọn "so thap phan"

nêu nhập 2 thi kết qua co dạng +2.23

nếu nhâp 3 thì kết quả có dang +2.230

cam on rat nhieu.

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 đã kiểm tra lại rồi, do quá trinh sao chép mình đã vô ý sử đi cái gì đó nên nó cho kết quả sai.

Mình muốn hỏi là nếu muốn lựa chọn số thập phân thì phài làm như thế nào, trong lisp đó kết quả cho 3 số thập phân (tức độ chính xác tới mm) nay mình muốn có 2 số thập phân thôi thì làm thế nào? tốt nhất là xuất hiện lên màn hình lựa chọn "so thap phan"

nêu nhập 2 thi kết qua co dạng +2.23

nếu nhâp 3 thì kết quả có dang +2.230

cam on rat nhieu.

 

bạn tham khảo dòng sau

(setq xmm (rtos xm 2 4))

Trong đó xmm là kết quả thu được; xm là dử liệu nhập vào; số bốn 4 là "số thập phân" phía sau dấu phẩy

Hiện giờ trong đoạn lisp đánh cot tự động nó là 3 bạn chỉ cần sửa lại (chú ý tìm dòng chứa hàm rtos)

hoặc bạn bùa chú thêm 1 biến và gán cho giá trị này là ok.

  • 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 tham khảo dòng sau

(setq xmm (rtos xm 2 4))

Trong đó xmm là kết quả thu được; xm là dử liệu nhập vào; số bốn 4 là "số thập phân" phía sau dấu phẩy

Hiện giờ trong đoạn lisp đánh cot tự động nó là 3 bạn chỉ cần sửa lại (chú ý tìm dòng chứa hàm rtos)

hoặc bạn bùa chú thêm 1 biến và gán cho giá trị này là ok.

 

(defun c:cot00 ()
 (setq Cot00 (cadr (getpoint "\nDiem co cot 0.000: ")))
 (princ)
)
(defun c:dcot (/ diem caodo dau giatri dodaichuoi)
 (if (not cot00)
(progn
  (alert "chua co cot 0.000")
  (c:cot00)
)
 )
 (grdraw (list	(+ (car (getvar "VIEWCTR")) (* -1.0 (getvar "VIEWSIZE")))
	cot00
  )
  (list	(+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	cot00
  )
  1
  1
 )
 (setq
diem   (getpoint "\nVao diem can danh cot: ")
caodo  (- (cadr diem) cot00)
dau	   (cond
	 ((equal caodo 0.0 0.01) "%%p")
	 ((> caodo 0.0) "+")
	 (t "-")
   )
giatri (rtos caodo 2 0)
 )
 (if (= "-" (substr giatri 1 1))
(setq giatri (substr giatri 2))
 )
 (while (< (strlen giatri) 4)
(setq giatri (strcat "0" giatri))
 )
 (setq	dodaichuoi (strlen giatri)
giatri	   (strcat (substr giatri 1 (- dodaichuoi 3))
		   "."
		   (substr giatri (- dodaichuoi 2))
	   )
 )
;  (command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)
 (redraw)

 

khong thay dong do ban a, minh them dong do xuong duoi thi bi loi.

 

lisp minh sua lai nhu sau.(khong phai chep ky hieu cao đo vao) nhung minhkhong biet cach chinh sư de lua chon 2 so thap phan, cam on rat nhieu.

 

;;;;;;;;;;;;;;; danh cot
(defun c:cot00 ()
 (setq Cot00 (cadr (getpoint "\nDiem co cot 0.000: ")))
 (princ)
)
(defun c:dcot (/ diem caodo dau giatri dodaichuoi)
 (if (not cot00)
(progn
  (alert "chua co cot 0.000")
  (c:cot00)
)
 )
 (grdraw (list	(+ (car (getvar "VIEWCTR")) (* -1.0 (getvar "VIEWSIZE")))
	cot00
  )
  (list	(+ (car (getvar "VIEWCTR")) (* 1.0 (getvar "VIEWSIZE")))
	cot00
  )
  1
  1
 )
 (setq
diem   (getpoint "\nVao diem can danh cot: ")
caodo  (- (cadr diem) cot00)
dau	   (cond
	 ((equal caodo 0.0 0.01) "%%p")
	 ((> caodo 0.0) "+")
	 (t "-")
   )
giatri (rtos caodo 2 0)
 )
 (if (= "-" (substr giatri 1 1))
(setq giatri (substr giatri 2))
 )
 (while (< (strlen giatri) 4)
(setq giatri (strcat "0" giatri))
 )
 (setq	dodaichuoi (strlen giatri)
giatri	   (strcat (substr giatri 1 (- dodaichuoi 3))
		   "."
		   (substr giatri (- dodaichuoi 2))
	   )
 )
;  (command ".insert" "danhcot" diem 100.0 100.0 0.0 dau giatri)
 (redraw)
(setq a dau)
(setq b giatri)
(setq diemct diem)
(setq textct (strcat a :bigsmile:)
)
(DEFUN C:DC (/ CMD PT1 PT2 PT3 PT4 PT5 PT6 PT7 PT8 NPI TX DX DY TL OSM OLL CRST RSIZE TSIZE STR PRMT FCH NBC OLDERR)
(c:dcot)

 (setq old_osmode (getvar "osmode") old_autosnap (getvar "autosnap");luu lai bien hien tai;;;;;;;;;;;;;;
)
(command "layer" "m" "ghichu" "c" "150" """")
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ NBC (GETVAR "CLAYER"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(setq PT1 diemct)
(setq TX textct)
(SETQ FCH (SUBSTR TX 1 1))
(IF (= FCH "@") (SETQ TX (STRCAT "%%P" (SUBSTR TX 2 (- (STRLEN TX) 1)))))
(SETQ CRST (GETVAR "TEXTSTYLE"))
(SETQ RSIZE (CDR (ASSOC 40 (TBLSEARCH "STYLE" CRST))))
(SETQ TSIZE (GETVAR "TEXTSIZE"))
(SETQ STR (RTOS TSIZE 2))
(SETQ PRMT (STRCAT "\nTy Le Ban Ve <" STR ">:"))
(IF (= RSIZE 0)
 (PROGN
(INITGET 4)
(SETQ TSIZE (GETREAL PRMT))
(IF (= TSIZE NIL) (SETQ TSIZE (GETVAR "TEXTSIZE"))
		  (SETVAR "TEXTSIZE" TSIZE))
		  (SETQ TSIZE (* 2.5 TSIZE))
 )
)
(PRINC)
(SETQ TL (* 2.5 (/ (GETVAR "TEXTSIZE") 2)))
(SETVAR "OSMODE" 0)
(SETQ DX (CAAR (CDR (TEXTBOX (LIST (CONS 1 TX))))))
(SETQ NPI (/ PI 2))
(SETQ PT4 (POLAR PT1 NPI (* 1 TL)))
(SETQ PT2 (POLAR PT4 PI (* 2 TL)))
(SETQ PT3 (POLAR PT4 0 (* 7.3 TL)));DIEM NGOAI DONG TEXT
(SETQ PT5 (POLAR PT4 NPI (* 3 TL)))
(SETQ PT6 (POLAR PT2 NPI  TL))
(SETQ PT7 (POLAR PT6 0 (+ (* 3.7 TL) DX)))
(SETQ PT8 (POLAR PT4 NPI (* 0.5 TL)))
(SETQ PT8 (POLAR PT8 0 (* 0.5 TL)))
(SETQ PT9 (POLAR PT1 pi (* 2 TL)));DIEM TRAI DUOI
(SETQ PT10 (POLAR PT1 0 (* 2 TL))); DIEM PHAI DUOI

(COMMAND "COLOR" "84" "")
(COMMAND "STYLE" "HH 5.0"  "vni-helve-condense" "" "" "" "" "")
(IF (= RSIZE 0)(COMMAND "TEXT" PT8 TSIZE 0 tX) (COMMAND "TEXT" PT8 0 TX))
(COMMAND "COLOR" "7" "")
(COMMAND "pLINE" PT3 "Width" "0.005" "" PT2 PT1 "Width" "0.15" "" PT9 PT10 PT1 "Width" "0.005" "" PT5  "")
(COMMAND "COLOR" "254" "")
(COMMAND "SOLID" PT1 PT2 PT4 "" "")
(SETVAR "CLAYER" "0")
(if old_osmode (setvar "osmode" old_osmode))
(if old_autosnap (setvar "autosnap" old_autosnap)); goi lai snap cu
)

Chỉnh sửa theo tvduc

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ó tay rồi bạn. tác giả đoạn lisp này dủng thủ thuật khác tôi (dùng hàm substr) mà hàm này tôi vẩn đang mò nên không giúp bạn được. Tôi post cho bạn 1 lisp tương tự ngắn hơn cái này nếu bạn muốn chỉnh gì thì tôi còn biết đường mà lần.

 

lệnh : cos

Thao tác : gỏ lệnh cos -> chọn điểm cần đánh cot lisp hỏi bạn chọn có cot 0.000 lúc này chế độ bắt điểm chuyễn về perpendicula là bắt điểm vuông góc bạn bắt vào đường thẳng có cao độ 0.000 ; lisp hỏi tỉ lệvẻ của bạn (hỏi một mét bạn vẻ bằng bao nhiêu) bạn nhập vào là xong.

lần sau thực hiện lệnh cũng y như vậy. nhưng lisp nhớ giá trị một mét mà bạn đã báo nên bạn chỉ cần enter chứ không cần nhập nửa.

 

Bạn có thể chỉnh lisp này cho giống với lisp ban đang có (tôi dùng thế này quen tay rồi nên không chỉnh)

 

 

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

;;;;;;;;;;;;;;;
(Defun C:cos ( )
(COS))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

(Defun cos ( )
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (command "-layer" "new" "THAY-130" "color" "130" "THAY-130" "")
 (setq p0cos (getpoint "\nDiem muon danh cos >>"))  
(luuos)
 (setvar "osmode" 0)
 (command "-layer" "set" "THAY-130" "")
 (command "INSERT" "cos" (list (car p0cos)(cadr p0cos)) 1 1 0)
 (traos)
 (setq x (car p0cos))
 (setq y (cadr p0cos))
(luuos)
 (setvar "osmode" 128)
 (setq pcos (getpoint p0cos "\nPic vao cos 0.00 >>"))
(traos)
 (setq metcos (ndist p0cos "\nMot met ban ve bang bao nhieu "mmetcos))
 (setq  mmetcos metcos)
 (setq a (distance p0cos pcos)) 
 (setq kq (/ a metcos)) 
[color="#FF0000"]  (setq b (rtos kq 2 3)) [/color]
 (setq ang1 (angle pcos p0cos))
 (setq tinhamduong (- (cadr p0cos) (cadr pcos))) 
(Cond
 ((< tinhamduong 0)  (setq ketquavietcos (strcat "-  " :bigsmile:)
)
 ((> tinhamduong 0)  (setq ketquavietcos (strcat "+  " :)) 
)
 ((= tinhamduong 0)  (setq ketquavietcos (strcat "%%p  " :)) 
)
)

 (luuos)
 (setvar "osmode" 0)
 (command "TEXT" (list (- x 250)(+ y 410)) 250 0 ketquavietcos)
 (command ".chprop" "last" "" "la" "THAY-130" "")
 (traos)
 (done)
   (Princ)
)

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

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

;;;;;;;;;;;;;;;;;;;;
;;----------
(defun init ()
 (setq
   DUY_CMD	   (getvar "CMDECHO")
   DUY_OLDERROR *error*
   *error*	   DUY_newerror

 )
 (setvar "CMDECHO" 0)
 (command ".undo" "BE")
)
;;----------
(defun done ()
 (command ".redraw")
 (command ".undo" "E")
 (if DUY_CMD
   (setvar "CMDECHO" DUY_CMD)
 )
 (if DUY_OLDERROR
   (setq *error* DUY_OLDERROR)
 )
 (princ)
)
;;----------
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_THANGXEOHH (getvar "ORTHO")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_THANGXEOHH
   (setvar "ORTHO" DUY_THANGXEOHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)
;---------------------------------------
(defun nstr (stri def)
(princ stri)
(princ "<")
(princ " ")
(princ def)
(princ ">")
(princ ":")
(princ " ")
);defun nstr
;--------------------
(defun nstr1 (stri)
(princ stri)
(princ "<")
(princ "Nhap vao")
(princ ">")
(princ ":")
(princ " ")
);defun nstr1
;---------------------
(defun nint (prompt def / temp)
(if def
 (setq temp (getint (nstr prompt def)))
 (setq def (getint (nstr1 prompt)))
);if def
(if temp
 (setq def temp)
 def
);if temp
);defun nint
;---------------------
(defun dnint (prompt def / temp)
(if def
 (setq temp (getreal (nstr prompt def)))
 (setq def (getreal (nstr1 prompt)))
);if def
(if temp
 (setq def temp)
 def
);if temp
);defun nint
;--------------------
(defun ndist (po prompt def / temp) ;nhan kh/cach va luu gia tri mac dinh
(if def
 (setq temp (getdist po (nstr prompt def)))
 (setq def (getdist po (nstr1 prompt)))
)if def
(if temp
   (setq def temp)
   def
);if temp
);defun ndist
;-----------------------------------






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ó thể bài viết này làm một số bạn không hài lòng. Tuy nhiên, để diễn đàn AutoLisp&VBA của chúng ta phát triển tốt và thật sự có chất lượng, ssg buộc phải lên tiếng. Mong các bạn thông cảm.

Mục đích anh Hoành lập topic này có lẽ ai cũng biết rồi, không cần nhắc lại. Tuy nhiên, một yêu cầu đưa ra sẽ khó được đáp ứng nếu như:

 

1) Yêu cầu không rõ ràng

Chương trình lisp thực chất là một công cụ xử lý, được thiết lập trước để phục vụ cho một số mục đích cụ thể nào đó. Mọi quá trình xử lý, từ đơn giản đến phức tạp đều được biểu diễn bằng sơ đồ: Input -> Processing -> Output. Lập trình viên chỉ có thể tạo nên chương trình, khi họ biết đầy đủ và chính xác dữ liệu đầu vào và kết quả đầu ra của quá trình. Mình thấy nhiều bạn có khuynh hướng chỉ đề cập đến cái Tôi Muốn (Output) mà không quan tâm khai báo đầy đủ cái Tôi Có (Input). Bạn phải biết cách diễn đạt để người khác hiểu đúng và đủ ý mình. Nếu thấy khó thì gởi kèm ví dụ minh họa, và ví dụ tốt nhất là file *.dwg

 

2) Yêu cầu không mang tính phổ biến

Cuộc sống đa dạng, đa chiều, ngay cả trong việc sử dụng CAD. Tuy nhiên, nếu yêu cầu của bạn mang tính Public, phù hợp với thói quen và nhu cầu của đa số người dùng CAD, sẽ có tác dụng tạo sự hứng thú cho người lập trình. Bạn đưa ra một yêu cầu lập dị, không ai hiểu nổi mục đích thì rất nhiều khả năng sẽ không có câu trả lời.

 

3) Yêu cầu đã được đề cập đến trên diễn đàn

(cái này khỏi phân tích)

 

Nếu yêu cầu của bạn không rơi vào 1, 2, 3 nói trên nhưng chờ lâu không thấy phản hồi thì có lẽ nó thuộc trường hợp sau:

 

4) Yêu cầu quá khó đối với khả năng của lisp hoặc các lập trình viên lisp CadViet.

 

Mong rằng các bạn hiểu và cẩn trọng hơn khi post yêu cầu ở topic này.

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
lệnh : cos

Thao tác : gỏ lệnh cos -> chọn điểm cần đánh cot lisp hỏi bạn chọn có cot 0.000 lúc này chế độ bắt điểm chuyễn về perpendicula là bắt điểm vuông góc bạn bắt vào đường thẳng có cao độ 0.000 ; lisp hỏi tỉ lệvẻ của bạn (hỏi một mét bạn vẻ bằng bao nhiêu) bạn nhập vào là xong.

lần sau thực hiện lệnh cũng y như vậy. nhưng lisp nhớ giá trị một mét mà bạn đã báo nên bạn chỉ cần enter chứ không cần nhập nửa.

 

Bạn có thể chỉnh lisp này cho giống với lisp ban đang có (tôi dùng thế này quen tay rồi nên không chỉnh)

 

sao khong chay duoc ha ban!

; error: too few arguments

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 khong chay duoc ha ban!

; error: too few arguments

Bạn xem và sửa lại đoạn này như sau:

 

(Cond
 ((< tinhamduong 0)  (setq ketquavietcos (strcat "- " b))
)
 ((> tinhamduong 0)  (setq ketquavietcos (strcat "+ " b)) 
)
 ((= tinhamduong 0)  (setq ketquavietcos (strcat "%%p " b)) 
)
)

Hai ký tự b) kề nhau đã bị hiển thị thành cái... mặt méo! Lỗi này mình đã thấy vài lần trên diễn đàn, không biết admin có cách gì khắc phụ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
Chẳng hiểu bác này muốn gì luôn. Bác nói rõ lại yêu cầu đi...

cám ơn bác vndesperados đã phản hồi

VÍ DỤ như hế này bác vndesperados nhé

toi thiết lập bản vẽ với tỷ lệ ban dầu là 1/100 với hai kiểu ghi kt như sau

Dim100 (scale factor =1)

Dim25 (scale factor =0.25)

61116369sx7.jpg

52854525rr4.jpg

bây giờ tiến hành vẽ một đường line dài 1m ở tỷ lệ 1/100 có nghĩa là

Command: line

LINE Specify first point:

Specify next point or [undo]: 1000

- khi ghi kích thước với dim100 tôi sẽ có chiều dài là 1000

 

bây giờ tôi cũng vẽ đường line đó dài 1m nhưng ở tỷ lệ 1/25 với kiểu dim là dim25

nếu tôi muốn ghi kt kiểu dim25 thì phải vẽ đường line có chiều dài 4000 dùng dim25 thì khi kích thước thì cũng cho ta 1000

 

 

Hỏi: viết 1 lisp

khi đang ở dim25 ta vẽ đường line mà nhập chiều dài 1000 thì nó sẽ tự động dài 4000

mục đích ta khỏi phải tính toán các tỷ lệ khi vẽ.

 

Command: L25 (tên tù ý)

LINE Specify first point:

Specify next point or [undo]: 1000

sẽ cho ta đường line dài 4000

 

Kquả đây.

41068127sz7.jpg

------------------------------------------------

 

khó hiểu quá. các bác thông cảm không biết diễn đạt sao cả. dân mới học lisp

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 vndesperados đã phản hồi

VÍ DỤ như hế này bác vndesperados nhé

toi thiết lập bản vẽ với tỷ lệ ban dầu là 1/100 với hai kiểu ghi kt như sau

Dim100 (scale factor =1)

Dim25 (scale factor =0.25)

61116369sx7.jpg

52854525rr4.jpg

bây giờ tiến hành vẽ một đường line dài 1m ở tỷ lệ 1/100 có nghĩa là

Command: line

LINE Specify first point:

Specify next point or [undo]: 1000

- khi ghi kích thước với dim100 tôi sẽ có chiều dài là 1000

 

bây giờ tôi cũng vẽ đường line đó dài 1m nhưng ở tỷ lệ 1/25 với kiểu dim là dim25

nếu tôi muốn ghi kt kiểu dim25 thì phải vẽ đường line có chiều dài 4000 dùng dim25 thì khi kích thước thì cũng cho ta 1000

Hỏi: viết 1 lisp

khi đang ở dim25 ta vẽ đường line mà nhập chiều dài 1000 thì nó sẽ tự động dài 4000

mục đích ta khỏi phải tính toán các tỷ lệ khi vẽ.

 

Command: L25 (tên tù ý)

LINE Specify first point:

Specify next point or [undo]: 1000

sẽ cho ta đường line dài 4000

 

Kquả đây.

41068127sz7.jpg

------------------------------------------------

 

khó hiểu quá. các bác thông cảm không biết diễn đạt sao cả. dân mới học lisp

 

 

Vậy sao bác không vẽ ở tỷ lệ bình thường sau đó scale lại có nhanh hơn không.

Chỉ mất có đúng một động tác scale còn hơn cứ phải lăn tăn trong đầu là bản vẽ đang ở tỷ lệ nào rồi phải chuyển DIM qua lại.

Chuyện vẽ một đối tương ở tỷ lệ nào đó thì không khó, nhưng mà sẽ không lường hết tình trang có thể xảy ra khi bác thực hiện các lệnh như là move hay copy...

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ậy sao bác không vẽ ở tỷ lệ bình thường sau đó scale lại có nhanh hơn không.

Chỉ mất có đúng một động tác scale còn hơn cứ phải lăn tăn trong đầu là bản vẽ đang ở tỷ lệ nào rồi phải chuyển DIM qua lại.

Chuyện vẽ một đối tương ở tỷ lệ nào đó thì không khó, nhưng mà sẽ không lường hết tình trang có thể xảy ra khi bác thực hiện các lệnh như là move hay copy...

 

thì mình cũng thường vẽ tỷ lệ bình thường rồi coppy nhung đôi lúc lại thích vẽ với dim đang hiện hành vì thấy trực quan hơn

sở thích đúng là khổ bác hè. không biết có ai vẽ như tui không nữa.

còn coppy và move thì cũng chẵng ảnh hưởng gì hết mà. ta cứ dùng các lệnh của cad, khi ta cần dùng thì load lisp lên thôi

 

hỏi tí nhé vợ bác người huế ha? thấy bác cũng dùng "mô, ri" còn bảo là học vợ

ui vẽ 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
thì mình cũng thường vẽ tỷ lệ bình thường rồi coppy nhung đôi lúc lại thích vẽ với dim đang hiện hành vì thấy trực quan hơn

sở thích đúng là khổ bác hè. không biết có ai vẽ như tui không nữa.

còn coppy và move thì cũng chẵng ảnh hưởng gì hết mà. ta cứ dùng các lệnh của cad, khi ta cần dùng thì load lisp lên thôi

 

hỏi tí nhé vợ bác người huế ha? thấy bác cũng dùng "mô, ri" còn bảo là học vợ

ui vẽ nhé

 

OK, để tối nay tôi thử xem sao

He, còn vợ thì chưa, nhưng mà là tương lai là người Đà Lạ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

thanh ki`u ve ry mút

bác cứ thử coi, biêt đâu lại nhiều người thích đó

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ậy sao bác không vẽ ở tỷ lệ bình thường sau đó scale lại có nhanh hơn không.

 

Đúng là vẽ bằng tỉ lệ thật rồi scale là nhanh nhất nhưng mà lúc chỉnh sửa thì lại là một vấn đề khác :bigsmile: (chẳng nhẽ lại scale xuống edit rồi lại scale lên :)) Nếu có được lisp này thì hay quá. Cảm ơn vndesperados 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
OK, để tối nay tôi thử xem sao

He, còn vợ thì chưa, nhưng mà là tương lai là người Đà Lạt

chắc mấy ngày cuối tuần bác vndesperados bị vợ hành nên quên rồi.hic! tội mấy anh em đợi.trời này mà lên dà lạt với vợ chắc là lạnh lắm đây

Mà tại sao bác Hoành không chịu giup nhi??? :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
chắc mấy ngày cuối tuần bác vndesperados bị vợ hành nên quên rồi.hic! tội mấy anh em đợi.trời này mà lên dà lạt với vợ chắc là lạnh lắm đây

Mà tại sao bác Hoành không chịu giup nhi??? :bigsmile:

Vndesperados thì không rõ, nhưng chắc chắn là bác Hoành sẽ không làm!

Ssg cũng không làm, nhưng có vài ý kiến liên quan:

 

- Về lập trình lisp, rất khó tìm ra được một thuật giải dạng như “cây đũa thần”, có tác dụng khuyếch đại mọi thao tác liên quan đến geometry của mọi đối tượng. Muốn đạt được mục đích đã nêu, có lẽ phải “can thiệp thô bạo” vào tất cả các lệnh trong nhóm Draw và Modify của Acad. Đó là nói trên nguyên tắc, còn cụ thể thì không "dễ chơi", nếu không muốn nói là không tưởng. Chương trình lisp có thể gọi lệnh AutoCAD tùy ý, nhưng thay đổi cách hành xử thông thường các lệnh AutoCAD là việc làm rất nguy hiểm. Chính người lập trình cũng không thể lường hết những hậu quả có thể xảy ra. Bản thân ssg không bao giờ làm cái việc điên rồ ấy!

 

- 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?

 

- Yêu cầu trên đúng là xuất phát từ một nhu cầu thực tế. Nhưng cái thực tế ấy là hệ quả tất yếu của một cách làm không hợp lý khi muốn trình bày nhiều tỷ lệ khác nhau trên cùng một bản vẽ: scale hình và sửa dimscale. Đáng tiếc là cách làm này cũng khá phổ biến, ngay cả với chính bản thân người viết bài này! Tuy nhiên, mình chỉ sử dụng trong những trường hợp đơn giản, ít liên quan đến những phần khác của bản vẽ cũng như với các bản vẽ khác.

 

Vấn đề này cũng đã được thảo luận nhiều ở topic “Vẽ nhiều tỷ lệ trong một bản vẽ”. Ssg cũng có bài viết ở đó, nhưng hôm diễn đàn mất dữ liệu nó cũng đi theo luôn. Một lần nữa, xin trình bày lại quan điểm như sau:

 

- Nếu bạn đang ở giai đoạn vẽ ban đầu thì cũng không có vấn đề gì, chỉ cần 3 lệnh: copy, scale và thiết lập dimstyle là OK ngay. Nhưng bất cứ ai đã dính vào cái “nghiệp” thiết kế đều hiểu rất rõ rằng, để hoàn thiện một thiết kế, tổng thời gian biên tập, chỉnh sửa, hiệu đính… lớn hơn gấp nhiều lần so với thời gian vẽ. Một hồ sơ thiết kế được cho là hoàn thiện, nhưng chỉ cần một “ý kiến nhỏ” từ phía chủ đầu tư, có thể phải sửa lại hàng loạt bản vẽ. Với cách làm trên, để chỉnh sửa một yếu tố nào đó, ngoài việc phải lặp đi lặp lại cùng một thao tác trên nhiều hình vẽ khác nhau, còn phải tính toán, nhân chia theo tỷ lệ tương ứng (không khác cái thời vẽ tay ngày xưa là mấy). Thật vô lý và “phản Autodesk”!

 

- Nếu dùng layout để trình bày bản vẽ, bạn sẽ không bao giờ gặp phải những chuyện vô lý như vậy, và chắc chắn cũng sẽ không có cái yêu cầu viết lisp này. Nếu bạn chưa quen sử dụng layout, hoặc còn nghi ngờ về công dụng cũng như quan điểm của Autodesk về việc dùng model và layout, xin được trích dẫn nguyên văn “Overview of Layouts” trong Help, kèm theo translation:

 

The AutoCAD window provides two parallel working environments represented by the Model and Layout tabs. Working on the Model tab, you draw a model of your subject. On the layout tabs, you can arrange multiple "snapshots" of the model. Each layout represents a drawing sheet that can display one or more views of the model at various scales.

The Model tab accesses a limitless drawing area. In model space, you draw at 1:1 scale, and you decide whether one unit represents one inch (for a bracket) or one meter (for a bridge).

Layout tabs access virtual drawing sheets. When you set up a layout, you tell AutoCAD the sheet size you want to use. The layout represents the drawing sheet. This layout environment is called paper space.

In a layout, you can create and position viewports, and you can add dimensions, a title block, or other geometry. Viewports display a drawing's model space objects, that is, the objects you created on the Model tab. Each viewport can display the model space objects at a specified scale.

You can create multiple layouts in a drawing; each layout can contain different plot settings and paper sizes.

 

AutoCAD cung cấp đồng thời 2 môi trường làm việc gọi là Model và Layout. Khi làm việc trong Model, bạn vẽ mô hình của đối tượng. Trong layout, bạn có thể trình bày nhiều “ảnh chụp” của mô hình. Mỗi layout mô tả một tờ giấy, trên đó hiển thị một hoặc nhiều góc nhìn của mô hình với những tỷ lệ khác nhau.

Model không giới hạn vùng vẽ. Trong không gian mô hình, bạn vẽ ở tỷ lệ 1:1 và tùy ý quy định 1 đơn vị trên bản vẽ tương ứng với 1 inch (cho một cái giá đỡ) hoặc 1 mét (cho một chiếc cầu).

Layout được xem như tờ giấy ảo. Khi bạn thiết lập một layout, bạn phải khai báo khổ giấy sử dụng. Môi trường layout được gọi là không gian giấy.

Trong layout, bạn có thể tạo và sắp xếp các khung nhìn, có thể ghi kích thước, ghi chú hoặc các đối tượng hình học khác. Các khung nhìn hiển thị các đối tượng trong không gian mô hình với một tỷ lệ xác định.

Bạn có thể tạo nhiều layout trong một bản vẽ. Mỗi layout có thể khác nhau về khổ giấy và các thiết lập khác khi in.

 

- Ngoài ra, bạn cũng có thể open các bản vẽ trong thư mục Sample (version nào cũng có) của Acad để tham khảo thêm về cách dùng layout của họ. Chẳng hạn như bản vẽ chiếc đồng hồ watch.dwg trong Sample, ở model chỉ có 1 hình nhưng trong layout họ trình bày cực kỳ ấn tượng.

 

Xin chốt lại vấn đề, vẽ theo tỷ lệ 1:1 trong model và dùng layout để trình bày có những lợi ích rất cơ bản sau:

1) Đối tượng luôn luôn được vẽ với kích thước thật của nó, bạn không bao giờ phải bận tâm đến việc phải nhân chia tỷ lệ khi vẽ.

2) Kết quả đo chiều dài, diện tích, thể tích, khối lượng, trọng tâm, mô men quán tính… nói chung là tất cả các đặc trưng hình học của đối tượng bằng các lệnh distance, area, lengthen, massprop luôn luôn đúng với thực tế.

3) Mối đối tượng chỉ cần vẽ 1 lần trong model nhưng có thể trình bày nhiều lần, nhiều nơi, với nhiều góc nhìn, nhiều tỷ lệ khác nhau tùy ý trong layout. Khi chỉnh sửa, tất nhiên cũng chỉ cần 1 lần duy nhất trong model. Toàn bộ các kích thước, nếu không bị độ chế, tức là còn giữ được thuộc tính associate, sẽ tự động update trên tất cả các khung nhìn.

4) Vẽ phối hợp nhiều yếu tố khác nhau nhưng có quan hệ với nhau về kích thước, vị trí, lắp ghép… trong cùng một model và có thể dùng nhiều layout khác nhau để in ra từng nhóm tùy theo mục đích sử dụng. Ví dụ, bản vẽ 1stfloor.dwg trong Sample, họ vẽ phối hợp toàn bộ trong model và trình bày trên 3 layout các bản vẽ khác nhau: kiến trúc, sơ đồ điện và sơ đồ chiếu sáng.

5) Copy qua lại và phối hợp nhiều file *.dwg với nhau trong một project lớn rất thuận lợi, cũng không phải bận tâm đến việc chúng ở tỷ lệ nào, đặc biệt là khi bạn làm việc theo nhóm và cần trao đổi dữ liệu với nhau bằng file *.dwg.

 

Luôn luôn vẽ với kích thước thật và biết dùng Layout để trình bày bản vẽ là phong cách của người sử dụng AutoCAD pro!

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
Vndesperados thì không rõ, nhưng chắc chắn là bác Hoành sẽ không làm!

Ssg cũng không làm, nhưng có vài ý kiến liên quan:

 

- Về lập trình lisp, rất khó tìm ra được một thuật giải dạng như “cây đũa thần”, có tác dụng khuyếch đại mọi thao tác liên quan đến geometry của mọi đối tượng. Muốn đạt được mục đích đã nêu, có lẽ phải “can thiệp thô bạo” vào tất cả các lệnh trong nhóm Draw và Modify của Acad. Đó là nói trên nguyên tắc, còn cụ thể thì không "dễ chơi", nếu không muốn nói là không tưởng. Chương trình lisp có thể gọi lệnh AutoCAD tùy ý, nhưng thay đổi cách hành xử thông thường các lệnh AutoCAD là việc làm rất nguy hiểm. Chính người lập trình cũng không thể lường hết những hậu quả có thể xảy ra. Bản thân ssg không bao giờ làm cái việc điên rồ ấy!

 

- 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?

 

- Yêu cầu trên đúng là xuất phát từ một nhu cầu thực tế. Nhưng cái thực tế ấy là hệ quả tất yếu của một cách làm không hợp lý khi muốn trình bày nhiều tỷ lệ khác nhau trên cùng một bản vẽ: scale hình và sửa dimscale. Đáng tiếc là cách làm này cũng khá phổ biến, ngay cả với chính bản thân người viết bài này! Tuy nhiên, mình chỉ sử dụng trong những trường hợp đơn giản, ít liên quan đến những phần khác của bản vẽ cũng như với các bản vẽ khác.

 

Vấn đề này cũng đã được thảo luận nhiều ở topic “Vẽ nhiều tỷ lệ trong một bản vẽ”. Ssg cũng có bài viết ở đó, nhưng hôm diễn đàn mất dữ liệu nó cũng đi theo luôn. Một lần nữa, xin trình bày lại quan điểm như sau:

 

- Nếu bạn đang ở giai đoạn vẽ ban đầu thì cũng không có vấn đề gì, chỉ cần 3 lệnh: copy, scale và thiết lập dimstyle là OK ngay. Nhưng bất cứ ai đã dính vào cái “nghiệp” thiết kế đều hiểu rất rõ rằng, để hoàn thiện một thiết kế, tổng thời gian biên tập, chỉnh sửa, hiệu đính… lớn hơn gấp nhiều lần so với thời gian vẽ. Một hồ sơ thiết kế được cho là hoàn thiện, nhưng chỉ cần một “ý kiến nhỏ” từ phía chủ đầu tư, có thể phải sửa lại hàng loạt bản vẽ. Với cách làm trên, để chỉnh sửa một yếu tố nào đó, ngoài việc phải lặp đi lặp lại cùng một thao tác trên nhiều hình vẽ khác nhau, còn phải tính toán, nhân chia theo tỷ lệ tương ứng (không khác cái thời vẽ tay ngày xưa là mấy). Thật vô lý và “phản Autodesk”!

 

- Nếu dùng layout để trình bày bản vẽ, bạn sẽ không bao giờ gặp phải những chuyện vô lý như vậy, và chắc chắn cũng sẽ không có cái yêu cầu viết lisp này. Nếu bạn chưa quen sử dụng layout, hoặc còn nghi ngờ về công dụng cũng như quan điểm của Autodesk về việc dùng model và layout, xin được trích dẫn nguyên văn “Overview of Layouts” trong Help, kèm theo translation:

 

The AutoCAD window provides two parallel working environments represented by the Model and Layout tabs. Working on the Model tab, you draw a model of your subject. On the layout tabs, you can arrange multiple "snapshots" of the model. Each layout represents a drawing sheet that can display one or more views of the model at various scales.

The Model tab accesses a limitless drawing area. In model space, you draw at 1:1 scale, and you decide whether one unit represents one inch (for a bracket) or one meter (for a bridge).

Layout tabs access virtual drawing sheets. When you set up a layout, you tell AutoCAD the sheet size you want to use. The layout represents the drawing sheet. This layout environment is called paper space.

In a layout, you can create and position viewports, and you can add dimensions, a title block, or other geometry. Viewports display a drawing's model space objects, that is, the objects you created on the Model tab. Each viewport can display the model space objects at a specified scale.

You can create multiple layouts in a drawing; each layout can contain different plot settings and paper sizes.

 

AutoCAD cung cấp đồng thời 2 môi trường làm việc gọi là Model và Layout. Khi làm việc trong Model, bạn vẽ mô hình của đối tượng. Trong layout, bạn có thể trình bày nhiều “ảnh chụp” của mô hình. Mỗi layout mô tả một tờ giấy, trên đó hiển thị một hoặc nhiều góc nhìn của mô hình với những tỷ lệ khác nhau.

Model không giới hạn vùng vẽ. Trong không gian mô hình, bạn vẽ ở tỷ lệ 1:1 và tùy ý quy định 1 đơn vị trên bản vẽ tương ứng với 1 inch (cho một cái giá đỡ) hoặc 1 mét (cho một chiếc cầu).

Layout được xem như tờ giấy ảo. Khi bạn thiết lập một layout, bạn phải khai báo khổ giấy sử dụng. Môi trường layout được gọi là không gian giấy.

Trong layout, bạn có thể tạo và sắp xếp các khung nhìn, có thể ghi kích thước, ghi chú hoặc các đối tượng hình học khác. Các khung nhìn hiển thị các đối tượng trong không gian mô hình với một tỷ lệ xác định.

Bạn có thể tạo nhiều layout trong một bản vẽ. Mỗi layout có thể khác nhau về khổ giấy và các thiết lập khác khi in.

 

- Ngoài ra, bạn cũng có thể open các bản vẽ trong thư mục Sample (version nào cũng có) của Acad để tham khảo thêm về cách dùng layout của họ. Chẳng hạn như bản vẽ chiếc đồng hồ watch.dwg trong Sample, ở model chỉ có 1 hình nhưng trong layout họ trình bày cực kỳ ấn tượng.

 

Xin chốt lại vấn đề, vẽ theo tỷ lệ 1:1 trong model và dùng layout để trình bày có những lợi ích rất cơ bản sau:

1) Đối tượng luôn luôn được vẽ với kích thước thật của nó, bạn không bao giờ phải bận tâm đến việc phải nhân chia tỷ lệ khi vẽ.

2) Kết quả đo chiều dài, diện tích, thể tích, khối lượng, trọng tâm, mô men quán tính… nói chung là tất cả các đặc trưng hình học của đối tượng bằng các lệnh distance, area, lengthen, massprop luôn luôn đúng với thực tế.

3) Mối đối tượng chỉ cần vẽ 1 lần trong model nhưng có thể trình bày nhiều lần, nhiều nơi, với nhiều góc nhìn, nhiều tỷ lệ khác nhau tùy ý trong layout. Khi chỉnh sửa, tất nhiên cũng chỉ cần 1 lần duy nhất trong model. Toàn bộ các kích thước, nếu không bị độ chế, tức là còn giữ được thuộc tính associate, sẽ tự động update trên tất cả các khung nhìn.

4) Vẽ phối hợp nhiều yếu tố khác nhau nhưng có quan hệ với nhau về kích thước, vị trí, lắp ghép… trong cùng một model và có thể dùng nhiều layout khác nhau để in ra từng nhóm tùy theo mục đích sử dụng. Ví dụ, bản vẽ 1stfloor.dwg trong Sample, họ vẽ phối hợp toàn bộ trong model và trình bày trên 3 layout các bản vẽ khác nhau: kiến trúc, sơ đồ điện và sơ đồ chiếu sáng.

5) Copy qua lại và phối hợp nhiều file *.dwg với nhau trong một project lớn rất thuận lợi, cũng không phải bận tâm đến việc chúng ở tỷ lệ nào, đặc biệt là khi bạn làm việc theo nhóm và cần trao đổi dữ liệu với nhau bằng file *.dwg.

 

Luôn luôn vẽ với kích thước thật và biết dùng Layout để trình bày bản vẽ là phong cách của người sử dụng AutoCAD pro!

 

Hú vía. đúng là một bài viết hay. Sự thực nếu mình cũng dùng cad được Pro như Ssg thì mình cũng không hỏi cái lisp này làm gì nhưng các bác hãy nhình vào một thực tế, không phải một nấc lên trời được. đối với những người dùng cad không được rành (như tôi) và có thói quen trình bày bản vẽ trên model thì vẽ với tỷ lệ hình là điều thường chọn làm. Bản thân cũng thấy rất tệ khi chưa biết nhiều về cách trình bày bản vẽ trên layout. mục đích của mình hỏi cũng để các bác giúp mọi người có trình độ tầm tầm tầm như tôi có cái nhìn sâu hơn về lisp và cách để bỏ qua được các thói quen cổ hủ khi phải dùng giải pháp trên. Dù sao một bộ phận khá lớn vẫn đang còn vẽ trên Model(mà theo bác nói là không được Pro). thiết nghĩ, khi chưa có cách thay thế thì có được một lisp như trên vẫn khá cần thiết khi vẽ mà đở phải tính toán các tỷ lệ trên model. thấy các Bác cũng tranh luận nhiều về vấn đề vẽ trên layout hay trên model nhiều lắm, chắc từ bây giờ tôi sẽ làm quen với layout. cám ơn bác đã chia sẽ quan điểm.

Chỉnh sửa theo ngayve324

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 :bigsmile: Mình nghĩ lệnh đó cũng không nhất thiết phải can thiệp thô bạo vào lệnh gốc như ssg nói. Mình ví dụ :

 

tên lệnh l25

chọn điểm p1

---> nhập khoảng các 1000

---> chọn điểm p2 (p2 ở đây có thể là điểm bất kỳ hoặc đơn thần là nằm trên trục x hoặc y để lisp còn nhận biết hướng vẽ đưòng line (hoặc nếu xác định được vị trí hiện tại của con chuột trên màn hình cad thì càng tốt)

 

chương trình lisp sẽ tự động nhân 4 với 1000 mình nhập lúc đầu, thế là mình có ngay một đoạn thẳng đài 1000 trong tỉ lệ 1/25.

 

Nếu chương trình lisp đơn giản người dùng chỉ cần copy đoạn lisp đó, rồi tự sửa tên lệnh thành l50 ... hoặc ci50... + nhân lên 2

 

không biết lập trình nhưng mình nghĩ nếu làm như vậy thì chắc chắn đượ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
@ssg :bigsmile: Mình nghĩ lệnh đó cũng không nhất thiết phải can thiệp thô bạo vào lệnh gốc như ssg nói. Mình ví dụ :

 

tên lệnh l25

chọn điểm p1

---> nhập khoảng các 1000

---> chọn điểm p2 (p2 ở đây có thể là điểm bất kỳ hoặc đơn thần là nằm trên trục x hoặc y để lisp còn nhận biết hướng vẽ đưòng line (hoặc nếu xác định được vị trí hiện tại của con chuột trên màn hình cad thì càng tốt)

 

chương trình lisp sẽ tự động nhân 4 với 1000 mình nhập lúc đầu, thế là mình có ngay một đoạn thẳng đài 1000 trong tỉ lệ 1/25.

 

Nếu chương trình lisp đơn giản người dùng chỉ cần copy đoạn lisp đó, rồi tự sửa tên lệnh thành l50 ... hoặc ci50... + nhân lên 2

 

không biết lập trình nhưng mình nghĩ nếu làm như vậy thì chắc chắn đượ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)
)
)

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 nhé. Cái này về nghĩ thấy nhức đầu quá. Chỉ giải quyết được một chút thôi. Không làm triệt để được

Hehehehehe.

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.

×