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

[Yêu cầu] Offset, chuyện cũ với yêu cầu mới

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

@ĐVH: Nếu bạn bỏ a đi thì cấu trúc hàm callback sai luôn rồi, do thiếu số lượng đối số bắt buộc. chương trình báo lỗi chứ không thể chạy được.


d3 ; error: too many arguments
Unknown command "D3". Press F1 for help.

PS: Lisp trên bạn dùng thêm hàm cond thừa thãi quá. chỉ cần 1 hàm and là đủ rùi :)

  • 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

1). Ồ! Hôm qua test sơ suất chỗ nào đấy, nay test lại thì đúng là không thể bỏ a được. srr.

2). Đúng là chỉ cần dùng hoặc cond hoặc and thôi. Cái này chôm code Ketxu sửa lại cho y/c thứ 2 nên chưa nghiên cứu kỹ code.

  • 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

Đông vui quá! Góp thêm lệnh Offset.

 

;Fillet voi ban kinh bat ky, nhap lenh theo cau truc Rbankinh (R10, R100, R50, R1.5 ...)
;Ketxu 20/3/13
;Chamfer voi kh/cach bat ky, nhap lenh theo cau truc Dkhoangcah (D10, D100, D50, D1.5 ...)
;HA 20/3/13
;Offset voi kh/cach bat ky, nhap lenh theo cau truc Okhoangcah (O10, O100, O50, O1.5 ...)
;Gia Bach 23/3/13
(vl-load-com)

(if (null unknownCMD_reactor)(setq unknownCMD_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . fillet_chamfer_offset)))))

(defun	fillet_chamfer_offset (reactor_object  lst / cmdLine cmd dis)
  (if (and (setq cmdLine (strcase (nth 0 lst)))
	   (setq cmd (substr cmdLine 1 1))
           (wcmatch cmd "R,D,O")
	   (setq dis (distof (substr cmdLine 2))))
  (cond
    ( (eq cmd "R")
      (and (setvar 'FILLETRAD dis)
	   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "fillet ")))
    ( (eq cmd "D")
      (and (setvar 'CHAMFERA dis) (setvar 'CHAMFERB dis)
	   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "chamfer ")))
    ( (eq cmd "O")
      (and (setvar 'OFFSETDIST dis) 
	   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "offset  ")))
    ( t nil)    ))
  (princ))

 

 

Chỉnh sửa theo gia_bach
  • 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

Chà, vui quá ^^
 
- Cấu trúc của hàm Callback các bác xem trong Help :
 
 
AutoLISP Developer's Guide[/url > Using the Visual LISP Environment Advanced Topics > Attaching Reactors to AutoCAD Drawings > 
Defining Callback
Functions
 
- 2 tham số đều là bắt buộc, giống hàm error vậy thôi.
- m hay u thì ket nhớ không nhầm là do phiên bản, các bác bỏ đi hoặc viết hẳn chữ _Multiple ra là xong
 
-Cond, and :  Nói thừa thãi thì không phải rồi, k dùng mỗi and là vì ^^  
 + Bác gia_bach viết bên dưới rồi. Nó là một lisp viết mở, ta hoàn toàn có thể thêm các trường hợp khác.Lúc đầu ket còn định viết đoạn nếu k phải R thì trả về bán kính fillet cũ cơ ^^
 + Ket k thích (mặc dù ket đã viết hẳn 1 bài tut rút ngắn code bằng and, or rồi, chỉ là không thích thôi :P ). 
    Ket thấy bạn TL đặc biệt thích dùng And và Or (qua các lisp bạn post), cũng hay, nhưng theo mình nghĩ chỉ nên viết với những trường hợp tất cả các biểu thức sau And, Or bạn phải kiểm soát được giá trị trả về (nil hoặc không). Với ví dụ trên, nếu định viết thêm một dòng bất kỳ thì phải thêm not cho dòng sendcommand, ket k thích

  • 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

Dù không muốn nhận xét cá nhân, nhưng quả thật bạn Ketxu rất tinh ý, Mình thích And và Or vì dùng nó nhìn code gọn gàng, dễ đọc hơn if, cond.. ^^

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 lại có việc làm phiền mọi người đây.

Mình làm quy hoạch, thường xuyên phải vẽ các tuyến đường 12m, 13m, 16m,.... nên nhờ mọi người viết 1 lisp về lệnh Offset để làm việc này.

Yêu cầu cụ thể như sau:

Từ 1 đường line (or pline, arc, spline) là tim đường ta gõ lệnh LG12, Cad sẽ tự động làm các việc như sau:

 * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 3 và chuyển 2 đường mới tạo ra này vào layer "00_Mep duong" sẵn có, nếu chưa có thì tạo mới layer này.

  * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 6 và chuyển 2 đường mới tạo ra này vào layer "00_Mep he" sẵn có, nếu chưa có thì tạo mới layer này.

 

Tương tự,

Từ 1 đường line (or pline) là tim đường ta gõ lệnh LG13, Cad sẽ tự động làm các việc như sau:

 * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 3,5 và chuyển 2 đường mới tạo ra này vào layer "00_Mep duong" sẵn có, nếu chưa có thì tạo mới layer này.

  * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 6,5 và chuyển 2 đường mới tạo ra này vào layer "00_Mep he" sẵn có, nếu chưa có thì tạo mới layer này.

....

 

Mời ae xem file đính kèm sẽ rõ hơn.

http://www.cadviet.com/upfiles/3/31951_offset_duong.dwg

 

Cái này rất hữu ích cho dân quy hoạch nên mong ae giúp dùm mình!

Thanks tất cả ae diễn đàn Cadviet!

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

1). Giá mà bạn post y/c tiếp tục vào topic hôm trước thì đỡ loãng 4r hơn.

2). Từ các con số LG12, LG13,... chưa suy ra được quan hệ khoảng cách giữa tim đường với mép đường và mép lề trong trường hợp tổng quát.

VD: nhập LG50 thì offet lần 1 bao nhiêu, lần 2 bao nhiêu?

  • 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 lại có việc làm phiền mọi người đây.

Mình làm quy hoạch, thường xuyên phải vẽ các tuyến đường 12m, 13m, 16m,.... nên nhờ mọi người viết 1 lisp về lệnh Offset để làm việc này.

Yêu cầu cụ thể như sau:

Từ 1 đường line (or pline, arc, spline) là tim đường ta gõ lệnh LG12, Cad sẽ tự động làm các việc như sau:

 * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 3 và chuyển 2 đường mới tạo ra này vào layer "00_Mep duong" sẵn có, nếu chưa có thì tạo mới layer này.

  * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 6 và chuyển 2 đường mới tạo ra này vào layer "00_Mep he" sẵn có, nếu chưa có thì tạo mới layer này.

 

Tương tự,

Từ 1 đường line (or pline) là tim đường ta gõ lệnh LG13, Cad sẽ tự động làm các việc như sau:

 * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 3,5 và chuyển 2 đường mới tạo ra này vào layer "00_Mep duong" sẵn có, nếu chưa có thì tạo mới layer này.

  * Từ tim offset qua 2 bên, khoảng cách mỗi bên là 6,5 và chuyển 2 đường mới tạo ra này vào layer "00_Mep he" sẵn có, nếu chưa có thì tạo mới layer này.

....

 

Mời ae xem file đính kèm sẽ rõ hơn.

http://www.cadviet.com/upfiles/3/31951_offset_duong.dwg

 

Cái này rất hữu ích cho dân quy hoạch nên mong ae giúp dùm mình!

Thanks tất cả ae diễn đàn Cadviet!

Lisp của bác đây:

;========LISP OFFSET==========
;====KANGKUNG 28/03/2013======
(defun C:LG12()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq dt (car(entsel)) i (/ pi 2))
  (repeat 2
    (setq pt (polar (vlax-curve-getPointAtDist dt 0) (+ (angle (vlax-curve-getPointAtDist dt 0) (vlax-curve-getPointAtDist dt (+ 0 0.1))) i) 1))
    (of "3" pt "00_Mep duong")
    (of "6" pt "00_Mep he")
    (setq i (/ pi -2))
    )
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  )
(defun C:LG13()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq dt (car(entsel)) i (/ pi 2))
  (repeat 2
    (setq pt (polar (vlax-curve-getPointAtDist dt 0) (+ (angle (vlax-curve-getPointAtDist dt 0) (vlax-curve-getPointAtDist dt (+ 0 0.1))) i) 1))
    (of "3.5" pt "00_Mep duong")
    (of "6.5" pt "00_Mep he")
    (setq i (/ pi -2))
    )
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  )
(defun of(di pt la)
  (command "offset" di dt pt "")
  (if (= (tblsearch "Layer" la) nil)
    (progn
      (command "LAYER" "N" la "")
      (vla-put-layer (vlax-ename->vla-object (entlast)) la))
    (vla-put-layer (vlax-ename->vla-object (entlast)) la)))
(princ "\n                Written By KangKung - 28/03/2013\n")
  • Vote tăng 3

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

1). Giá mà bạn post y/c tiếp tục vào topic hôm trước thì đỡ loãng 4r hơn.

2). Từ các con số LG12, LG13,... chưa suy ra được quan hệ khoảng cách giữa tim đường với mép đường và mép lề trong trường hợp tổng quát.

VD: nhập LG50 thì offet lần 1 bao nhiêu, lần 2 bao nhiêu?

Cám ơn bạn đã góp ý.

Về ý thứ 1): Có lẽ nhờ Mod di chuyển bài này qua topic trước của mình dùm

http://www.cadviet.com/forum/topic/69469-yeu-cau-can-lisp-rut-gon-lenh-fillet/

Về ý thư 2): Mình có ý kiến như sau:

Mình làm qh chủ yếu quanh quẩn có mấy loại đường là 12m, 13m, 16m, 20m, 24m, 30m.

Mấy cái này thì không có hệ số nào chung cả. Tùy từng lộ giới và ng thiết kế cũng như tính chất của con đường mà sẽ có chiều rộng vỉa hè và chiều rộng lòng đường khác nhau.

Do đó mình nhờ các bạn viết Lisp cho vài loại đường tiêu biểu. Từ đó mình sẽ phát triển thêm các loại đường khác theo ý 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

 

Lisp của bác đây:

;========LISP OFFSET==========
;====KANGKUNG 28/03/2013======
(defun C:LG12()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq dt (car(entsel)) i (/ pi 2))
  (repeat 2
    (setq pt (polar (vlax-curve-getPointAtDist dt 0) (+ (angle (vlax-curve-getPointAtDist dt 0) (vlax-curve-getPointAtDist dt (+ 0 0.1))) i) 1))
    (of "3" pt "00_Mep duong")
    (of "6" pt "00_Mep he")
    (setq i (/ pi -2))
    )
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  )
(defun C:LG13()
  (command "UNDO" "BE")
  (setq os(getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq dt (car(entsel)) i (/ pi 2))
  (repeat 2
    (setq pt (polar (vlax-curve-getPointAtDist dt 0) (+ (angle (vlax-curve-getPointAtDist dt 0) (vlax-curve-getPointAtDist dt (+ 0 0.1))) i) 1))
    (of "3.5" pt "00_Mep duong")
    (of "6.5" pt "00_Mep he")
    (setq i (/ pi -2))
    )
  (setvar "OSMODE" os)
  (command "UNDO" "END")
  )
(defun of(di pt la)
  (command "offset" di dt pt "")
  (if (= (tblsearch "Layer" la) nil)
    (progn
      (command "LAYER" "N" la "")
      (vla-put-layer (vlax-ename->vla-object (entlast)) la))
    (vla-put-layer (vlax-ename->vla-object (entlast)) la)))
(princ "\n                Written By KangKung - 28/03/2013\n")

 

Thanks bạn KangKung rất nhiều!

Lisp rất ok.

Các bạn làm qh nên down Lisp này về làm sẽ tiết kiện đc rất nhiều thời gian.

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 bài viết trao đổi của các pro mình chẳng hiểu mô tê j cả hihihii. Nhưng sẳn có đông đủ cao thủ ở đây mình lại đưa thêm một yêu cầu để các cao thủ ra tay hihhii

Trong Cad, lệnh Chamfer chỉ cho phép chamfer giữa 2 đường thẳng. Nếu gặp 1 đường thẳng và 1 đường cong hoặc 2 đường cong thì bó tay.

Vậy nhờ các Pro bổ sung cho Lisp Chamfer trực tiếp mà Pro Doan Van Ha đã viết để khắc phục chuyện này.

Thanks mọi ngườ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

Đọc bài viết trao đổi của các pro mình chẳng hiểu mô tê j cả hihihii. Nhưng sẳn có đông đủ cao thủ ở đây mình lại đưa thêm một yêu cầu để các cao thủ ra tay hihhii

Trong Cad, lệnh Chamfer chỉ cho phép chamfer giữa 2 đường thẳng. Nếu gặp 1 đường thẳng và 1 đường cong hoặc 2 đường cong thì bó tay.

Vậy nhờ các Pro bổ sung cho Lisp Chamfer trực tiếp mà Pro Doan Van Ha đã viết để khắc phục chuyện này.

Thanks mọi người!

Ko ai có lisp cho phép Chamfer đường cong àh?

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 xây dựng được định nghĩa đi là có hết. Còn không định nghĩa được thì hiển nhiên là không 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

Nhờ các bạn viết giúp mình lisp cải tạo lệnh Extrude.

 khi gõ E10 thì cad sẽ exrude từ hình 2d  thành khối solid có chiều cao 10 thay vì phải đánh lệnh ext nhập chiều cao...

Thnk các 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 xây dựng được định nghĩa đi là có hết. Còn không định nghĩa được thì hiển nhiên là không có

 

Theo mình biết thì biết thì chỉ có thể thực hiện lệnh Chamfer giữa 2 đường thẳng với nhau.

Còn giữa 1 đường thẳng và 1 đường cong hoặc giữa 2 đường cong thì ko thể Chamfer đc.

Vì vậy mình nhờ các pro viết một Lisp cải tiến lệnh Chamfer, giúp Chamfer giữa đường thẳng và đường cong và giữa 2 đường cong theo kiểu như mình Chamfer giữa 2 đường thẳng với nhau.

Ví dụ: Mình cần Chamfer 1 đường thẳng và 1 đường cong (hoặc 2 đường cong, hoặc 2 đường thẳng) với biến D = 5 thì Cad sẽ làm như sau:

 * Bước 1: Hai đường thẳng và cong (hoặc cả 2 đường cong hoặc cả 2 đường thẳng) sẽ bị cắt tại vị trí cách điểm giao nhau 1 khoảng bằng 5 (có thể 2 đường giao nhau hoặc phương của 2 đường giao nhau).

 * Bước 2: Nối 2 điểm mới vừa cắt lại với nhau bằng 1 đường thẳng.

 Hết.

Thanks all!

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

Theo mình biết thì biết thì chỉ có thể thực hiện lệnh Chamfer giữa 2 đường thẳng với nhau.

Còn giữa 1 đường thẳng và 1 đường cong hoặc giữa 2 đường cong thì ko thể Chamfer đc.

Vì vậy mình nhờ các pro viết một Lisp cải tiến lệnh Chamfer, giúp Chamfer giữa đường thẳng và đường cong và giữa 2 đường cong theo kiểu như mình Chamfer giữa 2 đường thẳng với nhau.

Ví dụ: Mình cần Chamfer 1 đường thẳng và 1 đường cong (hoặc 2 đường cong, hoặc 2 đường thẳng) với biến D = 5 thì Cad sẽ làm như sau:

 * Bước 1: Hai đường thẳng và cong (hoặc cả 2 đường cong hoặc cả 2 đường thẳng) sẽ bị cắt tại vị trí cách điểm giao nhau 1 khoảng bằng 5 (có thể 2 đường giao nhau hoặc phương của 2 đường giao nhau).

 * Bước 2: Nối 2 điểm mới vừa cắt lại với nhau bằng 1 đường thẳng.

 Hết.

Thanks all!

Vấn đề này rất nhiều ae gặp phải mà ko ai có lisp giải quyết sao ta ???!!!

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

Theo mình biết thì biết thì chỉ có thể thực hiện lệnh Chamfer giữa 2 đường thẳng với nhau.

Còn giữa 1 đường thẳng và 1 đường cong hoặc giữa 2 đường cong thì ko thể Chamfer đc.

Vì vậy mình nhờ các pro viết một Lisp cải tiến lệnh Chamfer, giúp Chamfer giữa đường thẳng và đường cong và giữa 2 đường cong theo kiểu như mình Chamfer giữa 2 đường thẳng với nhau.

Ví dụ: Mình cần Chamfer 1 đường thẳng và 1 đường cong (hoặc 2 đường cong, hoặc 2 đường thẳng) với biến D = 5 thì Cad sẽ làm như sau:

 * Bước 1: Hai đường thẳng và cong (hoặc cả 2 đường cong hoặc cả 2 đường thẳng) sẽ bị cắt tại vị trí cách điểm giao nhau 1 khoảng bằng 5 (có thể 2 đường giao nhau hoặc phương của 2 đường giao nhau).

 * Bước 2: Nối 2 điểm mới vừa cắt lại với nhau bằng 1 đường thẳng.

 Hết.

Thanks all!

 

Giữa đường thẳng và đường cong có nhiều hơn 1 điểm giao nhau, Vậy sẽ lấy điểm giao nhau 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

 

Mình nhờ các pro viết một Lisp rút gọn lệnh Fillet như sau:

Bình thường khi muốn fillet với bán kinh r=100 (lệnh fillet trc đó R#100) thì mình sẽ phải làm tuần tữ là:

F :enter

R :enter

100 :enter

....

Giờ mình muốn khi cần fillet với một bán kính R=100 thì chỉ cần gõ: R100 thì CAD sẽ hiểu là Lệnh Fillet với tham số b.kính R=100 (bỏ qua 3 bước ở trên).

Thanks tất cả mọi người! Phần này coi như đã xong

 

Bổ sung:

Mình nhờ các pro viết bổ sung thêm tính năng Lisp chamfer nhập biến trực tiếp của bro Ketxu mình , giúp Chamfer giữa đường thẳng và đường cong và giữa 2 đường cong theo kiểu như mình Chamfer giữa 2 đường thẳng với nhau. Yêu cầu như sau:

 * Sau khi nhập lệnh (ví dụ D5) thì chọn đối tượng. Có 2 trường hợp xảy ra:

1/ Nếu 2 đối tượng là đường thẳng thìm thực hiện lệnh Chamfer bình thường với biến D=5 (cái này lisp của bro Ketxu đã có ).

2/ Nếu 2 đối tượng được chọn có 1 hoặc cả 2 là đường cong thì sẽ thực hiện từng bớc như sau:

   + Bước 1: Thực hiện lệnh Fillet 2 đối tượng được chọn với bk R = D (ở đây R=D=5);[hoặc nhập R, rồi nhập bk, rồi fillet 2 đ.tượng được chọn với bk R vừa nhập.

   + Bước 2: Xóa bỏ cung tròn vừa được tạo ra bằng lệnh Fillet ở bước 1.

   + Bước 3: Nối 2 điểm trên 2 đối tượng lại bằng 1 đường thẳng. Mọi người xem hình minh họa sẽ rõ hơn.3

   + Bước 4: Chọn đối tượng tiếp theo hoặc Enter kết thúc lệnh. Xong

guicadviet_zps63056014.jpg

 

 

 Hết.

Thanks all!

 

Mấy hôm nay bận quá không ghé dđ.

Mình mới viết lại yêu cầu, hy vọng nhận đc phản hồi.

Cái này ae nào làm quy hoạch rất hay gặp phải khi thiết kế đường giao thông vì không phải đường giao thông lúc nào cũng thẳng.

Tùy theo tính chất, yêu cầu, thế đất sẽ có đường giao thông thẳng, cong, uốn lượn, .....

Mà nguyên tắc thì góc giao lộ không được bo tròn mà phải vạt góc.

Lúc vẽ mà gặp mấy cái đường cong này hơi bị phiền hihihhi.

Thanks tất cả ae dđ.

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
(vl-load-com)
(if (null unknownCMD_reactor)(setq unknownCMD_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . fillet_chamfer_offset)))))
(defun fillet_chamfer_offset (reactor_object  lst / cmdLine cmd dis)
(if 
(and 
(setq cmdLine (strcase (nth 0 lst)))
(setq cmd (substr cmdLine 1 1))
(wcmatch cmd "F,D,O,Z,H")
(setq dis (distof (substr cmdLine 2)))
)
(cond
(
(eq cmd "F")
(and 
(setvar 'FILLETRAD dis)
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "fillet ")
)
)
(
(eq cmd "D")
(and 
(setvar 'CHAMFERA dis) 
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "chamfer ")
)
)
(eq cmd "O")
(and 
(setvar 'OFFSETDIST dis) 
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "offset  ")
)
)
(eq cmd "H")
(setq ss (ssget (list (cons 0 "TEXT,MTEXT"))))
(vlax-for Ent (vla-get-ActiveSelectionSet (vla-get-activedocument (vlax-get-acad-object)))
(vla-put-height Ent dis)
)
)
( t nil)
)
)
(princ)
)
 
hochoaivandot muốn thêm chức năng thay đổi chiều cao text, mtext bằng lệnh H2 (cao chữ 2).
Nên viết thêm đoạn code trên vào. Tuy nhiên kết quả chạy ra trên dòng command line có hiện dòng chữ 

 

Select objects:  Unknown command "H0.7".  Press F1 for help.
 

Mọi người giải thích và giải quyết giúp được không ạ?

  • Vote giảm 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

Theo y/c ở topic dưới đây tôi viết thêm một số lệnh rút gọn:

http://www.cadviet.com/forum/topic/92038-nho-viet-lisp-copy-move-rotate-doi-tuong-theo-1-gia-tri-cho-truoc/

Có 3 lisp, dùng để Copy, Move, Rotate rút gọn.

Lệnh Copy và Move: giảm bớt công đoạn nhập khoảng cách.

Lệnh Rotate: giảm bớt công đoạn nhập góc quay.

Nếu bạn nào hay phải Copy, Move, Rotate kiểu này thì tải về dùng.

 

;; Cac lenh Copy, Move, Rotate rut gon.
;; Doan Van Ha - CadViet.com - 28/12/2013
(vl-load-com)
;----- Copy_Distance (by HA). Copy Objects voi Distance, diem goc va huong tu chon. Nhap lenh theo cau truc: CD10, CD100, CD1.5 ...
(if (null copy_reactor) (setq copy_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . Copy_HA)))))
(defun Copy_HA (a b / cmd dis)
 (and
  (wcmatch (setq cmd (strcase (nth 0 b))) "CD*")
  (setq dis (distof (substr cmd 3)))
  (setq ss (ssget))
  (setq p (getpoint "\nSpecify base point: "))
  (setq q (getpoint p "\nSpecify point to the direction of the copy: "))
  (setq q (polar p (angle p q) dis))
  (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "(command \"_.Copy\" ss \"\" p q) "))
 (princ))
;----- Move_Distance (by HA). Move Objects voi Distance, diem goc va huong tu chon. Nhap lenh theo cau truc: MD10, MD100, MD1.5 ...
(if (null move_reactor) (setq move_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . Move_HA)))))
(defun Move_HA (a b / cmd dis)
 (and
  (wcmatch (setq cmd (strcase (nth 0 b))) "MD*")
  (setq dis (distof (substr cmd 3)))
  (setq ss (ssget))
  (setq p (getpoint "\nSpecify base point: "))
  (setq q (getpoint p "\nSpecify point to the direction of the move: "))
  (setq q (polar p (angle p q) dis))
  (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "(command \"_.Move\" ss \"\" p q) "))
 (princ))
;----- Rotate_Angle (by HA). Rotate Objects voi Angle, diem goc tu chon. Nhap lenh theo cau truc: RA10d5'3", RA90, RA1.5 ...
(if (null rotate_reactor) (setq rotate_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . Rotate_HA)))))
(defun Rotate_HA (a b / cmd)
 (and
  (wcmatch (setq cmd (strcase (nth 0 b))) "RA*")
  (setq ang (substr cmd 3))
  (setq ss (ssget))
  (setq p (getpoint "\nSpecify base point: "))
  (vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) "(command \"_.Rotate\" ss \"\" p ang) "))
 (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

Lisp bac Ha viết chỉ đỡ công nhấn phím Enter thôi, chứ công đoạn nhập khoảng cách vẫn có, nó nằm trong tên lệnh

-Cái lệnh cd* không hay: Chỉ copy có 1 lần, và các lệnh cd*, md*, ra* đều không hiển thị được hình ảnh độ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

Lisp bac Ha viết chỉ đỡ công nhấn phím Enter thôi, chứ công đoạn nhập khoảng cách vẫn có, nó nằm trong tên lệnh

-Cái lệnh cd* không hay: Chỉ copy có 1 lần, và các lệnh cd*, md*, ra* đều không hiển thị được hình ảnh động

Có ai viết được 1 lệnh, ví dụ circle, mà không cần nhập radius và/hoặc center không?

Cần phải hiểu y/c ở bên topic kia. Đôi khi vì công việc nên người ta cần vậy. Và nếu họ cần như vậy thì rõ ràng nó nhanh hơn. Xem từ trang đầu của topic này thì sẽ rõ. Chẳng hạn lệnh fillet ở đầu topic chẳng để làm 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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×