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

#361 lysamtanhaccs4

lysamtanhaccs4

    biết vẽ circle

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

Đã gửi 03 December 2007 - 10:24 AM

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

các Bác ơi !
em biết autocad từ lâu ròai ....? :) Nhưng lại ko biết lisp...... :)
vậy nay em kính mong các Bác chỉ dùm em ! :)
em cảm ơn nhiều nhiều.....!!!

  • 0

#362 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 03 December 2007 - 01:23 PM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun TB ()
(setq TBSUM 0)
(Princ "\nHay chon cac so can tinh :")
(setq TBSS (ssget '((0 . "TEXT"))))
(setq iTB 0)
(setq NTB (sslength TBss))
(while (< iTB NTB)
(setq TBDT (ssname TBSS iTB))
(setq TBDT (entget TBDT))
(setq TBTEXT (cdr (assoc 1 TBDT)))
(setq TBSUM1 (atof TBTEXT))
(setq TBSUM (+ TBSUM (* TBSUM1 1)))
(setq iTB (1+ iTB))
)
(setq TONG1TB (/ TBSUM ITB))
(setq dlcTB (dnint "\nNhap do cao chu "dccvTB1))
(setq dccvTB1 dlcTB)
(setq PTTB (getpoint "\nChon diem muon viet ket qua :"))
(setq TONG2 (rtos TONG1TB 2 2))
(luuos)
(setvar "osmode" 0)
(command "text" "j" "r" PTTB dlcTB "0" TONG2 "")
(traos)
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(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 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
;--------------------

[/quote]

Bạn ơi xem lại cho mình cái này với, nó không chạy được. thanks
  • 0

#363 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 03 December 2007 - 01:43 PM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun c:TB ()
(setq TBSUM 0)
(Princ "\nHay chon cac so can tinh :")
(setq TBSS (ssget '((0 . "TEXT"))))
(setq iTB 0)
(setq NTB (sslength TBss))
(while (< iTB NTB)
(setq TBDT (ssname TBSS iTB))
(setq TBDT (entget TBDT))
(setq TBTEXT (cdr (assoc 1 TBDT)))
(setq TBSUM1 (atof TBTEXT))
(setq TBSUM (+ TBSUM (* TBSUM1 1)))
(setq iTB (1+ iTB))
)
(setq TONG1TB (/ TBSUM ITB))
(setq dlcTB (dnint "\nNhap do cao chu "dccvTB1))
(setq dccvTB1 dlcTB)
(setq PTTB (getpoint "\nChon diem muon viet ket qua :"))
(setq TONG2 (rtos TONG1TB 2 2))
(luuos)
(setvar "osmode" 0)
(command "text" "j" "r" PTTB dlcTB "0" TONG2 "")
(traos)
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(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 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
;--------------------

Bạn ơi xem lại cho mình cái này với, nó không chạy được. thanks


Xin lổi ! Đã sửa (dòng màu đỏ ấy)
  • 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


#364 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 03 December 2007 - 02:30 PM

vẫn chưa được bạn ạ. chạy nó báo lỗi

Select objects: ; error: no function definition: NSTR1

bạn giúp mình với. Thanks
  • 0

#365 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 December 2007 - 02:47 PM

vẫn chưa được bạn ạ. chạy nó báo lỗi

Select objects: ; error: no function definition: NSTR1

bạn giúp mình với. Thanks

Mình sẽ giúp bạn, nhưng trước hết vui lòng trả lời câu hỏi:
Bạn tập viết lisp hay chỉ cần chương trình để sử dụng?
  • 0

#366 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 03 December 2007 - 04:27 PM

Mình sẽ giúp bạn, nhưng trước hết vui lòng trả lời câu hỏi:
Bạn tập viết lisp hay chỉ cần chương trình để sử dụng?


Cảm ơn bạn SSG, Mình cần cái này để dùng.
  • 0

#367 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 04 December 2007 - 08:59 PM

1) Tại sao bạn không dùng lệnh dimordinate? Không nhất thiết phải là tâm đường tròn mà tọa độ của 1 điểm bất kỳ bạn pick trên màn hình

2) Với lệnh dim, sau khi pick 2 điểm bạn gõ M, cho phép edit luôn một thể. Dùng lisp cũng không hơn gì!


1. Em có 1 bản vẽ cần xác định tọa độ tâm của nhiều đường tròn, giá trị của tâm đường tròn sẽ ghi vào ở vị trí cách tâm mỗi đường tròn 1 giá trị X, Y nào đó. Nếu dụng lệnh dimmordinate thì phải làm thủ công cứ mỗi lần chọn mỗi đường tròn, sau đó bắt điểm và lại phải chỉ vị trí cho nó. Như thế rất lâu.

2. Giả sử như mình có một đoạn thẳng có chiều dài là 1500. Khi ghi kích thước thì mình lại muốn thể hiện là 3000/2=1500. Có cách nào dùng Lisp để ghi tự động không. Vì có trường hợp trong 1 bản vẽ có nhiều kích thước phải ghi như vậy, nếu dùng lệnh "ed" hoặc là "m" khi dim thì có nhiều lúc bỏ sót quên ghi thì làm sao được

Đây là forum viết lisp theo yêu cầu sao minh không thấy có ai giúp cả nhỉ
  • 0

#368 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 05 December 2007 - 08:02 AM

Cảm ơn bạn SSG, Mình cần cái này để dùng.

Bạn sang đây copy code nhé:
http://www.cadviet.com/forum/index.php?showtopic=2291
  • 0

#369 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 05 December 2007 - 08:42 AM

1. Em có 1 bản vẽ cần xác định tọa độ tâm của nhiều đường tròn, giá trị của tâm đường tròn sẽ ghi vào ở vị trí cách tâm mỗi đường tròn 1 giá trị X, Y nào đó. Nếu dụng lệnh dimmordinate thì phải làm thủ công cứ mỗi lần chọn mỗi đường tròn, sau đó bắt điểm và lại phải chỉ vị trí cho nó. Như thế rất lâu.

2. Giả sử như mình có một đoạn thẳng có chiều dài là 1500. Khi ghi kích thước thì mình lại muốn thể hiện là 3000/2=1500. Có cách nào dùng Lisp để ghi tự động không. Vì có trường hợp trong 1 bản vẽ có nhiều kích thước phải ghi như vậy, nếu dùng lệnh "ed" hoặc là "m" khi dim thì có nhiều lúc bỏ sót quên ghi thì làm sao được

Đây là forum viết lisp theo yêu cầu sao minh không thấy có ai giúp cả nhỉ

Lý do là ở bạn! Yêu cầu bạn nêu lần trước khác với lần này (chỉ chọn 1 đường tròn). Lập trình viên chỉ có hứng thú lập trình khi họ thấy rõ ý nghĩa công việc mình làm có giá trị sử dụng thiết thực. Một đường tròn tất nhiên là dễ viết hơn nhiều đường tròn, nhưng "nhiều" cho thấy tính "chính đáng" của yêu cầu hơn là "một"!
Ngay cả lần này, ý nghĩa thì đã rõ, nhưng yêu cầu thì chưa rõ lắm:
1) Giá trị X, Y nào đó được lấy từ đâu? Người dùng tùy chọn hay là quy định thống nhất từ trước? Chẳng hạn, lấy h = textheight hiện hành làm chuẩn thì X, Y bằng bao nhiêu so với h? Hình thức ghi như thế nào? Ví dụ với X= 10.5; Y=15.6 thì ghi là "X10.5 Y15.6" hay là kiểu nào khác?
2) Dạng 3000/2=1500 thì hiểu rồi. Nhưng lần trước bạn nói ví dụ, có nghĩa là sẽ có dạng 3000/3 = 1000, 3000/4 = 750...? "Ví dụ như" và "luôn luôn có dạng" khác nhau hoàn toàn!
3) Bạn cân nhắc thêm ý này nữa: tạo lệnh mới để ghi kích thước dạng 3000/2=1500 hay là cứ ghi bình thường, sau đó dùng lệnh (cho phép chọn hàng loạt đối tượng dimensions) để convert toàn bộ chúng theo dạng trên? Cái nào tiện dụng cho bạn hơn?
Có thể bạn chưa hiểu nhiều về lập trình, nhưng buộc bạn phải hiểu các yêu cầu cần và đủ để một bài toán bất kỳ có được lời giải chứ? Chương trình luôn luôn có tính máy móc, nghĩa là mọi cái phải rõ ràng, cụ thể đến từng chi tiết nhỏ nhặt nhất. Một chương trình gọi là "thông minh", có khả năng tùy biến linh hoạt, thực chất cũng là mang tính máy móc ở mức độ tinh vi hơn mà thôi. Chương trình không thể hiểu được khái niệm "một giá trị x, y nào đó"!
Bạn bổ sung thật rõ yêu cầu thì chắc chắn sẽ có bài giải!
  • 0

#370 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 05 December 2007 - 10:33 AM

các bác ơi bản vẽ của mình có rất nhiều dim đã bị modify, có bác nào có lisp trả về kích thước đúng trong acad 2007 thì cho mình xin, mình đang rất cần, thanks!!
  • 0

#371 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 05 December 2007 - 10:43 AM

các bác ơi bản vẽ của mình có rất nhiều dim đã bị modify, có bác nào có lisp trả về kích thước đúng trong acad 2007 thì cho mình xin, mình đang rất cần, thanks!!

Dùng lệnh DIMEDIT rồi chọn tham số New

Nhấn OK luôn nếu ACAD hiện ra bảng còn không thì gõ enter luôn.
Sau đó chọn các dim là xong.
  • 0

#372 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 05 December 2007 - 10:51 AM

các bác ơi bản vẽ của mình có rất nhiều dim đã bị modify, có bác nào có lisp trả về kích thước đúng trong acad 2007 thì cho mình xin, mình đang rất cần, thanks!!

Dung lenh "dimreassoc"
  • 0

#373 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 06 December 2007 - 01:55 PM

Bạn sang đây copy code nhé:
http://www.cadviet.com/forum/index.php?showtopic=2291


Cảm ơn bác SSG.mình đã copy được rồi. Nhờ có lisp của các bác mà hiệu suất công việc của mình tăng lên rất nhiều.
  • 0

#374 ngayve324

ngayve324

    biết lệnh xref

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

Đã gửi 09 December 2007 - 05:03 PM

các bác ơi bản vẽ của mình có rất nhiều dim đã bị modify, có bác nào có lisp trả về kích thước đúng trong acad 2007 thì cho mình xin, mình đang rất cần, thanks!!

mình thì hay dung cách này. cứ ED rùi gõ <> là ra đúng kích thước thực. hix nông dân quá
  • 0

#375 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 10 December 2007 - 06:04 PM

Lý do là ở bạn! Yêu cầu bạn nêu lần trước khác với lần này (chỉ chọn 1 đường tròn). Lập trình viên chỉ có hứng thú lập trình khi họ thấy rõ ý nghĩa công việc mình làm có giá trị sử dụng thiết thực. Một đường tròn tất nhiên là dễ viết hơn nhiều đường tròn, nhưng "nhiều" cho thấy tính "chính đáng" của yêu cầu hơn là "một"!
Ngay cả lần này, ý nghĩa thì đã rõ, nhưng yêu cầu thì chưa rõ lắm:
1) Giá trị X, Y nào đó được lấy từ đâu? Người dùng tùy chọn hay là quy định thống nhất từ trước? Chẳng hạn, lấy h = textheight hiện hành làm chuẩn thì X, Y bằng bao nhiêu so với h? Hình thức ghi như thế nào? Ví dụ với X= 10.5; Y=15.6 thì ghi là "X10.5 Y15.6" hay là kiểu nào khác?
2) Dạng 3000/2=1500 thì hiểu rồi. Nhưng lần trước bạn nói ví dụ, có nghĩa là sẽ có dạng 3000/3 = 1000, 3000/4 = 750...? "Ví dụ như" và "luôn luôn có dạng" khác nhau hoàn toàn!
3) Bạn cân nhắc thêm ý này nữa: tạo lệnh mới để ghi kích thước dạng 3000/2=1500 hay là cứ ghi bình thường, sau đó dùng lệnh (cho phép chọn hàng loạt đối tượng dimensions) để convert toàn bộ chúng theo dạng trên? Cái nào tiện dụng cho bạn hơn?
Có thể bạn chưa hiểu nhiều về lập trình, nhưng buộc bạn phải hiểu các yêu cầu cần và đủ để một bài toán bất kỳ có được lời giải chứ? Chương trình luôn luôn có tính máy móc, nghĩa là mọi cái phải rõ ràng, cụ thể đến từng chi tiết nhỏ nhặt nhất. Một chương trình gọi là "thông minh", có khả năng tùy biến linh hoạt, thực chất cũng là mang tính máy móc ở mức độ tinh vi hơn mà thôi. Chương trình không thể hiểu được khái niệm "một giá trị x, y nào đó"!
Bạn bổ sung thật rõ yêu cầu thì chắc chắn sẽ có bài giải!


Sau đây là những bổ sung của em:
1. Cần xác định tọa độ tâm của nhiều đường tròn trong 1 bản vẽ, các đường tròn này có bán kính khác nhau. Giá trị của tâm đường tròn sẽ ghi vào ở vị trí cách tâm mỗi đường tròn 1 giá trị X, Y. Chiều cao chữ để ghi textheight= h, giá trị X= Y = 0.5h. Giá trị h do người dùng tự nhập vào. Các giá trị tâm đường tròn sẽ ghi dạng "x=....; y= ...."
2. Dạng ghi kích thước của em là 3000/2=1500. Lệnh này có 2 hình thức là ghi bình thường, và convert những kích thước lỡ đã bị ghi rồi.

Vì công việc nên em rất cần những cái này, bác gắng giúp em với nhé. Cám ơn bác SSG nhiều
  • 0

#376 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 2007 - 06:50 PM

Sau đây là những bổ sung của em:
1. Cần xác định tọa độ tâm của nhiều đường tròn trong 1 bản vẽ, các đường tròn này có bán kính khác nhau. Giá trị của tâm đường tròn sẽ ghi vào ở vị trí cách tâm mỗi đường tròn 1 giá trị X, Y. Chiều cao chữ để ghi textheight= h, giá trị X= Y = 0.5h. Giá trị h do người dùng tự nhập vào. Các giá trị tâm đường tròn sẽ ghi dạng "x=....; y= ...."
2. Dạng ghi kích thước của em là 3000/2=1500. Lệnh này có 2 hình thức là ghi bình thường, và convert những kích thước lỡ đã bị ghi rồi.

Vì công việc nên em rất cần những cái này, bác gắng giúp em với nhé. Cám ơn bác SSG nhiều

Tại sao bạn không giúp người trợ giúp nhanh chóng hiểu ra bạn muốn gì. Trăm nghe không bằng một thấy, nếu bạn upload 1 file mẫu trong đó có phần bản vẽ trước khi đánh dim, và phần khác là bản vẽ sau khi đánh dim. Mọi việc sẽ rõ như ban ngày, người viết lisp giúp bạn sẽ giảm thiểu công sức mà mã lisp lại đúng như ý của bạn.

Bạn thử đọc và làm theo như các yêu cầu của bác Vbao, tôi thấy đó là chuẩn mực trong việc diễn giải cho người trợ giúp hiểu mình muốn gì. Như thế đỡ tốn công của bạn và cũng đỡ tốn công của người trợ giúp, làm 1 phát ăn ngay, sản phẩm lisp lại như ý.
  • 0

#377 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 11 December 2007 - 08:33 AM

Sau đây là những bổ sung của em:
1. Cần xác định tọa độ tâm của nhiều đường tròn trong 1 bản vẽ, các đường tròn này có bán kính khác nhau. Giá trị của tâm đường tròn sẽ ghi vào ở vị trí cách tâm mỗi đường tròn 1 giá trị X, Y. Chiều cao chữ để ghi textheight= h, giá trị X= Y = 0.5h. Giá trị h do người dùng tự nhập vào. Các giá trị tâm đường tròn sẽ ghi dạng "x=....; y= ...."
2. Dạng ghi kích thước của em là 3000/2=1500. Lệnh này có 2 hình thức là ghi bình thường, và convert những kích thước lỡ đã bị ghi rồi.

Vì công việc nên em rất cần những cái này, bác gắng giúp em với nhé. Cám ơn bác SSG nhiều

Mình hiểu rồi, nhưng bạn cũng nên rút kinh nghiệm theo như anh Hoành đã nói trên.
Có 1 điều báo trước: khi đã áp đặt vị trí ghi text (một cách máy móc), có thể có những text sẽ cán qua nét vẽ của đường tròn hoặc những đường nét khác có sẵn trên bản vẽ. Các trường hợp này bạn phải tự xử lý lấy.
  • 0

#378 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 12 December 2007 - 07:17 AM

Chương trình ghi tọa độ tâm đường tròn và ghi kích thước kiểu xxxx/2 = yyy:


;;;-------------------------------------------------------------------------------
(defun wtxthp (txt h p / sty d h) ;;;Write txt with 3 parameters
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
)
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p)
(if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)
;;;-------------------------------------------------------------------------------
(defun cc1(e dx dy / d p x y pt) ;;;Coordinate of 1 Circle
(setq
d (entget e)
p (trans (cdr (assoc 10 d)) 0 1)
x (car p) y (cadr p)
pt (trans (list (+ x dx) (+ y dy)) 1 0)
)
(wtxthp (strcat "x=" (rtos x) "; y=" (rtos y)) h pt)
)
;;;-------------------------------------------------------------------------------
(defun C:CC() ;;;Coordinate of Circles
(if (null h0) (setq h0 2.5))
(setq
ss (ssget '((0 . "CIRCLE")))
h (getreal (strcat "\nText height <" (rtos h0) ">:"))
oldos (getvar "osmode")
)
(if (null h) (setq h h0) (setq h0 h))
(setvar "osmode" 0)
(while (setq e (ssname ss 0))
(cc1 e (/ h 2) (/ h 2))
(ssdel e ss)
)
(setvar "osmode" oldos)
(princ)
)
;;;-------------------------------------------------------------------------------
(defun C:DD( / ss e d v oldtxt newtxt d2) ;;;convert Dimensions to Divided format
(setq ss (ssget '((0 . "DIMENSION"))))
(while (setq e (ssname ss 0))
(setq
d (entget e)
v (cdr (assoc 42 d))
oldtxt (assoc 1 d)
newtxt (cons 1 (strcat (rtos (* v 2)) "/2=<>"))
d2 (subst newtxt oldtxt d)
)
(entmod d2)
(ssdel e ss)
)
(princ)
)
;;;-------------------------------------------------------------------------------
(defun C:XDD(/ p1 p2 x txt) ;;;make X Dimension by Divided format
(setq
p1 (getpoint "\nFirst point:")
p2 (getpoint p1 "\nSecond point:")
x (abs (- (car p1) (car p2)))
txt (strcat (rtos (* x 2)) "/2=<>")
)
(command "dimlinear" p1 p2 "h" "m" txt pause)
)
;;;-------------------------------------------------------------------------------
(defun C:YDD(/ p1 p2 y txt) ;;;make Y Dimension by Divided format
(setq
p1 (getpoint "\nFirst point:")
p2 (getpoint p1 "\nSecond point:")
y (abs (- (cadr p1) (cadr p2)))
txt (strcat (rtos (* y 2)) "/2=<>")
)
(command "dimlinear" p1 p2 "v" "m" txt pause)
)
;;;-------------------------------------------------------------------------------


Có 4 lệnh:
CC, Coordinate of Circles
DD, convert Dimensions to Divided format.
XDD, make X Dimension by Divided format
YDD, make Y Dimension by Divided format

Chú ý:
Lệnh convert DD áp dụng cho mọi đối tượng dimension nhưng các lệnh make chỉ áp dụng cho dimlinear và buộc phải chia thành 2 lệnh XDD và YDD. Lý do: dù có xử lý gì đi nữa, cuối cùng chương trình vẫn phải gọi lệnh dimlinear. Sau khi pick 2 điểm, người dùng có thể tùy ý chọn dim theo phương ngang hoặc thẳng đứng, cái đó nằm ngoài tầm kiểm soát của chương trình nên phải quy định rõ ràng ngay từ đầu! Đã làm đầy đủ theo ý bạn, nhưng theo quan điểm của mình, bạn cứ đánh dim bình thường, sau đó dùng DD cho tất cả các dim muốn convert. Chỉ 1 lần là OK ngay.
  • 0

#379 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 12 December 2007 - 01:56 PM

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

Nhờ bác viết giúp lisp chuyển tất cả các đối tượng trong bản vẽ có cao độ z khác 0 về z=0.Cám ơn bác nhiều!
  • 0

#380 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 12 December 2007 - 02:36 PM

Nhờ bác viết giúp lisp chuyển tất cả các đối tượng trong bản vẽ có cao độ z khác 0 về z=0.Cám ơn bác nhiều!


http://www.cadviet.com/sub/hdownload.php?id=lisp&p=4
  • 1

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