Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#261 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 01 November 2007 - 09:52 PM

Anh Hoành ơi!Anh có thể tạo cho em 1 iish thế này không?
Em sử dụng Sketch Up khá nhìu, và em thấy lệnh COPY bên này rất hay, ta copy 1 đối tượng theo phương X(chẳng hạn) cách đối tượng cũ 1 khoảng A, sau đó ta nhấn phím X11 thì lập tức ta có 11 đối tượng như thế cách đều nhau 1 khoảng a. Nhấn /3 lập tức xẽ có 3 đối tượng nằm xen kẽ giữa đối tượng đầu và đối tượng đc copy trước đó.... (kiểu như array bên cad nhưng lại hiện đại và nhanh hơn rất nhìu). Vậy bi giờ em muốn làm điều đó bên Cad thì có được không anh. Anh giúp em lish này với nha! Thank anh rất nhìu!

lệnh AC dưới đây làm theo cái bạn cần. AC là Array giống Copy Multi


(defun c:ac (/ dt p1 p2 sl index kc goc)
(init)
(setq dt (ssget)
p1 (getpoint "\nVao diem goc: ")
p2 (getpoint p1 "\nVao diem den: ")
sl (getint "\nVao so lan: ")
goc (angle p1 p2)
kc (distance p1 p2)
index 0
)
(luuos)
(setvar "osmode" 0)
(repeat sl
(setq index (1+ index))
(command ".copy" dt "" p1 (polar p1 goc (* kc index)))
)
(traos)
(done)
)
;;------------------------------------------------------------
(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)
;;----------
(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)
;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)
;;----------
(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)

  • 1

#262 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 01 November 2007 - 10:57 PM

Đã ai trê anh Hoành nhà ta là " Quá nhiệt tình với mọi người chưa nhỉ ".Em vừa khó khăn đc 5' anh đã có mặt rùi.Hi, anh làm bon em hư đấy! :unsure:
  • 0

#263 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 01 November 2007 - 11:17 PM

Đã ai trê anh Hoành nhà ta là " Quá nhiệt tình với mọi người chưa nhỉ ".Em vừa khó khăn đc 5' anh đã có mặt rùi.Hi, anh làm bon em hư đấy! :unsure:

có 'rì' đâu, lisp có sẵn, chỉ việc paste vào bài thôi mà!
  • 2

#264 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 02 November 2007 - 07:21 PM

Copy và paste thảo nào nhanh, nên bác quên không trả lời hộ em 1 dòng nữa.
Thế bi giờ em mún copy ra 1 đối tượng cách đối tượng cũ giả sử 10000.
Sau đó em muốn khoảng 10000 đó có thêm 8 đối tượng nữa thì em đánh /8 lập tức sẽ có 8 đối tượng nắm cách đều nhau trong khoảng 10000 đó(giống y trong Sketch Up).
Nâng cấp lện cũ thêm cái này liệu có đc không bác!
  • 0

#265 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 02 November 2007 - 07:45 PM

Anh Hoành giúp em vụ này với!Em rất cần 1 lish là:
Thực hiện layon, layoff, layiso bên trong 1 lênh khác. Kiểu như thực hiện zoom='z, pan='p ý anh.
Em tin lish này sẽ được rất nhìu ng thích và áp dụng cho coi.
Bởi nó rất cần thiết với những bản bổ kỹ thuật rối tung rối mù.
Rất mong hồi âm của anh! :bigsmile:
  • 0

#266 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 05 November 2007 - 09:26 PM

Mọi ng đi đâu hệt trơn rùi.Giúp em với!
  • 0

#267 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 06 November 2007 - 08:03 AM

Mọi ng đi đâu hệt trơn rùi.Giúp em với!

Thì cũng giống như bạn đã liệt kê ở trên: layer='la, sau đó bạn muốn on, off gì chẳng được!
  • 0

#268 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 06 November 2007 - 10:23 AM

Mọi ng đi đâu hệt trơn rùi.Giúp em với!

Còn đây là đoạn lisp theo yêu cầu của bạn (biên tập lại của bác Hoành và bổ sung thêm tùy chọn Multi/Divide).
Tùy chọn ở dòng nhắc "Copy Multi-n/Divide-n :"
- Ví dụ bạn nhập M5, nó sẽ copy 5 lần với khoảng cách và định hướng theo 2 điểm First và Second
- Nếu nhập D11, copy 11 lần với khoảng cách bằng 2 điểm đó chia cho 11
- Không nhập gì cả, bấm Enter sẽ lấy mặc định là D2
Theo bạn, lấy mặc định D2 có hợp lý không? Nếu không, đề xuất trị số khác, mình sẽ sửa chương trình.


(defun C:MD(/ ss opt p1 p2 d ag i oldos mode n) ;;;Muti/Divide copy
(setq
ss (ssget)
opt (strcase (getstring "\nCopy Multi-n/Divide-n :"))
p1 (getpoint "\nFirst base point:")
p2 (getpoint p1 "\nSecond base point:")
d (distance p1 p2)
ag (angle p1 p2)
i 0
oldos (getvar "osmode")
)
(if (= opt "") (setq opt "D2"))
(setq
mode (substr opt 1 1)
n (atoi (substr opt 2 (- (strlen opt) 1)))
)
(if (= mode "D") (setq d (/ d n)))
(setvar "osmode" 0)
(repeat n
(setq i (1+ i))
(command "copy" ss "" p1 (polar p1 ag (* i d)))
)
(setvar "osmode" oldos)
(princ)
)

  • 0

#269 congtrinh5

congtrinh5

    biết vẽ line

  • Members
  • PipPip
  • 28 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 06 November 2007 - 12:09 PM

Các bác ơi cho mình xin lisp nối các đường line, arc thành 1 pline đã có trên diễn đàn. Mình tìm mãi không thấy.
  • 0

#270 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 07 November 2007 - 09:29 AM

Các bác ơi cho mình xin lisp nối các đường line, arc thành 1 pline đã có trên diễn đàn. Mình tìm mãi không thấy.

Bạn vào mục tìm kiếm của diễn đàn (phía trên bên trái), tìm từ Nối Pline sẽ thấy ngay: http://www.cadviet.com/forum/index.php?showtopic=78
  • 0

#271 dacvien2007

dacvien2007

    biết vẽ polygon

  • Members
  • PipPip
  • 75 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 07 November 2007 - 11:52 AM

Trả lời câu hỏi thứ nhất: Copy lisp từ codebox thì mất các dấu xuống dòng, bạn có thể tham khảo ở đây

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

Trả lời câu hỏi thứ 2: error: no function definition: INIT

Bản chất của lỗi này là không thấy defun INIT.Có thể giải quyết bằng cách sử dụng thêm lisp hethong.lsp sau. Nhớ là khi load phải load lisp hethong.lsp trước ,sau đó mới đến các lisp Scale Block..:bigsmile:


;;------------------------------------------------------------
(defun hoanh_newerror (msg)
(if (and (/= msg "Function cancelled")
(/= msg "quit / exit abort")
)
(princ (strcat "\n" msg))
)
(done)
)
;;----------
(defun init ()
(setq
HOANH_CMD (getvar "CMDECHO")
HOANH_OLDERROR *error*
*error* hoanh_newerror

)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
)
;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if HOANH_CMD
(setvar "CMDECHO" HOANH_CMD)
)
(if HOANH_OLDERROR
(setq *error* HOANH_OLDERROR)
)
(princ)
)

(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)


  • 0

#272 dacvien2007

dacvien2007

    biết vẽ polygon

  • Members
  • PipPip
  • 75 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 07 November 2007 - 11:57 AM

Em ðang sử dụng việc vẽ trên acad, nhýng thýờng xuyên thay ðổi lớp, ở mổi lớp có loại ðýờng, ðộ nét và màu có khác nhau.
ví dụ nhý vẽ lớp ðýờng, sông, nhà,....
vậy thì cách viết một lisp thể hiện nhý thế nào nhờ các anh giúp
  • 0

#273 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 07 November 2007 - 12:32 PM

Em ðang sử dụng việc vẽ trên acad, nhýng thýờng xuyên thay ðổi lớp, ở mổi lớp có loại ðýờng, ðộ nét và màu có khác nhau.
ví dụ nhý vẽ lớp ðýờng, sông, nhà,....
vậy thì cách viết một lisp thể hiện nhý thế nào nhờ các anh giúp



Cái này mà viết LISP chưa chắc gì nhanh hơn cách chuyển đổi layer mà bạn đang dùng.
  • 0

#274 anhca21

anhca21

    thành viên khai báo email ảo!

  • Members
  • PipPip
  • 24 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 08 November 2007 - 12:28 AM

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.
  • 0

#275 thoclep

thoclep

    biết lệnh offset

  • Members
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 08 November 2007 - 04:42 AM

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

Bac Hoanh ah!Em muon hoi bac 1 chut!
Theo em biet trong acad14 co lenh "PACK" voi tac dung gan cac font,linetype,... vao ban ve de khi ta chuyen sang may khac van su dung duoc ma khong can co nhung font,linetype...tren.Em thu lenh nap tren cac cad version cao hon nhung khong co lenh tren.
Bac co biet lam sao de lay lenh do tu cad14 ve cac cad kia khong?Hoac co liep nao thuc hien duoc lenh tren?
  • 0

#276 binladen_mrp

binladen_mrp

    biết vẽ arc

  • Members
  • PipPip
  • 47 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 08 November 2007 - 08:42 AM

Bac Hoanh ah!Em muon hoi bac 1 chut!
Theo em biet trong acad14 co lenh "PACK" voi tac dung gan cac font,linetype,... vao ban ve de khi ta chuyen sang may khac van su dung duoc ma khong can co nhung font,linetype...tren.Em thu lenh nap tren cac cad version cao hon nhung khong co lenh tren.
Bac co biet lam sao de lay lenh do tu cad14 ve cac cad kia khong?Hoac co liep nao thuc hien duoc lenh tren?

cái này thì bác Hoành đã giảng rồi đấy đai ca.he.dùng lệnh ETRANSMIT .sẽ gom cái file cần thiết như bác kể trên thành 1 file duy nhất dạng zip :bigsmile:
  • 0
Tư duy === > Tồn Tại

#277 xaydung

xaydung

    biết lệnh trim

  • Members
  • PipPipPip
  • 191 Bài viết
Điểm đánh giá: 12 (tàm tạm)

Đã gửi 09 November 2007 - 12:23 AM

Xin lisp thay đổi scale dim thì chức năng overall scale cũng thay đổi theo có nội dung như sau:
VD: trên màn hình là 1 dim, chạy lisp hỏi tỉ lệ scale dim : nhập 2, chương trình sẽ tự động scale dim lên 2 lần đồng thời thay đổi overall scale lên 2 theo ( mặc định ban đầu overall scale là 1) và scale liner giảm đi còn 0.5( mặc định ban đầu scale liner 1).
thanks!?
  • 0

#278 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 09 November 2007 - 11:36 AM

Bac nao cho em LISP ve duong han trong ket cau thep duoc khong :bigsmile:

Không cần phải dùng đến lisp để vẽ các nét riêng.
Trong Express>Tools có 2 lệnh: Make linetype và Make Shape. Đây là 2 lệnh dùng để tạo ra phông chữ (big font) và kiểu nét theo ý đồ riêng.
Về vấn đề tạo nét: Bạn có thể tạo ra một nét bất kỳ như các đường biểu diễn Mái dốc taluy, nét hàn (liền, ngắt quãng, khuất...), mặt cắt đất tự nhiên vv và vv, nói chung bạn có thể tạo ra một nét bất kỳ miễn sao nó có tính quy luật.
Cụ thể:
Đầu tiên bạn hãy vẽ những chi tiết cần thiết tạo lên nét vẽ ví dụ đối với nét hàn liên tục và nhìn thấy bạn hãy vẽ một hình có dạng chữ L (|_) rồi dùng lệnh: Make Shape để tạo ra một Shape sau đó dùng lệnh Shape để chèn hình vừa tạo vào bản vẽ, tiếp theo dùng lệnh Make linetype để tạo ra nét cần tạo, rất đơn giản, bạn sẽ có một nét có dạng: |_|_|_|_|_|_ khi đó bạn chỉ cần chọn kiểu nét cho đối tượng cần biểu diễn là xong. Ưu điểm của cách làm này là giúp cho dung lượng của bản vẽ nhẹ đi, nếu dùng Lisp để vẽ các Line như hình trên thì sẽ rất nặng.
  • 0

#279 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 09 November 2007 - 12:46 PM

SSG ko hỉu ý mình rùi.
Mình mún thực hiện layiso,layoff trong 1 lệnh khác cơ.
Vd: Ta đang vẽ line,bỗng thấy bản vẽ chật chội quá, không thể pick điểm được.
Ta sẽ tắt bớt layer đi, sau đó vẫn tiếp tục line đang vẽ dở.
Mình đã thử như SSG nói rùi.Nhưng có lẽ đó không phải là cách.
  • 0

#280 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 09 November 2007 - 01:42 PM

SSG ko hỉu ý mình rùi.
Mình mún thực hiện layiso,layoff trong 1 lệnh khác cơ.
Vd: Ta đang vẽ line,bỗng thấy bản vẽ chật chội quá, không thể pick điểm được.
Ta sẽ tắt bớt layer đi, sau đó vẫn tiếp tục line đang vẽ dở.
Mình đã thử như SSG nói rùi.Nhưng có lẽ đó không phải là cách.

Sao lại không hiểu! Acad gọi đó là transparent command, cho phép thực hiện 1 lệnh trong 1 lệnh khác. Bạn thử như thế nào mà không được? Đang thực hiện lệnh "line" chẳng hạn, bạn bấm 'la, nghĩa là thực hiện lệnh layer ở transparent mode. Hộp thoại xuất hiện, bạn muốn làm gì thì tùy. Cụ thể hình dưới đây là cho layer DIM off:

http://www.cadviet.com/upfiles/layoff.gif

Xong tiếp tục với lệnh line đang dở dang.
  • 0