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

#741 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 27 May 2008 - 11:43 AM

Bạn đã bao giờ nhìn thấy một kiểu hiện thị tương tự như vậy trọng ACAD chưa?


bỞI VÌ NHIỀU LÚC CẦN ĐO 1 CÁI J ĐÓ (XEM ) RỒI XOÁ ĐI, NÊN XUẤT HIẸN Ý TƯỞNG ĐÓ,
mỞ RỘNG VẤN ĐỀ LÀ CHO ĐỐI TƯỢNG TỒN TẠI THEO 1 KHOẢNG THỜI GIAN
LIỆU CÓ THỰC HIỆN ĐUWỌC KHÔNG BÁC.
  • 0
Hãy ước cho trọn 1 ước mơ!

#742 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 May 2008 - 01:12 PM

bỞI VÌ NHIỀU LÚC CẦN ĐO 1 CÁI J ĐÓ (XEM ) RỒI XOÁ ĐI, NÊN XUẤT HIẸN Ý TƯỞNG ĐÓ,
mỞ RỘNG VẤN ĐỀ LÀ CHO ĐỐI TƯỢNG TỒN TẠI THEO 1 KHOẢNG THỜI GIAN
LIỆU CÓ THỰC HIỆN ĐUWỌC KHÔNG BÁC.

bạn phải email cho autodesk thôi! hy vọng trong các phiên bản sau, có được tính năng hiển thị như bạn muốn. Lúc đó lisp mới ăn theo được.
  • 0

#743 thiennvpecc1

thiennvpecc1

    biết vẽ line

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

Đã gửi 27 May 2008 - 01:19 PM

Bác Hoành giup em cai LIsp co nội dung là:
1. Chọn 1 Cung tròn (ARC)
2. Nhập vào đoạn chia a (a< chiều dài cung)
3. Chia cung trònn thành các đoạn co chiều dài cung bằng a.
4. In toạ độ các điểm chia trên cung tròn ra mà hình.
Mục đích của mình là lấy toạ độ các điểm chia thành 1 list.
Bác cố gắng giúp em cái nha.
  • 0

#744 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 May 2008 - 01:27 PM

Bác Hoành giup em cai LIsp co nội dung là:
1. Chọn 1 Cung tròn (ARC)
2. Nhập vào đoạn chia a (a< chiều dài cung)
3. Chia cung trònn thành các đoạn co chiều dài cung bằng a.
4. In toạ độ các điểm chia trên cung tròn ra mà hình.
Mục đích của mình là lấy toạ độ các điểm chia thành 1 list.
Bác cố gắng giúp em cái nha.

Tên lệnh là CC:

(defun c:cc( / ent kc cd p)
(setq
ent (car (entsel "\nHay pick vao 1 arc: "))
kc (getdist "\nNhap vao chieu dai a: ")
cd 0.0
)
(while (setq p (vlax-curve-getPointAtDist ent cd))
(setq cd (+ cd kc))
(princ "\n")
(princ p)
)
(princ)
)
(vl-load-com)

  • 0

#745 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 27 May 2008 - 01:49 PM

anh Hoành kính mến!
EM muốn có 1 cái lisp như sau:
đo kích thước của 1 đoạn thẳng bất kì, của 1 đoạn thẳng chẳng hạn, hiện đường kích thwớc đó ra xong, nhưng mà nó chỉ tồn tại trong 1giây rồi tự xoá.
Xin anh giúp em, em làm mãi mà không đwợc!

1-
(defun C:TMP( / p1 p2)
(command "dimlinear" (setq p1 (getpoint)) (setq p2 (getpoint p1)) (getvar "lastpoint") )
(command "delay" 1000) ;;;Unit: milisecond
(command "erase" (entlast) "")
)
Lisp chạy đúng như đoạn in đậm trên, nhưng trong thời gian đó, bạn không làm gì khác được, chỉ có thể ngồi nhìn chơi! Lý do cơ bản: lisp không có chế độ chạy ở "hậu trường", tức là trả quyền điều khiển cho Acad và âm thầm làm những công việc ở đằng sau.

2- Mình cũng thường xuyên có nhu cầu như bạn. Mình thường dùng 2 lệnh: distance(di) và lengthen(len) cho mục đích này.

3- Một đề xuất khác, đúng mục đích của bạn nhưng là "bán tự động". Những đối tượng bạn xác định là temporary sẽ được cho vào 1 cái "rọ" ss (selection set) nào đó. Khi không cần đến chúng nữa, bạn "bắn" 1 phát là toàn bộ chúng biến mất.
  • 1

#746 thiennvpecc1

thiennvpecc1

    biết vẽ line

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

Đã gửi 27 May 2008 - 03:17 PM

Rất cám ơn bác Hoành.
Bác chỉnh lại cho em một tý đc không.
Bác Hoành giup em cai LIsp co nội dung là:
1. Chọn 1 Cung tròn (ARC)
2. Nhập vào đoạn chia a (a< chiều dài cung)
3. Chọn 1 điểm trên cung tròn (điểm P1)
4. Từ điểm P1 Chia cung tròn thành các đoạn có chiều dài cung bằng a.
5. In toạ độ các điểm chia trên cung tròn ra mà hình.
Bác cố gắng chỉnh lại giúp em cái nha.
  • 0

#747 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 May 2008 - 04:08 PM

Rất cám ơn bác Hoành.
Bác chỉnh lại cho em một tý đc không.
Bác Hoành giup em cai LIsp co nội dung là:
1. Chọn 1 Cung tròn (ARC)
2. Nhập vào đoạn chia a (a< chiều dài cung)
3. Chọn 1 điểm trên cung tròn (điểm P1)
4. Từ điểm P1 Chia cung tròn thành các đoạn có chiều dài cung bằng a.
5. In toạ độ các điểm chia trên cung tròn ra mà hình.
Bác cố gắng chỉnh lại giúp em cái nha.


Lệnh CC1 dưới đây là cải tiến của lệnh CC, đáp ứng được yêu cầu của bạn:

(defun c:cc1()
(setq
ent (car (entsel "\nHay pick vao 1 arc: "))
kc (getdist "\nNhap vao chieu dai a: ")
pbd (getpoint "\nDiem bat dau: ")
cd (vlax-curve-getDistAtParam ent (vlax-curve-getParamAtPoint ent pbd))
)
(while (> (- cd kc) 0.0) (setq cd (- cd kc)))
(while (setq p (vlax-curve-getPointAtDist ent cd))
(setq cd (+ cd kc))
(princ "\n")
(princ p)
)
(princ)
)
(vl-load-com)

  • 1

#748 thiennvpecc1

thiennvpecc1

    biết vẽ line

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

Đã gửi 27 May 2008 - 05:07 PM

Xin cám ơn bác Hoành.
Chúc bác buổi tối vui vẻ.
  • 0

#749 ditimbantot

ditimbantot

    biết zoom

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

Đã gửi 01 June 2008 - 09:56 AM

bạn muốn sửa thế nào?

Mình muốn khi chạy ra bảng toạ độ thì đúng kích thước diện tích mà bảng toạ độ đưa ra , không hiểu sao bảng toạ độ góc ranh của mình khi chạy toạ độ ,muốn chính xác phải xoá đường pline và nhập lại Pline mà khu đất xuất ra thì mới chính xác
Lúc nào cũng phải nhập lại toạ độ nếu chính xác thì thôi nếu không chính xác phải lấy toạ độ mới để đủ diện tích khu đất
- Bác giúp cái nha thanks bác nhiều
  • 0

#750 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 01 June 2008 - 01:38 PM

Mình muốn khi chạy ra bảng toạ độ thì đúng kích thước diện tích mà bảng toạ độ đưa ra , không hiểu sao bảng toạ độ góc ranh của mình khi chạy toạ độ ,muốn chính xác phải xoá đường pline và nhập lại Pline mà khu đất xuất ra thì mới chính xác
Lúc nào cũng phải nhập lại toạ độ nếu chính xác thì thôi nếu không chính xác phải lấy toạ độ mới để đủ diện tích khu đất
- Bác giúp cái nha thanks bác nhiều

Các thuật ngữ chồng chéo và không một lời giải thích thế này thì tôi chịu rồi.

Bạn có thể diễn đạt thật ngắn, thật đủ và rõ cái bạn muốn được không?
Tôi chưa hiểu bạn cần làm cái gì và khó khăn của bạn ở đâu.

Nếu có thể bạn nên gạch đầu dòng là tốt nhất. Bạn nên nhớ rằng người khác không phải là bạn, họ không biết tí gì về công việc chuyên môn của bạn, hãy lý giải thật ngắn và rõ như đang nói chuyện với trẻ nhỏ.
  • 0

#751 thiennvpecc1

thiennvpecc1

    biết vẽ line

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

Đã gửi 02 June 2008 - 09:02 AM

Bác Hoành ah, trong diễn đàn có cái lisp vẽ mặt cắt bình đồ nhưng các đường đồng mức không có cao trình (z=0) mà mình sẽ nhập độ chênh deltaZ và các đường đồng mức tăng dần or giảm dần. Nhưng trong thực tế các đường đồng mức lúc tăng lúc giảm và có những bài toán độ tăng của đường đồng mức không đều (deltaZ thay đổi).
Bài toán của em là:
+ Bình đồ có đường đồng mức có cao độ z (mình đỡ phải khai báo deltaH)
+ Chọn 1 line (or pline) làm mặt cắt tính toán (giống bài toán của bác)
+ Xuất ra phôi mặt cắt ngang (giống bài toán của bác)
Bác Hoành hay bác ssg giúp em với.
  • 0

#752 123ahha

123ahha

    biết pan

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

Đã gửi 03 June 2008 - 01:22 PM

Kính gửi anh Hoành, và cả nhà!
Khi scan to lên hay nhỏ đi thì đim nó bị nhảy !

em muốn có 1 cái lisp như sau:
-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)
-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này
Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan
Mong các bác giúp em!
Chúc bác Hoanh manh khỏe, diễn đàn ngày càng phát triển!
  • 0

#753 123ahha

123ahha

    biết pan

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

Đã gửi 03 June 2008 - 01:30 PM

Kính gửi anh Hoành, và cả nhà!
Khi scan to lên hay nhỏ đi thì đim nó bị nhảy !

em muốn có 1 cái lisp như sau:
-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)
-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này
Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan
Mong các bác giúp em!
Chúc bác Hoanh manh khỏe, diễn đàn ngày càng phát triển!

Mong tin bác mỗi ngày!
  • 0

#754 MANHHUNGXDA

MANHHUNGXDA

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 926 Bài viết
Điểm đánh giá: 458 (tốt)

Đã gửi 03 June 2008 - 01:57 PM

Mong tin bác mỗi ngày!

Thử kết hợpcác lệnh lại xem nào!
  • 0
Hãy ước cho trọn 1 ước mơ!

#755 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 03 June 2008 - 06:17 PM

em muốn có 1 cái lisp như sau:
-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)
-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này
Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan

Bạn dùng thử lisp này. Tên lệnh SCC:

;;;-------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss)
(setq
e (ssname ss i)
Le (append Le (list e))
i (1+ i)
)
)
Le
)
;;;-------------------------------------------------------------
(defun C:SCC( / ss ssd L k e d dtype dt k0 newdtype) ;;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(foreach e L
(setq d (entget e))
(if (wcmatch (cdr (assoc 0 d)) "TEXT,MTEXT")
(entmod (subst (cons 40 (/ (cdr (assoc 40 d)) k)) (assoc 40 d) d))
)
)
(if ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))
dt (tblsearch "dimstyle" dtype)
k0 (cdr (assoc 144 dt))
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))
(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------


Chú ý:
1) Phải chọn cả các đối tượng dim khi chương trình yêu cầu select objects
2) Dim không bị "độ chế", tức là đã bị sửa Dim scale linear trong properties
  • 4

#756 traitimsat034

traitimsat034

    biết vẽ pline

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

Đã gửi 03 June 2008 - 08:26 PM

Bạn dùng thử lisp này. Tên lệnh SCC:


;;;-------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss)
(setq
e (ssname ss i)
Le (append Le (list e))
i (1+ i)
)
)
Le
)
;;;-------------------------------------------------------------
(defun C:SCC( / ss ssd L k e d dtype dt k0 newdtype) ;;;SCale Constant
(setq
ss (ssget)
ssd (ssget "p" '((0 . "DIMENSION")))
L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(foreach e L
(setq d (entget e))
(if (wcmatch (cdr (assoc 0 d)) "TEXT,MTEXT")
(entmod (subst (cons 40 (/ (cdr (assoc 40 d)) k)) (assoc 40 d) d))
)
)
(if ssd (progn
(setq
e (ssname ssd 0)
d (entget e)
dtype (cdr (assoc 3 d))
dt (tblsearch "dimstyle" dtype)
k0 (cdr (assoc 144 dt))
newdtype (strcat dtype "x" (rtos k))
)
(setvar "dimlfac" (/ k0 k))
(if (tblsearch "dimstyle" newdtype)
(command "dimstyle" "r" newdtype)
(command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------


Chú ý:
1) Phải chọn cả các đối tượng dim khi chương trình yêu cầu select objects
2) Dim không bị "độ chế", tức là đã bị sửa Dim scale linear trong properties

lisp hay quá, rất tiện dụng. Cảm ơn bác nhiều!
  • 0

#757 hungbv

hungbv

    biết vẽ circle

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

Đã gửi 03 June 2008 - 09:43 PM

Cho em hỏi, có lisp nào chọn tất cả các đối tượng text trong bản vẽ có cùng một text style không?
  • 0

#758 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 June 2008 - 10:21 PM

Cho em hỏi, có lisp nào chọn tất cả các đối tượng text trong bản vẽ có cùng một text style không?

bạn hãy dùng lệnh filter
  • 0

#759 thiennvpecc1

thiennvpecc1

    biết vẽ line

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

Đã gửi 04 June 2008 - 10:09 AM

Bác Hoành giúp em cai Lisp này với, trong diễn đàn có cái lisp vẽ mặt cắt bình đồ nhưng các đường đồng mức không có cao trình (z=0) mà mình sẽ nhập độ chênh deltaZ và các đường đồng mức tăng dần or giảm dần. Nhưng trong thực tế các đường đồng mức lúc tăng lúc giảm và có những bài toán độ tăng của đường đồng mức không đều (deltaZ thay đổi).
Bài toán của em là:
+ Bình đồ có đường đồng mức có cao độ z (mình đỡ phải khai báo deltaH)
+ Chọn 1 line (or pline) làm mặt cắt tính toán (giống bài toán của bác)
+ Xuất ra phôi mặt cắt ngang (giống bài toán của bác)
Bác Hoành hay bác ssg giúp em với.
  • 0

#760 anhducna

anhducna

    biết vẽ arc

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

Đã gửi 04 June 2008 - 11:25 AM

lisp hay quá, rất tiện dụng. Cảm ơn bác nhiều!

Tôi dùng lisp này và thấy khá hay, nhưng có một nhược điểm, khi mình scale lên thì chữ ghi kích thước và chữ trong bản vẽ không đc scale lên, vẫn giũ kích thước của đối tượng cũ, có cách nào làm tăng chữ ghi kích thước và chữ trong bản vẽ (thuộc đối tượng mình scale) lên theo tỉ lệ sacle thì hay quá!ai làm đc thì giúp với!
  • 0