Đế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

#1341 vt_td

vt_td

    biết zoom

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

Đã gửi 09 December 2008 - 02:12 PM

Nhờ các bác cao thủ viet dum minh líp chay chuong trinh cat doc nay nhe.
Minh đang rất cần đó, cảm ơn các bác nhiều lắm

Đây là file mâu:
http://www.cadviet.c...T_DOC_MAU_1.dwg
  • 0

#1342 loiphong

loiphong

    biết vẽ circle

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

Đã gửi 10 December 2008 - 07:48 AM

Nguyễn Hoành ơi, bữa trước có nhờ bạn và mọi người xem có thể viết dùm mình Lips dùng chuột quét 1 biên dạng sẽ lấy được Xmax, Xmin, Ymax, Ymin cua biên dạng đó.
Mình đang làm một số Lips bên khuôn rất cần nó để phát triển và hoàn thiện. Mong bạn và mọi người giúp đỡ dùm. Thanks http://www.cadviet.c...les/DE_CHAN.rar
  • 0

#1343 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 10 December 2008 - 08:52 AM

Nguyễn Hoành ơi, bữa trước có nhờ bạn và mọi người xem có thể viết dùm mình Lips dùng chuột quét 1 biên dạng sẽ lấy được Xmax, Xmin, Ymax, Ymin cua biên dạng đó.
Mình đang làm một số Lips bên khuôn rất cần nó để phát triển và hoàn thiện. Mong bạn và mọi người giúp đỡ dùm. Thanks http://www.cadviet.c...les/DE_CHAN.rar

Lệnh GBB (get bounding box) dưới đây sẽ giúp bạn tìm Xmax, Xmin, Ymax, Ymin của các đối tượng được chọn. Chương trình sẽ ghi ra màn hình text tọa độ và vẽ vào màn hình ACAD 2 điểm point tọa độ góc dưới trái và trên phải của hình vuông bao tập đối tượng.

(defun c:gbb ( / xmin xmax ymin ymax)
(setq ss (ssget))
(while (setq ent (ssname ss 0))
(vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
(setq gmin (vlax-safearray->list p1)
gmax (vlax-safearray->list p2)
xmin (if xmin (min xmin (car gmin)) (car gmin))
ymin (if ymin (min ymin (cadr gmin)) (cadr gmin))
xmax (if xmax (max xmax (car gmax)) (car gmax))
ymax (if ymax (max ymax (cadr gmax)) (cadr gmax))
ss (ssdel ent ss)
)
)
(entmake (list (cons 0 "POINT") (list 10 xmin ymin 0.0)))
(entmake (list (cons 0 "POINT") (list 10 xmax ymax 0.0)))
(princ "\nXmin: ")(princ xmin)
(princ "\nYmin: ")(princ ymin)
(princ "\nXmax: ")(princ xmax)
(princ "\nYmax: ")(princ ymax)
(princ)
)

  • 0

#1344 vt_td

vt_td

    biết zoom

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

Đã gửi 10 December 2008 - 08:57 AM

Em nhờ BÁC NGUYỄN HOÀNH VIẾT DÙM EM TÍ NHE. THANK BÁC TRƯỚC. ĐÃ POST 1 LẦN MÀ KO AI QUAN TÂM CẢ.
Minh đang cần gấp file lisp nay lam.
Chuong trinh ve mat cat nhu sau:
Nhap vao file cao toa do diem hoac pick vao cac điểm trên màn hình.
Chọn tỷ lệ ngang và tỷ lệ đứng.
Chọn cao độ mặt so sánh (MSS).

Đây là file mẫu:
http://www.cadviet.c...T_DOC_MAU_1.dwg
  • 0

#1345 transu

transu

    biết vẽ spline

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

Đã gửi 10 December 2008 - 04:41 PM

Chào bạn!
Mình muốn bạn giúp mình một lisp như sau:
- pic chọn một block sau đó quét chọn một vùng bản vẽ, đếm được số block có tên là block đã pic ban đầu.
(Mình là dân TK cơ điện, rất cần đếm các thiết bị điện trên bản vẽ mặt bằng, mà mình thì không thạo lisp)
Cảm ơn bạn nhiều!

mình có cách này giúp bạn đếm đc block mà ko phải dùng lisp .bạn đưa block về 1 layer riêng. dùng layiso tắt hết các layer khác, sau đó dùng lệnh xóa hết các block. dưới bảng command sẽ cho bạn biết là bạn xóa bao nhiu block và u lại là xong.
  • 0

#1346 loiphong

loiphong

    biết vẽ circle

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

Đã gửi 11 December 2008 - 09:48 AM

Lệnh GBB (get bounding box) dưới đây sẽ giúp bạn tìm Xmax, Xmin, Ymax, Ymin của các đối tượng được chọn. Chương trình sẽ ghi ra màn hình text tọa độ và vẽ vào màn hình ACAD 2 điểm point tọa độ góc dưới trái và trên phải của hình vuông bao tập đối tượng.


(defun c:gbb ( / xmin xmax ymin ymax)
(setq ss (ssget))
(while (setq ent (ssname ss 0))
(vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
(setq gmin (vlax-safearray->list p1)
gmax (vlax-safearray->list p2)
xmin (if xmin (min xmin (car gmin)) (car gmin))
ymin (if ymin (min ymin (cadr gmin)) (cadr gmin))
xmax (if xmax (max xmax (car gmax)) (car gmax))
ymax (if ymax (max ymax (cadr gmax)) (cadr gmax))
ss (ssdel ent ss)
)
)
(entmake (list (cons 0 "POINT") (list 10 xmin ymin 0.0)))
(entmake (list (cons 0 "POINT") (list 10 xmax ymax 0.0)))
(princ "\nXmin: ")(princ xmin)
(princ "\nYmin: ")(princ ymin)
(princ "\nXmax: ")(princ xmax)
(princ "\nYmax: ")(princ ymax)
(princ)
)

Cám ơn Nguyễn Hoành nhiều lắm! Lips này mình tìm lâu lắm rồi, nó rất có ích đối với mình. Thanks much!
  • 0

#1347 transu

transu

    biết vẽ spline

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

Đã gửi 11 December 2008 - 10:11 AM

các anh oi. em dựng 3d trên cad 2004. vẽ 2d trên cad 2007.em nhờ các anh tạo cho em cái lisp cho cad 2004 với các tính năng như :lệnh layiso. layon, layoff, và hiệu chỉnh được nhiều đối tượng như cad 2007 vd:khi trim ta chọn giới hạn rồi trim được nhiều đối tượng 1 lúc như cad 2007 chỉ cần 1 lần chọn.thanks a lot.

bác Hoành giúp em với.hix,ko ai quan tâm
  • 0

#1348 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 11 December 2008 - 10:18 AM

bác Hoành giúp em với.hix,ko ai quan tâm

Mình cũng đã đọc yêu cầu của bạn, nhưng ngại trả lời vì những lẽ sau:
- layon, layoff thì ACAD2004 cũng có, không cần viết lại làm gì.
- Dùng lệnh Trim với nhiều đối tượng thì ở ACAD2004 bạn sử dụng tham số f là được. Còn nếu viết lisp cũng chỉ đến như vậy thôi, Lisp không thể can thiệp sâu về cái này được.

Người viết lisp chỉ hứng thú khi viết những lisp mà ACAD thông thường không làm được hoặc làm được nhưng không hiệu quả. Yêu cầu của bạn không rơi vào 2 trường hợp trên nên dễ đi vào quên lãng.
  • 0

#1349 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 11 December 2008 - 02:52 PM

các anh oi. em dựng 3d trên cad 2004. vẽ 2d trên cad 2007.em nhờ các anh tạo cho em cái lisp cho cad 2004 với các tính năng như :lệnh layiso. layon, layoff, và hiệu chỉnh được nhiều đối tượng như cad 2007 vd:khi trim ta chọn giới hạn rồi trim được nhiều đối tượng 1 lúc như cad 2007 chỉ cần 1 lần chọn.thanks a lot.

Tham khảo
http://www.cadviet.c...amp;#entry38142

Trim nhiều đối tượng : ExTrim
Extend nhiều đối tượng : ExExtend
Vừa Trim vừa Extend nhiều đối tượng : ExAdjust

Nhờ các bác cao thủ viet dum minh líp chay chuong trinh cat doc nay nhe.
Minh đang rất cần đó, cảm ơn các bác nhiều lắm

Đây là file mâu:
http://www.cadviet.c...T_DOC_MAU_1.dwg

Bạn nên lưu ở các version thấp hơn vì nhiều người không có CAD version mới do:
- Cấu hình máy thấp nên không chạy nổi CAD version mới
- Dùng CAD có bản quyền
  • 0

#1350 transu

transu

    biết vẽ spline

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

Đã gửi 11 December 2008 - 04:27 PM

Tham khảo
http://www.cadviet.c...amp;#entry38142

Trim nhiều đối tượng : ExTrim
Extend nhiều đối tượng : ExExtend
Vừa Trim vừa Extend nhiều đối tượng : ExAdjust
Bạn nên lưu ở các version thấp hơn vì nhiều người không có CAD version mới do:
- Cấu hình máy thấp nên không chạy nổi CAD version mới
- Dùng CAD có bản quyền

hix em gà wá . khi mới vào nghề em chỉ dùng cad 2007 sau này dựng 3d nặng wá máy chay ko nổi nên mới dùng 2004 nên ko bít.mong các cao thủ chỉ bảo cho.thanks so much.
  • 0

#1351 transu

transu

    biết vẽ spline

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

Đã gửi 11 December 2008 - 04:32 PM

Mình cũng đã đọc yêu cầu của bạn, nhưng ngại trả lời vì những lẽ sau:
- layon, layoff thì ACAD2004 cũng có, không cần viết lại làm gì.
- Dùng lệnh Trim với nhiều đối tượng thì ở ACAD2004 bạn sử dụng tham số f là được. Còn nếu viết lisp cũng chỉ đến như vậy thôi, Lisp không thể can thiệp sâu về cái này được.

Người viết lisp chỉ hứng thú khi viết những lisp mà ACAD thông thường không làm được hoặc làm được nhưng không hiệu quả. Yêu cầu của bạn không rơi vào 2 trường hợp trên nên dễ đi vào quên lãng.


bác bảo cad 2004 cũng có layon, layoff nhưng em xài nhiều máy rồi mà chả thấy cad2004 có lệnh này.nhưng em vừa mới copy trên diễn đàn đc lisp này rồi. dù sao cũng cám ơn bác nhiều.em còn gà lắm còn phải nhờ vả bác nhiều.mong bác chỉ bảo cho.thanks so much.
  • 0

#1352 vt_td

vt_td

    biết zoom

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

Đã gửi 12 December 2008 - 01:59 PM

SAO KHONG AI QUAN TAM VAY TA. POST LAN 3 RUI DO. THAT SU EM DANG CAN GAP LAM DO.

Em nhờ BÁC NGUYỄN HOÀNH VIẾT DÙM EM TÍ NHE. THANK BÁC TRƯỚC. ĐÃ POST 1 LẦN MÀ KO AI QUAN TÂM CẢ.
Minh đang cần gấp file lisp nay lam.
Chuong trinh ve mat cat nhu sau:
Nhap vao file cao toa do diem hoac pick vao cac điểm trên màn hình.
Chọn tỷ lệ ngang và tỷ lệ đứng.
Chọn cao độ mặt so sánh (MSS).

Đây là file mẫu:
http://www.cadviet.c...T_DOC_MAU_1.dwg
  • 0

#1353 black_mask

black_mask

    Chưa sử dụng CAD

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

Đã gửi 12 December 2008 - 08:17 PM

Chào anh Hoành ! Nhờ anh fix cái lisp sắp xếp dim theo khoảng cách giùm em và mị người với. Khi em gõ lệnh sd thì nó hiểu, nhưng khi chọn 1 dim làm gốc , enter , thì nó báo " unknow ... sd .. press F1 for help" và " Too many argument". Cái lisp này rất hay, anh fix giùm nhé. Thanks anh nhiều.

Nó đây : Sap dim
  • 0

#1354 thinhtd

thinhtd

    Chưa sử dụng CAD

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

Đã gửi 12 December 2008 - 09:49 PM

Xin chào Nguyễn Hoành. Tôi đang vướng 1 vấn đề sau mong bạn giúp đỡ.
Tôi hiện nay cần chuyển 1 số bản vẽ từ CAD sang Word, trong bản vẽ thường dùng phông unicode vì có các ký tự tiếng Nga, symbol....
Tôi đã dùng chương trình Better_WMF lại phải chuyển phông sang TCVN để hiển thị được tiếng Việt trong Word, thế nhưng còn các ký tự tiếng Nga và symbol thì chịu vì không hiển thị được. Mong Nguyễn Hoành có cao kiến hoặc viết LISP làm sao để dùng phông Unicode chuyển sang Word không bị lỗi giúp cho tôi và mọi người được không. Cám ơn nhiều.
  • 0

#1355 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 12 December 2008 - 10:03 PM

Xin chào Nguyễn Hoành. Tôi đang vướng 1 vấn đề sau mong bạn giúp đỡ.
Tôi hiện nay cần chuyển 1 số bản vẽ từ CAD sang Word, trong bản vẽ thường dùng phông unicode vì có các ký tự tiếng Nga, symbol....
Tôi đã dùng chương trình Better_WMF lại phải chuyển phông sang TCVN để hiển thị được tiếng Việt trong Word, thế nhưng còn các ký tự tiếng Nga và symbol thì chịu vì không hiển thị được. Mong Nguyễn Hoành có cao kiến hoặc viết LISP làm sao để dùng phông Unicode chuyển sang Word không bị lỗi giúp cho tôi và mọi người được không. Cám ơn nhiều.

Mình ít khi dùng BetterWMF nên không có kinh nghiệm về món này. Chuyện convert sang Word thì lisp gần như không thể can thiệp được. Nếu chỉ là vấn đề lỗi font unicode thì bạn có thể xem mẹo của bạn TueNV ở đây: lỗi phông khi dùng better WMF
  • 0

#1356 hieunt75

hieunt75

    Chưa sử dụng CAD

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

Đã gửi 12 December 2008 - 11:13 PM

Cảm ơn bạn nhiều!
Nhưng mình đọc đoạn code của bạn mình thấy hình như là mới chỉ tìm tên block chứ chưa phải là đếm số lượng block
Mình muốn đếm số lượng block cơ, giúp mình với!
  • 0

#1357 hieunt75

hieunt75

    Chưa sử dụng CAD

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

Đã gửi 12 December 2008 - 11:45 PM

Đây bạn. Tên là: bten

(Defun c:bten ( )
(prompt "\nChon BLOCK mau.")
(setq DT (car (entsel)))
(setq DT (entget DT))
(setq STNAME (cdr (assoc 2 DT)))

(Princ "\nHay chon vung :")
(setq SS (ssget (list (cons 0 "insert")
(cons 2 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 la BLOCK co ten: <" STNAME ">"))
)
)
(princ)
)


Cảm ơn bạn!
đúng như mong muốn của mình, sẽ không phải khổ sở vì đếm thiết bị trên mặt bằng nữa, mà lại chính xác nữa!
Nhân tiện nhờ thêm bạn : Xoá đi tất cả các Block có cùng tên, cùng toạ độ chỉ giữ lại duy nhất 1 block (vì có thể lúc vẽ mình lại copy 2 hoặc nhiều thằng block nằm chồng lên nhau như vậy nếu đếm bằng lisp trên sẽ bị thừa số lượng)
Bạn giải quyết thêm giúp mình là : sau khi đếm số lượng block xong thi tất cả các block đó được chọn! (để mình có thể thực hiện các lệnh khác những chú block đó)
  • 0

#1358 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 13 December 2008 - 09:04 AM

Cảm ơn bạn!
đúng như mong muốn của mình, sẽ không phải khổ sở vì đếm thiết bị trên mặt bằng nữa, mà lại chính xác nữa!
Nhân tiện nhờ thêm bạn : Xoá đi tất cả các Block có cùng tên, cùng toạ độ chỉ giữ lại duy nhất 1 block (vì có thể lúc vẽ mình lại copy 2 hoặc nhiều thằng block nằm chồng lên nhau như vậy nếu đếm bằng lisp trên sẽ bị thừa số lượng)
Bạn giải quyết thêm giúp mình là : sau khi đếm số lượng block xong thi tất cả các block đó được chọn! (để mình có thể thực hiện các lệnh khác những chú block đó)


1-Xoá đi tất cả các Block có cùng tên, cùng toạ độ chỉ giữ lại duy nhất 1 block = Chịu!
2-sau khi đếm số lượng block xong thi tất cả các block đó được chọn! = Bạn dùng bất cứ lệnh gì sau khi thực hiện lệnh trên. Tại phần chọn đối tượng gỏ P enter là nó nhận lại tất cả các block trên.
Chúc thành công!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1359 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 13 December 2008 - 02:08 PM

1-Xoá đi tất cả các Block có cùng tên, cùng toạ độ chỉ giữ lại duy nhất 1 block = Chịu!


Thuật tóan xóa đối tượng có cùng tên, cùng tọa độ

1. Lập danh sách Block có tên bname: lstBlk, danh sách tọa độ tương ứng lstXY, danh sách handle tương ứng lstHandle
2. Duyệt bắt đầu từ phần tử đầu tiên
i=0;
while (i < lstBlk.len){
TD0 = nth(listXY, i);
j=i+1;
TD1 = nth(lstXY,j);
while (j < lstBlk.len) AND (TD1==TD0){
id = nth(lstHandle, j)
Xóa đối tượng có handle = id
j++;
TD1 = nth(lstXY,j);
}
i=j;
}

  • 0

#1360 cuong49x5

cuong49x5

    biết vẽ pline

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

Đã gửi 15 December 2008 - 10:55 AM

Xin các bác cho hỏi là có cái lisp nào có tính chất sau đây không:
+)Tính diện tích hình chữ nhật theo kiểu là chọn 2 đỉnh đối diện như là vẽ hình chữ nhật
+)Đánh dấu các hình chữ nhật đã tính diện tích
+)Tính tổng diện tích các hình đã tính đưọc!
Bác nào có thì cho em xin với!
  • 0