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

#2561 duytrung

duytrung

    biết pan

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

Đã gửi 15 August 2009 - 12:18 PM

(Hiện nay mình mới viết được phần này còn chuyễn ngược lại thì chưa thành công).
*Tên lệnh: TCVN-VNI
Nhập lệnh xong lisp hỏi chọn đối tượng bạn chọn các text muốn chuyễn mã lisp sẽ tự tạo 1 textstyle tên THEP font VNI-HELVE và chuyễn các text này về textstryle này tất nhiên đã chuyễn mã rồi, bây giờ bạn có thể chỉnh sửa các text này bằng bảng mã VNI.*** như bình thường. Lưu ý các text sau khi chuyễn mã sẽ viết hoa toàn bộ bất kể trước đó viết thường hay hoa.
http://www.4shared.c...b/chuyenma.html


cảm ơn rất nhiều vi thực hiện rất nhanh, nhưng còn chữ thường thì còn phải chỉnh lại
  • 0

#2562 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 15 August 2009 - 01:39 PM

cảm ơn rất nhiều vi thực hiện rất nhanh, nhưng còn chữ thường thì còn phải chỉnh lại

Do mình vẽ bản vẽ KT toàn dùng chử hoa nên mới làm thế. Bạn dùng lệnh TCASE có sẳn của cad để chỉnh chữ thường và hoa. Tin rằng cũng rất nhanh.
  • 2

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


#2563 thanhlamct

thanhlamct

    biết lệnh offset

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

Đã gửi 15 August 2009 - 02:46 PM

------------------------------------------
ok, mình đã viết xong cho bạn rồi, bạn hãy làm theo cách này nhé:


Cảm ơn Tomboy rất nhiều.
Chương trình thật tuyệt vời, như mình mong muốn. Chương trình giúp mình khâu nhập dữ liệu vốn mất rất nhiều thời gian.
Quá hay. :bigsmile:
  • 0

#2564 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 15 August 2009 - 08:08 PM

Hôm nay mình muốn nhờ diễn đàn 2 việc:
Mình thường dùng lệnh overkill để dọn dẹp bản vẽ nhưng không hiểu sao sau khi dùng lệnh này bản vẽ lại nặng hơn. Vậy nhờ mọi người giúp mình viết lisp có tác dụng tương tự như lệnh này nhưng làm bản vẽ nhẹ đi.
Thứ 2 là mình muốn nhờ viết 1 lisp "nhân (hoặc chia) dim". Có nghĩa là sau khi gõ lệnh, chọn toàn bộ dim muốn nhân hoặc chia rồi chọn số muốn nhân (hoặc chia) thì giá trị dim sẽ tăng lên (hoặc giảm đi) bằng số mà mình đã nhập.
Cảm ơn!
  • 0
http://khuyen.space

#2565 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 August 2009 - 08:36 PM

Mình thường dùng lệnh overkill để dọn dẹp bản vẽ nhưng không hiểu sao sau khi dùng lệnh này bản vẽ lại nặng hơn. Vậy nhờ mọi người giúp mình viết lisp có tác dụng tương tự như lệnh này nhưng làm bản vẽ nhẹ đi.

Thứ 2 là mình muốn nhờ viết 1 lisp "nhân (hoặc chia) dim". Có nghĩa là sau khi gõ lệnh, chọn toàn bộ dim muốn nhân hoặc chia rồi chọn số muốn nhân (hoặc chia) thì giá trị dim sẽ tăng lên (hoặc giảm đi) bằng số mà mình đã nhập.
Cảm ơn!

Cái thứ nhất : Em có thể upload file .dwg lên diễn đàn.

Cái thứ hai : Tue_NV chưa rõ ý
SVBA có thể nói rõ hơn không ?
Thứ nhất : chọn số muốn nhân : Cái này nhập từ bàn phím hay là chọn 1 text trên màn hình?
Thứ hai : là kết quả đầu ra : Em muốn xuất kết quả như thế nào? Kết quả Cập nhật trực tiếp vào DIMENSION đã chọn hay là....
SVBA muốn độ chế DIM à?

SVBA nói rõ nhé
  • 2

#2566 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 15 August 2009 - 09:56 PM

Cái thứ nhất : Em có thể upload file .dwg lên diễn đàn.

Cái thứ hai : Tue_NV chưa rõ ý
SVBA có thể nói rõ hơn không ?
Thứ nhất : chọn số muốn nhân : Cái này nhập từ bàn phím hay là chọn 1 text trên màn hình?
Thứ hai : là kết quả đầu ra : Em muốn xuất kết quả như thế nào? Kết quả Cập nhật trực tiếp vào DIMENSION đã chọn hay là....
SVBA muốn độ chế DIM à?

SVBA nói rõ nhé


Cảm ơn anh Tue_NV! Anh xem file này giúp em. Hiện tại Cad của em đang bị lỗi nên em chưa xóa được một số thứ không liên quan. File này có thể mô tả cả 2 câu hỏi của em.

Câu thứ nhất: Anh xem phần Chi tiết phễu thoát sàn hay Chi tiết lavabo, xí bệt; Chi tiết hộp chữa cháy... Đa phần đều bị 2 đối tượng trùng lên nhau. (Em không biết có phải do em copy từ bản vẽ này sang bản vẽ khác không). Text cũng bị trùng lên nhau, nhưng em đã dùng lisp xóa text trùng của anh lần trước xóa đi rồi. Với hầu hết các bản vẽ, em dùng lệnh Pu thấy bản vẽ nhẹ đi, còn dùng lệnh Overkill lại thấy bản vẽ nặng lên. Anh xem giùm em.

Câu thứ 2: Em muốn chọn số muốn nhân nhập từ bàn phím, kết quả đầu ra nhập trực tiếp vào DIMENSION.
Anh xem trong bản vẽ, phần Chi tiết bể tự hoại. Sau khi em dùng lệnh MA, các DIM đã bị tăng lên 4 lần, giờ em muốn giảm nó đi 4 lần.

Còn 1 chi tiết nữa, không liên quan đến câu hỏi của em, mà liên quan tới câu đố của bác KE AN MAY DI VANG. Ở chi tiết ống thông hơi qua mái, em thấy rất lạ là có đối tượng di chuột đến thì sáng lên, có đối tượng di chuột đến thì ẩn đi, mặc dù chúng cùng Layer và bảng Properties giống nhau. Ai biết xin giải thích dùm.
Cảm ơn anh Tue_NV! Cảm ơn Diễn đàn.
  • 0
http://khuyen.space

#2567 tomboy

tomboy

    biết vẽ polygon

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

Đã gửi 15 August 2009 - 11:00 PM

Cái thứ nhất : Em có thể upload file .dwg lên diễn đàn.

Cái thứ hai : Tue_NV chưa rõ ý
SVBA có thể nói rõ hơn không ?
Thứ nhất : chọn số muốn nhân : Cái này nhập từ bàn phím hay là chọn 1 text trên màn hình?
Thứ hai : là kết quả đầu ra : Em muốn xuất kết quả như thế nào? Kết quả Cập nhật trực tiếp vào DIMENSION đã chọn hay là....
SVBA muốn độ chế DIM à?

SVBA nói rõ nhé

mình nghĩ cái này không cần phải lisp đâu tại vì cad đã hỗ trợ rồi. Bạn dùng lệnh DIMSTYLE chọn dimstyle mà bạn muốn sửa chữa hoặc bạn có thể tạo dimstyle mới sau đó nhấp vào nút Modify và chọn vào thẻ Primary Units và vào tiếp mục Measurement Scale tại ô Scale factor bạn chọn giá trị cần tăng hay giảm tỉ lệ của dimstyle đó. Chúc bạn thành công
  • 1

#2568 t031285

t031285

    biết vẽ rectang

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

Đã gửi 15 August 2009 - 11:13 PM

Các bạn viết giùm 1 lisp như sau với:khi ta đánh dim100 thì sẽ hiện ra 1 loại dim giá trị như dim100 trong dimtyle,tương tự
dim20,dim50....Chân thành cảm ơn.
  • 0

#2569 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 16 August 2009 - 05:51 AM

mình nghĩ cái này không cần phải lisp đâu tại vì cad đã hỗ trợ rồi. Bạn dùng lệnh DIMSTYLE chọn dimstyle mà bạn muốn sửa chữa hoặc bạn có thể tạo dimstyle mới sau đó nhấp vào nút Modify và chọn vào thẻ Primary Units và vào tiếp mục Measurement Scale tại ô Scale factor bạn chọn giá trị cần tăng hay giảm tỉ lệ của dimstyle đó. Chúc bạn thành công


Mình hiểu ý bạn, nhưng bạn chưa hiểu ý mình. Nếu mình chỉnh Dimstyle thì toàn bộ Dim trong Dimstyle sẽ bị thay đổi. Nhưng mình chỉ muốn thay đổi một số Dim trong Dimstyle đó thôi. Mình không muốn tạo Dimstyle mới. Cảm ơn bạn đã quan tâm!
  • 0
http://khuyen.space

#2570 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 August 2009 - 06:26 AM

Mình hiểu ý bạn, nhưng bạn chưa hiểu ý mình. Nếu mình chỉnh Dimstyle thì toàn bộ Dim trong Dimstyle sẽ bị thay đổi. Nhưng mình chỉ muốn thay đổi một số Dim trong Dimstyle đó thôi. Mình không muốn tạo Dimstyle mới. Cảm ơn bạn đã quan tâm!

Chào em svba. Sinh nhật vui vẻ nhé.

Điiều em nói trên thì chưa cần sử dụng tới Lisp. Lệnh này sẽ giúp em: DIMOVERRIDE
Command: DIMOVERRIDE (1)
Enter dimension variable name to override or [Clear overrides]: dimlfac (2)

Enter new value for dimension variable <1>: 0.25 (3)

Enter dimension variable name to override: (4)

Select objects: Specify opposite corner: 208 found (5)

Select objects: (6)

(1) : gõ DIMOVERRIDE
(2) : Hàng này xác định tên biến sẽ thay đổi kích thước. ở đây mình xác định biến DimLfac sẽ thay đổi
(3) : giá trị biến sẽ thay đổi. Ở đây là số 0.25 . Kích thước thật giảm 4 lần (1/4)
(4) : Xác định tiếp tên biến sẽ thay đổi. Cón không xác định nữa thì ấn Enter. Ở đây ta ấn Enter
(5) : Quét vùng chọn DIMENSION. Các sẽ tự lọc ra đối tượng nào là DIM để cập nhật giá trị biến DIMLFAC = 0.25 cho nó
(6) : Thôi chọn đối tượng -> Enter -> Xong


Các bạn viết giùm 1 lisp như sau với:khi ta đánh dim100 thì sẽ hiện ra 1 loại dim giá trị như dim100 trong dimtyle,tương tự
dim20,dim50....Chân thành cảm ơn.

Chào bạn t031285
Bạn sử dụng code này xem nhé :
(defun c:dim100() 
(if (tblsearch "Dimstyle" "dim100")
(command "dimstyle" "R" "dim100")
(alert "Chua co Dimstyle DIM100. Moi ban tao kieu Dímtyle Dim100 tren ban ve ")
)
(command "graphscr")
(princ)
)

  • 3

#2571 t031285

t031285

    biết vẽ rectang

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

Đã gửi 16 August 2009 - 08:05 AM

Cảm ơn bạn,mình muốn khi đánh dim100 nó sẽ tự tạo tất cả các thông số của dim100 khi đó chỉ việc sử dụng thôi.Bạn có thể viết giùm mình được không.Thanks
  • 0

#2572 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 16 August 2009 - 09:55 AM

Chào conghoan1003 và Tue_NV,
Thiep cũng có một thời gian làm việc cùng với Bảm đảm An toàn Hàng Hải II, nạo vét luồng SG - Vũng Tàu từ Tân Cảng đến Ghềnh Rái, Người ta nạo vét đến cots 8.2m sai số 0.3m (mốc cao độ Mũi Nai). Còn yêu cầu của Conghoan thi vét bùn theo bề mặt địa hình tự nhiên rồi offset xuống, lại không có sai số nạo vét!
Thôi thì cũng theo yêu cầu này, Thiep xin gánh cho Tue một chút tạo ra lisp như ý muốn của CongHoan:

Cảm ơn Thiệp đã giúp đỡ!
Cái này chạy tốt lắm nhưng có một số điểm chưa được hoàn thiện lắm Thiêp cố gắn chỉnh lại cho mình tí để lisp hoàn thiện hơn.
Thứ nhất: Mình muốn các thông số như mái dốc vét, chiều sâu vét mình chỉ nhập vào đối với mặt cắt đầu tiên thôi, còn các mặt cắt sau thì lisp tự hiểu như mặt cắt đầu. Sau khi thực hiện xong mặt cắt thứ nhất thì lisp tự động thực hiện lệng cho mặt cắt tiếp theo cho đến khi bấm Esc thì kết thúc lệnh. Có nghĩa là đối với các mặt cắt sau mình chỉ cần kích 3 lần: chọn polyline, chọn điểm giới hạn bên trái, bên phải thì được. Vì mình có rất nhiều mặt cắt nên cần làm cho thật nhanh nên hy vong Thiêp sữa lại để lisp thực hiên cho nhanh.
Thứ hai: đường vét là đường offet đường tự nhiên xuống chứ không phải coppy xuống như lisp của Thiêp.
Cảm ơn thiêp đã giúp đỡ! Mong hồi âm của Thiệp!
  • 0
Học học nữa học mãi.
Đúp học lại!

#2573 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 August 2009 - 10:26 AM

Cảm ơn bạn,mình muốn khi đánh dim100 nó sẽ tự tạo tất cả các thông số của dim100 khi đó chỉ việc sử dụng thôi.Bạn có thể viết giùm mình được không.Thanks

[Chào bạn t031285
Bạn có thể nói rõ các thông số của Dim100 bao gồm các thông số nào được thiết lập
Viết Lisp cho bạn thì Tue_NV sẽ viết được nhưng dữ liệu đầu vào bạn nói chưa rõ ràng
thông số của dim100 bao gồm thông số nào?? Nó bằng bao nhiêu?

Mong bạn nói rõ ý
  • 0

#2574 t031285

t031285

    biết vẽ rectang

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

Đã gửi 16 August 2009 - 02:41 PM

[Chào bạn t031285
Bạn có thể nói rõ các thông số của Dim100 bao gồm các thông số nào được thiết lập
Viết Lisp cho bạn thì Tue_NV sẽ viết được nhưng dữ liệu đầu vào bạn nói chưa rõ ràng
thông số của dim100 bao gồm thông số nào?? Nó bằng bao nhiêu?

Mong bạn nói rõ ý

Mình gửi file đính kèm đây.Cảm ơn bạn đã quan tâm giúp đỡ.
http://www.cadviet.c.../2/dim100_1.rar
  • 0

#2575 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 August 2009 - 03:35 PM

Cảm ơn Thiệp đã giúp đỡ!
Cái này chạy tốt lắm nhưng có một số điểm chưa được hoàn thiện lắm Thiêp cố gắn chỉnh lại cho mình tí để lisp hoàn thiện hơn.
Thứ nhất: Mình muốn các thông số như mái dốc vét, chiều sâu vét mình chỉ nhập vào đối với mặt cắt đầu tiên thôi, còn các mặt cắt sau thì lisp tự hiểu như mặt cắt đầu. Sau khi thực hiện xong mặt cắt thứ nhất thì lisp tự động thực hiện lệng cho mặt cắt tiếp theo cho đến khi bấm Esc thì kết thúc lệnh. Có nghĩa là đối với các mặt cắt sau mình chỉ cần kích 3 lần: chọn polyline, chọn điểm giới hạn bên trái, bên phải thì được. Vì mình có rất nhiều mặt cắt nên cần làm cho thật nhanh nên hy vong Thiêp sữa lại để lisp thực hiên cho nhanh.
Thứ hai: đường vét là đường offet đường tự nhiên xuống chứ không phải coppy xuống như lisp của Thiêp.
Cảm ơn thiêp đã giúp đỡ! Mong hồi âm của Thiệp!

Chào conghoan
Lisp này Tue_NV đã viết xong. Conghoan chạy thử xem sao :
http://www.cadviet.c...les/2/vbun6.lsp
Conghoan cho ý kiến nhé


Mình gửi file đính kèm đây.Cảm ơn bạn đã quan tâm giúp đỡ.

Chào bạn t031285
file của bạn hoàn toàn không thể đọc được.



Thôi thì cũng theo yêu cầu này, Thiep xin gánh cho Tue một chút tạo ra lisp như ý muốn của CongHoan:

Cảm ơn Thiep rất nhiều. Nếu có thể giúp được Tue_NV thì nếu trong khả năng của bạn có thể vui lòng trả lời cho Tue_NV bài viết này không?
( - Bài viết số 20)
http://www.cadviet.c...amp;#entry54934
Cảm ơn Thiep
  • 1

#2576 tomboy

tomboy

    biết vẽ polygon

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

Đã gửi 16 August 2009 - 05:39 PM

Chào các bác! Em muốn đánh số thứ tự 1A, 2A, 3A ... . Bác nào đã viết lisp mà chỉ cần copy 1A thì tự động
những text sau là 2A, 3A ko a. Nếu có thì có thể post lên được ko ạ. Cảm ơn các bác nhiều.

Chào bạn, ý tưởng của bạn thật là hay, nó sẽ giúp rất nhiều cho công việc của người biên tập bản vẽ trong cad, tránh được nhầm lẫn khi đánh số trang hoặc đánh số thửa. Trước kia mình đã từng in rất nhiều bản vẽ và phải đánh số trang cho từng bản vẽ, công việc này cứ lặp đi lặp lại nhiều lần làm cho mình cứ bị nhầm hoài. Vì vậy mình viết chương trình này nhằm đáp ứng cho người dùng cảm thấy thuận tiện trong công việc hơn và tránh được những nhầm lẫn không đáng có, nhưng nói chung nó chưa được hoàn thiện cho lắm, đối với số thực thì chưa được hỗ trợ và công sai mặc định là 1 và phải là số nguyên vì thế nó chưa thể sử dụng rộng dãi cho nhiều mục đích được, cái thứ hai nữa đối với MTEXT cũng chưa được hỗ trợ, hy vọng cái này giải quyết được phần nào cho công việc của bạn, xài thử và cho ý kiến nhé!.. lần sau mình sẽ bổ sung cho hoàn chỉnh hơn.
(defun c:cps (/ input redraws copyit)
(defun input (/ sset)
(setq sset (ssget))
)
;;; ---------endsub input--------
(defun redraws (val idx / n i entn)
(setq n (sslength val)
i 0
)
(repeat n
(setq entn (ssname val i))
(redraw entn idx)
(setq i (+ i 1))
)
)
;;; -------endsub redraws--------
(defun copyit (val / copy_clsic copy_ntyp n)
(defun copy_clsic (val p /)
(if (not p)
(setq p (getpoint "Specify base point or displacement:"))
)
(if p
(command "copy" val "" "m" p pause)
(redraws val 4)
)
)
;end copy_clsic
(defun copy_ntyp (val / text_loc change entn entg
dxf ans tt ok p typ ptext dt
at pn pkt dkt akt txt ntxt
)
(defun text_loc (entn / p entg text jum72 jum73 i loc ketqua)
(setq p '())
(setq entg (entget entn))
(setq text (cdr (assoc 0 entg)))
(if (= text "TEXT")
(progn
(setq jum72 (cdr (assoc 72 entg)))
(setq jum73 (cdr (assoc 73 entg)))
(cond
((= jum72 1) (setq i 11))
((= jum72 2) (setq i 11))
((= jum72 4) (setq i 11))
((= jum72 3) (setq i 10))
((= jum72 5) (setq i 10))
((= jum72 0)
(progn
(if (= jum73 0)
(setq i 10)
(setq i 11)
)
)
)
)
(setq loc (cdr (assoc i entg)))
(setq p loc)
)
)
(setq ketqua p)
)
;end text_loc
(defun change (txt tt / ans len n num ott )
(if (= tt "Prefix")
(progn
(setq txt (vl-string-left-trim " " txt)
ans (vl-string-left-trim "0123456789" txt)
len (strlen txt)
n(strlen ans)
num(- len n)
ott(itoa(+ (atoi(substr txt 1 num)) 1))
txt(strcat ott ans)
)
)
(progn
(setq txt (vl-string-right-trim " " txt)
ans (vl-string-right-trim "0123456789" txt)
len (strlen txt)
n(strlen ans)
num(- len n)
ott(itoa(+ (atoi(substr txt (+ n 1) num)) 1))
txt(strcat ans ott)
)
)
)
txt
)
;end change
(setq entn (ssname val 0)
entg (entget entn)
)
(setq dxf (cdr (assoc 0 entg)))
(if (= dxf "TEXT")
(progn
(setq ans (getvar "users1"))
(if (or (= ans "Prefix") (= ans "Suffix") (= ans "Off"))
(setq tt ans)
(setq tt "Prefix")
)
(setq ok "YES")
(while (= ok "YES")
(initget "Prefix Suffix Off")
(setq p
(getpoint
(strcat "\nSpecify base point or [Prefix/Suffix/Off] <"
tt
">: "
)
)
)
(if p
(progn
(setq typ (type p))
(if (= typ 'LIST)
(setq ok "NO")
(setq tt (setvar "users1" p))
)
)
(setq ok "NO")
)
)
(if p
(progn
(if (/= tt "Off")
(progn
(setq
ptext (text_loc (ssname val 0))
ptext (subst 0 (nth 2 ptext) ptext)
dt (distance '(0 0 0) ptext)
at (angle '(0 0 0) ptext)
ok "YES"
)
(while (= ok "YES")
(command "copy" val "" p)
(prompt
"\nSpecify second point of displacement or :"
)
(command pause)
(setq pn (text_loc (entlast))
pn (subst 0 (nth 2 pn) pn)
pkt (subst 0 (nth 2 p) p)
dkt (distance pkt pn)
akt (angle pkt pn)
)
(if
(and (equal dt dkt 0.0001) (equal at akt 0.0001))
(progn
(entdel (entlast))
(setq ok "NO")
)
(progn
(setq entg (entget (entlast))
txt (cdr (assoc 1 entg))
)
(if (not ntxt) (setq ntxt txt))
(setq
ntxt (change ntxt tt)
entg (subst (cons 1 ntxt) (assoc 1 entg) entg)
)
(entmod entg)
)
)
)
)
(copy_clsic val p)
)
)
(redraws val 4)
)
)
)
)
;;; -------mainsub copyit-------
(if val
(progn
(setq n (sslength val))
(if (> n 1)
(copy_clsic val '())
(copy_ntyp val)
)
)
)

)
;;; ---------MAIN----------------
(setq val (ssget))
(redraws val 3)
(copyit val)
)

  • 1

#2577 tomboy

tomboy

    biết vẽ polygon

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

Đã gửi 16 August 2009 - 06:20 PM

Các bạn có lisp chuyển text của font TCVN3(ABC) về font VNI Windows cho tớ xin nha. Chứ chuyển thủ công đuối quá.

đây là chương trình chuyển mã phục vụ cho công việc riêng của mình, nên có 1 số phần bạn sẽ không dùng tới, nhưng ko sao nó cũng không ảnh hưởng tới công việc của bạn đâu. Chương trình này mình chưa TEST nên có thể chưa thể chuyển mã được 100%, nếu khi sử dụng bạn thấy mã nào chưa chuyển được thì bạn gửi bản vẽ đó cho mình nhé để mình cập nhật mã nhé.
(defun c:chm (/ makefile st duyet chuyenma option inget ok ma-ltr name)
(defun makefile (/ path fn fs find f)
(setq path (getvar "dwgprefix"))
(setq fn (getvar "dwgname"))
(setq fs (strcat path (substr fn 1 (- (strlen fn) 6)) ".dwg"))
(setq find (findfile fs))
(if (not find)
(progn
(setq fo (findfile "MAU.dwg"))
(if fo
(vl-file-copy fo fs)
)
)
)
)
;;;-----------------end sub----------------------
(defun st (stn font)
(command "style" stn font 0 1 0 "N" "N" " ")
)
(defun duyet (nentg / bv ok ext ok la txt)
(setq bv (getvar "dwgname"))
(setq ok "YES")
(setq ext (STRCASE (substr bv (- (strlen bv) 5) 2)))
(if (in ext "CS,DC,DH,GT,RG,TH" ",")
(setq ok "NO")
)
(if (= ok "NO")
(progn
(setq la (cdr (assoc 8 nentg)))
(if (not (in la "15,13,53,8,30,37,18,22,38,44,24,27" ","))
(setq ok "YES")
)
(if (in la "8,53,24" ",")
(progn
(setq txt (cdr (assoc 1 nentg)))
(if (distof txt)
(setq ok "NO")
(progn
(if (in txt
"110KV,110 KV,220V,220 V,22KV,22 KV,15KV,15 KV"
","
)
(setq ok "NO")
(setq ok "YES")
)
)
)
)
)
)
)
ok
)
;;;-----------------end sub----------------------

(defun chlst5 (lst / len i newmss ok aaj ix aas ees aj aar of aax ef
awf er mss)
(setq len (length lst))
(setq i 0
newmss '()
ok "YES"
aaj '(37 37 50 48 51)
ix '(37 37 50 50 48)
aas '(37 37 50 48 50)
ees '(37 37 50 49 51)
aj '(37 37 49 56 53)
aar '(37 37 50 48 48)
of '(37 37 50 50 51)
aax '(37 37 50 48 49)
ef '(37 37 50 48 52)
awf '(37 37 49 56 55)
er '(92 85 43 50 53 54 67)
ux '(92 85 43 50 48 49 55)
aaf '(37 37 49 57 57)
ow '(37 37 49 55 50)
oos '(37 37 50 51 50)
ax '(37 37 49 56 51)
uw '(37 37 49 55 51)
af '(37 37 49 56 49)
ij '(37 37 50 50 50)
uwr '(37 37 50 52 54)
es '(37 37 50 48 56)
dd '(37 37 49 55 52)
ddd '(37 37 49 54 55)
ooj '(37 37 50 51 51)
aa '(37 37 49 54 57)
uwj '(37 37 50 52 57)
orr '(37 37 50 50 53)
ee '(37 37 49 55 48)
oo '(37 37 49 55 49)
awj '(37 37 49 57 56)
as '(37 37 49 56 52)
oor '(37 37 50 51 48)
iff '(37 37 50 49 53)
uf '(37 37 50 51 57)
owf '(37 37 50 51 52)
owj '(37 37 50 51 56)
oof '(37 37 50 50 57)
ar '(37 37 49 56 50)
ows '(37 37 50 51 55)
aw '(37 37 49 54 56)
oj '(37 37 50 50 56)
eej '(37 37 50 49 52)
eer '(37 37 50 49 49)
uws '(37 37 50 52 56)
os '(37 37 50 50 55)
is '(37 37 50 50 49)
aws '(37 37 49 57 48)
ir '(37 37 50 49 54)
uj '(37 37 50 52 52)
uwf '(37 37 50 52 53)
owr '(37 37 50 51 53)
oox '(37 37 50 51 49)
ur '(37 37 50 52 49)
eef '(37 37 50 49 48)
yr '(37 37 50 53 49)
us '(37 37 50 52 51)
ex '(37 37 50 48 55)
oo-S '(37 37 49 54 52)
yx '(37 37 50 53 50)
)
(while (= ok "YES")
(setq mss (list (nth i lst)
(nth (+ i 1) lst)
(nth (+ i 2) lst)
(nth (+ i 3) lst)
(nth (+ i 4) lst)
)
)
(cond
((equal mss aaj)
(progn
(setq mss '(97 228)
ok "NO"
)
)
)
((equal mss ix)
(progn
(setq mss '(243)
ok "NO"
)
)
)
((equal mss aas)
(progn
(setq mss '(97 225)
ok "NO"
)
)
)
((equal mss ees)
(progn
(setq mss '(101 225)
ok "NO"
)
)
)
((equal mss aj)
(progn
(setq mss '(97 239)
ok "NO"
)
)
)
((equal mss aar)
(progn
(setq mss '(97 229)
ok "NO"
)
)
)
((equal mss of)
(progn
(setq mss '(111 248)
ok "NO"
)
)
)
((equal mss aax)
(progn
(setq mss '(97 227)
ok "NO"
)
)
)
((equal mss ef)
(progn
(setq mss '(101 248)
ok "NO"
)
)
)
((equal mss awf)
(progn
(setq mss '(97 232)
ok "NO"
)
)
)
((equal mss er)
(progn
(setq mss '(101 251)
ok "NO"
)
)
)
((equal mss ux)
(progn
(setq mss '(117 245)
ok "NO"
)
)
)
((equal mss aaf)
(progn
(setq mss '(97 224)
ok "NO"
)
)
)
((equal mss ow)
(progn
(setq mss '(244)
ok "NO"
)
)
)
((equal mss oos)
(progn
(setq mss '(111 225)
ok "NO"
)
)
)
((equal mss ax)
(progn
(setq mss '(97 245)
ok "NO"
)
)
)
((equal mss uw)
(progn
(setq mss '(246)
ok "NO"
)
)
)
((equal mss af)
(progn
(setq mss '(97 248)
ok "NO"
)
)
)
((equal mss ij)
(progn
(setq mss '(242)
ok "NO"
)
)
)
((equal mss uwr)
(progn
(setq mss '(246 251)
ok "NO"
)
)
)
((equal mss es)
(progn
(setq mss '(101 249)
ok "NO"
)
)
)
((equal mss dd)
(progn
(setq mss '(241)
ok "NO"
)
)
)
((equal mss ddd)
(progn
(setq mss '(209)
ok "NO"
)
)
)
((equal mss ooj)
(progn
(setq mss '(111 228)
ok "NO"
)
)
)
((equal mss aa)
(progn
(setq mss '(97 226)
ok "NO"
)
)
)
((equal mss uwj)
(progn
(setq mss '(246 239)
ok "NO"
)
)
)
((equal mss orr)
(progn
(setq mss '(111 251)
ok "NO"
)
)
)
((equal mss ee)
(progn
(setq mss '(101 226)
ok "NO"
)
)
)
((equal mss oo)
(progn
(setq mss '(111 226)
ok "NO"
)
)
)
((equal mss awj)
(progn
(setq mss '(97 235)
ok "NO"
)
)
)
((equal mss as)
(progn
(setq mss '(97 249)
ok "NO"
)
)
)
((equal mss oor)
(progn
(setq mss '(111 229)
ok "NO"
)
)
)
((equal mss iff)
(progn
(setq mss '(236)
ok "NO"
)
)
)
((equal mss uf)
(progn
(setq mss '(117 248)
ok "NO"
)
)
)
((equal mss owf)
(progn
(setq mss '(244 248)
ok "NO"
)
)
)
((equal mss owj)
(progn
(setq mss '(244 239)
ok "NO"
)
)
)
((equal mss oof)
(progn
(setq mss '(111 224)
ok "NO"
)
)
)
((equal mss ar)
(progn
(setq mss '(97 251)
ok "NO"
)
)
)
((equal mss ows)
(progn
(setq mss '(244 249)
ok "NO"
)
)
)
((equal mss aw)
(progn
(setq mss '(97 234)
ok "NO"
)
)
)
((equal mss oj)
(progn
(setq mss '(111 239)
ok "NO"
)
)
)
((equal mss eej)
(progn
(setq mss '(101 228)
ok "NO"
)
)
)
((equal mss eer)
(progn
(setq mss '(101 229)
ok "NO"
)
)
)
((equal mss uws)
(progn
(setq mss '(246 249)
ok "NO"
)
)
)
((equal mss os)
(progn
(setq mss '(111 249)
ok "NO"
)
)
)
((equal mss is)
(progn
(setq mss '(237)
ok "NO"
)
)
)
((equal mss aws)
(progn
(setq mss '(97 233)
ok "NO"
)
)
)
((equal mss ir)
(progn
(setq mss '(230)
ok "NO"
)
)
)
((equal mss uj)
(progn
(setq mss '(117 239)
ok "NO"
)
)
)
((equal mss uwf)
(progn
(setq mss '(246 248)
ok "NO"
)
)
)
((equal mss owr)
(progn
(setq mss '(244 251)
ok "NO"
)
)
)
((equal mss oox)
(progn
(setq mss '(111 227)
ok "NO"
)
)
)
((equal mss ur)
(progn
(setq mss '(117 251)
ok "NO"
)
)
)
((equal mss eef)
(progn
(setq mss '(101 224)
ok "NO"
)
)
)
((equal mss yr)
(progn
(setq mss '(121 251)
ok "NO"
)
)
)
((equal mss us)
(progn
(setq mss '(117 249)
ok "NO"
)
)
)
((equal mss ex)
(progn
(setq mss '(101 245)
ok "NO"
)
)
)
((equal mss oo-S)
(progn
(setq mss '(79 194)
ok "NO"
)
)
)
((equal mss yx)
(progn
(setq mss '(121 245)
ok "NO"
)
)
)
)
(if (= ok "YES")
(setq mss (list (nth i lst)))
)
(setq newmss (append newmss mss))
(if (= ok "NO")
(progn
(setq i (+ i 5))
(setq len (- len i))
(repeat len
(setq newmss (append newmss (list (nth i lst))))
(setq i (+ i 1))
)
(setq lst newmss
i -1
len (length lst)
ok "YES"
newmss '()
)
)
)
(setq i (+ i 1))
(if (= i len)
(setq ok "NO")
)
)
newmss
)
;;;-----------------end sub----------------------
(defun chlst (lst / len i newmss ok aaj ix aas ees aj aar of aax ef
awf er mss)
(setq len (length lst))
(setq i 0
newmss '()
ok "YES"
aaj '(92 85 43 50 53 54 54)
ix '(92 85 43 50 53 56 52)
aas '(92 85 43 50 53 54 57)
ees '(92 85 43 48 49 51 49)
aj '(92 85 43 50 53 54 51)
aar '(92 85 43 50 53 53 65)
of '(92 85 43 50 53 56 48)
aax '(92 85 43 50 53 53 52)
ef '(92 85 43 50 53 54 48)
awf '(92 85 43 50 53 53 55)
er '(92 85 43 50 53 54 67)
ux '(92 85 43 50 48 49 55)
)
(while (= ok "YES")
(setq mss (list (nth i lst)
(nth (+ i 1) lst)
(nth (+ i 2) lst)
(nth (+ i 3) lst)
(nth (+ i 4) lst)
(nth (+ i 5) lst)
(nth (+ i 6) lst)
)
)
(cond
((equal mss aaj)
(progn
(setq mss '(97 228)
ok "NO"
)
)
)
((equal mss ix)
(progn
(setq mss '(243)
ok "NO"
)
)
)
((equal mss aas)
(progn
(setq mss '(97 225)
ok "NO"
)
)
)
((equal mss ees)
(progn
(setq mss '(101 225)
ok "NO"
)
)
)
((equal mss aj)
(progn
(setq mss '(97 239)
ok "NO"
)
)
)
((equal mss aar)
(progn
(setq mss '(97 229)
ok "NO"
)
)
)
((equal mss of)
(progn
(setq mss '(111 248)
ok "NO"
)
)
)
((equal mss aax)
(progn
(setq mss '(97 227)
ok "NO"
)
)
)
((equal mss ef)
(progn
(setq mss '(101 248)
ok "NO"
)
)
)
((equal mss awf)
(progn
(setq mss '(97 232)
ok "NO"
)
)
)
((equal mss er)
(progn
(setq mss '(101 251)
ok "NO"
)
)
)
((equal mss ux)
(progn
(setq mss '(117 245)
ok "NO"
)
)
)
)
(if (= ok "YES")
(setq mss (list (nth i lst)))
)
(setq newmss (append newmss mss))
(if (= ok "NO")
(progn
(setq i (+ i 7))
(setq len (- len i))
(repeat len
(setq newmss (append newmss (list (nth i lst))))
(setq i (+ i 1))
)
(setq lst newmss
i -1
len (length lst)
ok "YES"
newmss '()
)
)
)
(setq i (+ i 1))
(if (= i len)
(setq ok "NO")
)
)
newmss
)
;;;-----------------end sub----------------------
(defun chuyenma (sset / len i entn entg txt
lst lstlen j newlst num typ newtxt
nentg ans
)
(progn
(setq len (sslength sset))
(setq i 0)
(repeat len
(setq entn (ssname sset i))
(setq entg (entget entn))
(setq txt (cdr (assoc 1 entg)))
(setq lst (vl-string->list txt))
(setq lstlen (length lst))
(setq j 0
newlst '()
)
(repeat lstlen
(setq num (nth j lst))
(cond
((= num 161) (setq num '(246)))
((= num 175) (setq num '(244 239)))
((= num 171) (setq num '(241)))
((= num 184) (setq num '(246 245)))
((= num 193) (setq num '(97 248)))
((= num 213) (setq num '(111 224)))
((= num 172) (setq num '(101 226)))
((= num 227) (setq num '(97 235)))
((= num 189) (setq num '(111 226)))
((= num 204) (setq num '(242)))
((= num 223) (setq num '(111 251)))
((= num 222) (setq num '(111 225)))
((= num 247) (setq num '(246 251)))
((= num 195) (setq num '(97 224)))
((= num 240) (setq num '(101 249)))
((= num 218) (setq num '(111 228)))
((= num 174) (setq num '(97 226)))
((= num 168) (setq num '(246 239)))
((= num 169) (setq num '(97 249)))
((= num 206) (setq num '(236)))
((= num 180) (setq num '(117 248)))
((= num 219) (setq num '(244 248)))
((= num 194) (setq num '(97 251)))
((= num 221) (setq num '(244 249)))
((= num 191) (setq num '(97 234)))
((= num 205) (setq num '(101 228)))
((= num 203) (setq num '(101 229)))
((= num 176) (setq num '(246 249)))
((= num 181) (setq num '(111 229)))
((= num 206) (setq num '(236)))
((= num 210) (setq num '(111 249)))
((= num 245) (setq num '(111 239)))
((= num 166) (setq num '(237)))
((= num 186) (setq num '(209)))
((= num 165) (setq num '(97 233)))
((= num 207) (setq num '(230)))
((= num 192) (setq num '(97 245)))
((= num 182) (setq num '(117 239)))
((= num 167) (setq num '(246 248)))
((= num 217) (setq num '(244 251)))
((= num 188) (setq num '(244)))
((= num 254) (setq num '(111 227)))
((= num 185) (setq num '(121 251)))
((= num 190) (setq num '(117 249)))
((= num 164) (setq num '(101 245)))
((= num 185) (setq num '(230)))
((= num 177) (setq num '(117 251)))
((= num 178) (setq num '(121 249)))
((= num 241) (setq num '(79 194)))
((= num 179) (setq num '(121 245)))
((= num 202) (setq num '(101 224)))
((= num 200) (setq num '(101 227)))
((= num 209) (setq num '(212)))
((= num 237) (setq num '(65 202)))
((= num 243) (setq num '(65 197)))
)
(setq typ (type num))
(if (= typ 'LIST)
(setq newlst (append newlst num))
(setq newlst (append newlst (list num)))
)
(setq j (+ j 1))
)
(setq i (+ i 1))
(setq newlst (chlst newlst))
(setq newtxt (vl-list->string (chlst5 newlst)))
(setq nentg (subst (cons 1 newtxt) (assoc 1 entg) entg))
(setq nentg (subst (cons 7 "vni") (assoc 7 nentg) nentg))
(setq ans (duyet nentg))
(if (= ans "YES")
(entmod nentg)
)

)

)
;;; (command "zoom" "e" "")
)
;;;-----------------end sub----------------------
(defun option ( / option_id ok_cancel usi1)
(setq usi1(getvar "useri1"))
(setq option_id (load_dialog "acadfun.dcl"))
(new_dialog "chuyen_ma_lytr" option_id)
(if (= usi1 0)
(set_tile "chmachu" "1")
(set_tile "chlytrinh" "1")
)
(action_tile "chmachu" "(setq usi1 0)")
(action_tile "chlytrinh" "(setq usi1 1)")
(setq ok_cancel (start_dialog))
(if (= ok_cancel 1)
(setvar "useri1" usi1)
)
)
;;;-----------------end sub----------------------
(defun chuyenlytrinh (sset / i newtxt len entn entg txt txtlst lentxt j )
(setq len(sslength sset))
(setq i 0)
(repeat len
(setq newtxt "")
(setq entn(ssname sset i))
(setq entg(entget entn))
(setq txt(cdr(assoc 1 entg)))
(setq txtlst(str2lst txt "/"))
(setq lentxt(length txtlst)
j 0)
(repeat lentxt
(setq newtxt(strcat newtxt (nth j txtlst)))
(setq j(+ j 1))
)
(setq entg(subst (cons 1 newtxt) (assoc 1 entg) entg))
(entmod entg)
(setq i(+ i 1))
)
)
;;;----------------MAIN--------------------
;;; (makefile)
(st "vni" "VNI-Times")
(setq inget "Option")
(setq ok "YES")
(while (= ok "YES")
(setq ma-ltr (getvar "useri1"))
(if (= ma-ltr 0)
(setq name "\nChon vao text can chuyen ma or [Option]: ")
(setq
name "\nChon vao text can chuyen ma or [Option]: "
)
)
(setq sset (getss name
inget
'((0 . "TEXT"))
)
)
(if sset
(if (= sset inget)
(option)
(progn
(if (= ma-ltr 0)
(chuyenma sset)
(chuyenlytrinh sset)
)
)
)
(setq ok "NO")
)
)
)
chuyen_ma_lytr : dialog{
label = "Convertion";
:radio_button {
label = "Chuyen ma chu";
key = chmachu;}
:radio_button {
label = "Chuyen Ly Trinh";
key = chlytrinh;}
ok_cancel;
}

bạn hãy lưu đoạn mã này với tên file ACADFUN.DCL và chép vào chung với thư mục chứa file chm.lsp nhé, nhớ phải đánh đường dẫn trong option của cad thì nó mới chạy êm ái được.
  • 1

#2578 t031285

t031285

    biết vẽ rectang

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

Đã gửi 16 August 2009 - 09:37 PM

Chào bạn t031285
file của bạn hoàn toàn không thể đọc được.
Xin lỗi mình xài 2007 đã chuyển xuống 2003,gửi lại bạn mong giúp đỡ.Thanks
http://www.cadviet.c.../2/dim100_2.rar
  • 0

#2579 viennv

viennv

    biết zoom

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

Đã gửi 16 August 2009 - 10:21 PM

Chào bạn, ý tưởng của bạn thật là hay, nó sẽ giúp rất nhiều cho công việc của người biên tập bản vẽ trong cad, tránh được nhầm lẫn khi đánh số trang hoặc đánh số thửa. Trước kia mình đã từng in rất nhiều bản vẽ và phải đánh số trang cho từng bản vẽ, công việc này cứ lặp đi lặp lại nhiều lần làm cho mình cứ bị nhầm hoài. Vì vậy mình viết chương trình này nhằm đáp ứng cho người dùng cảm thấy thuận tiện trong công việc hơn và tránh được những nhầm lẫn không đáng có, nhưng nói chung nó chưa được hoàn thiện cho lắm, đối với số thực thì chưa được hỗ trợ và công sai mặc định là 1 và phải là số nguyên vì thế nó chưa thể sử dụng rộng dãi cho nhiều mục đích được, cái thứ hai nữa đối với MTEXT cũng chưa được hỗ trợ, hy vọng cái này giải quyết được phần nào cho công việc của bạn, xài thử và cho ý kiến nhé!.. lần sau mình sẽ bổ sung cho hoàn chỉnh hơn.

Cảm ơn bác nhưng em đã load lisp này về và gõ lệnh cps thì cad nó báo unknown cammand. Bác check lại giúp em nhé!
  • 0

#2580 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 16 August 2009 - 10:23 PM

Chào em svba. Sinh nhật vui vẻ nhé.
Điiều em nói trên thì chưa cần sử dụng tới Lisp. Lệnh này sẽ giúp em: DIMOVERRIDE

Vâng, em cảm ơn anh Tue_NV nhiều! Cad còn có lệnh này à. Hay quá! Thế mà giờ em mới biết.

(2) : Hàng này xác định tên biến sẽ thay đổi kích thước. ở đây mình xác định biến DimLfac sẽ thay đổi
(4) : Xác định tiếp tên biến sẽ thay đổi. Cón không xác định nữa thì ấn Enter. Ở đây ta ấn Enter

Anh cho em hỏi, ngoài biến Dimlfac ra, lệnh này còn biến gì nữa không. Em đã xem trong Help, nhưng chẳng thấy có gì.
Một lần nữa cảm ơn anh!
  • 0
http://khuyen.space