Đến nội dung


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

Viết lisp theo yêu cầu [phần 2]


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

#1421 t3pubt

t3pubt

    biết pan

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

Đã gửi 19 July 2010 - 03:51 PM

Mình có ý tưởng thế này
Khi xuất ra trắcc dọc nova góc nó ra kết quả thế này
vd : đoạn cong A=16d41'29'' hoặc không cong 16d41'29''
khi hoàn thiện ta phải cộng thêm 180d hoặc trừ đi 180d sẽ ra 196d41'29'' hoặc 163d18'31''.muốn có kQ này ta phải ra excell thực thiện.
các bạn giúp mình viết lisp này với.cái này khó quá>
  • 0

#1422 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 July 2010 - 04:08 PM

Mình có ý tưởng thế này
Khi xuất ra trắcc dọc nova góc nó ra kết quả thế này
vd : đoạn cong A=16d41'29'' hoặc không cong 16d41'29''
khi hoàn thiện ta phải cộng thêm 180d hoặc trừ đi 180d sẽ ra 196d41'29'' hoặc 163d18'31''.muốn có kQ này ta phải ra excell thực thiện.
các bạn giúp mình viết lisp này với.cái này khó quá>

Bạn vui lòng nói rõ hơn được không? Càng chi tiết cụ thể càng tốt? Mình đang làm việc với đối tượng gì?
Tốt nhất là bạn minh họa rõ ràng qua file .dwg rồi upload lên đây nhé.

Cách giải quyết đơn giản về cách cộng trừ góc theo độ, phút giây như sau :
1. Chuyển góc đo từ đơn vị độ phút giây sang đơn vị Radian
2. Thực hiện phép tính (theo đơn vị Rad) -> kết quả
3. Chuyển kết quả lại từ đơn vị Rad sang đơn vị độ phút giây

Cách đổi đơn vị này chúng ta đã được học hồi phổ thông rồi
  • 0

#1423 t3pubt

t3pubt

    biết pan

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

Đã gửi 20 July 2010 - 08:03 AM

Bạn vui lòng nói rõ hơn được không? Càng chi tiết cụ thể càng tốt? Mình đang làm việc với đối tượng gì?
Tốt nhất là bạn minh họa rõ ràng qua file .dwg rồi upload lên đây nhé.

Cách giải quyết đơn giản về cách cộng trừ góc theo độ, phút giây như sau :
1. Chuyển góc đo từ đơn vị độ phút giây sang đơn vị Radian
2. Thực hiện phép tính (theo đơn vị Rad) -> kết quả
3. Chuyển kết quả lại từ đơn vị Rad sang đơn vị độ phút giây

Cách đổi đơn vị này chúng ta đã được học hồi phổ thông rồi

mình up ban cad lên nhé.
http://www.mediafire...2y5iy0z38c2r33c
  • 0

#1424 843824

843824

    biết vẽ circle

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

Đã gửi 21 July 2010 - 02:51 PM

Sorry anh so munch vi ko hieu sao may em ko go Tieng Viet Co Dau duoc.

Anh cho e xin lisp nhu the nay : khi e co 1 file gom cac cao do text - nhung trong nay co cac cao do xep chong len nhau.

Xin a viet cho em Lisp : khi khoi chon vung do thi lisp nay se co lenh thao tac : xoa di nhung cao do chong len nhau va giu lai 1 cao do ma thoi .
( Con neu co 1 cao do thi khong xoa )

- Neu duoc nua thi nang cao chut la : Neu nhung cao do chong len nhau nay ma giong gia tri cua nhau thi lam nhu tren .

Nhung neu khac gia tri thi hien bao loi hoac : doi mau cac cao do nay thanh mau do.

Em Xin cam on Anh nhieu lam .
Anh thong cam vi may e ko go Tieng Viet duoc .... e dang can lisp nay
  • 0

#1425 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 July 2010 - 05:54 PM

Sorry anh so munch vi ko hieu sao may em ko go Tieng Viet Co Dau duoc.

Anh cho e xin lisp nhu the nay : khi e co 1 file gom cac cao do text - nhung trong nay co cac cao do xep chong len nhau.

Xin a viet cho em Lisp : khi khoi chon vung do thi lisp nay se co lenh thao tac : xoa di nhung cao do chong len nhau va giu lai 1 cao do ma thoi .
( Con neu co 1 cao do thi khong xoa )

- Neu duoc nua thi nang cao chut la : Neu nhung cao do chong len nhau nay ma giong gia tri cua nhau thi lam nhu tren .

Nhung neu khac gia tri thi hien bao loi hoac : doi mau cac cao do nay thanh mau do.

Em Xin cam on Anh nhieu lam .
Anh thong cam vi may e ko go Tieng Viet duoc .... e dang can lisp nay

Chào bạn 843824,
Bạn hãy chịu khó tìm kiếm nhé, lisp này đã có trên diễn đàn rồi mà. Có thể không hoàn toàn như ý bạn nhưng bạn có thể chỉnh sửa nó hoặc nói rõ những điều bạn thấy chưa đạt. Khi đó mọi người sẽ dễ dàng giúp bạn hơn. Nếu tìm không thấy bạn hãy upload file mẫu của bạn lên chứ mô tả kiểu này khó hình dung chính xác được.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1426 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 21 July 2010 - 07:06 PM

Mình có ý tưởng thế này
Khi xuất ra trắcc dọc nova góc nó ra kết quả thế này
vd : đoạn cong A=16d41'29'' hoặc không cong 16d41'29''
khi hoàn thiện ta phải cộng thêm 180d hoặc trừ đi 180d sẽ ra 196d41'29'' hoặc 163d18'31''.muốn có kQ này ta phải ra excell thực thiện.
các bạn giúp mình viết lisp này với.cái này khó quá>

mình viết cho bạn cái lisp 180+ trước. còn lệnh 180- hơi dài dòng loằng ngoằng chút nên mình ngại :D
(defun c:180+ (/ goc val do res)
(setq goc (entsel "chon goc muon sua")
val (substr (cdr (assoc 1 (entget (car goc)))) 3)
do (atoi val)
val (strcat "A="(rtos (+ 180 do) 2 0) (substr val (1+ (strlen (rtos do 2 0)))))
RES (entget (car goc)))
(entmod (subst (cons 1 val) (assoc 1 RES) RES)))
bạn nghiên cứu code mình viết để tự viết cái lệnh còn lại nhé.
PS: nhưng mình thấy hình như bạn hơi cầu toàn khi sửa cái góc đó. mình đi làm mấy năm rồi cũng chưa gặp trường hợp nào bị yêu cầu phải sửa cái góc này.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1427 congdung04

congdung04

    biết vẽ line

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

Đã gửi 22 July 2010 - 07:35 AM

Em tìm kiếm trên diễn đàn rồi nhưng không có cái nào đúng việc mình cần nên nhờ các bác, mong các bác giúp hoặc tìm giúp cũng được.
Cụ thể như thế này: Em cần một lisp thực hiện lệnh sẽ yêu cầu chọn đối tượng Text sẽ cho biết được Current Width Factor của đối tượng text đó và yêu cầu nhập Width Factor mới, sẽ áp dụng Width Factor mới cho đối tượng cần điều chỉnh.
Thanks các bác nhiều
  • 0

#1428 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2010 - 08:16 AM

mình viết cho bạn cái lisp 180+ trước. còn lệnh 180- hơi dài dòng loằng ngoằng chút nên mình ngại :D

(defun c:180+ (/ goc val do res)
(setq goc (entsel "chon goc muon sua")
val (substr (cdr (assoc 1 (entget (car goc)))) 3)
do (atoi val)
val (strcat "A="(rtos (+ 180 do) 2 0) (substr val (1+ (strlen (rtos do 2 0)))))
RES (entget (car goc)))
(entmod (subst (cons 1 val) (assoc 1 RES) RES)))
bạn nghiên cứu code mình viết để tự viết cái lệnh còn lại nhé.

1 nguyên tắc viết Lisp mà Tue_NV muốn góp ý cho Thaistreetz là : Khi viết Lisp nên áp dụng cho 1 trường hợp Tổng Quát , tức là mọi trường hợp, cộng trừ số đo góc đều có thể áp dụng được nó chứ không riêng gì góc có số đo 180độ (áp dụng đúng cho trường hợp góc có AdB'C"

Góp thêm 1 ý nữa cho chuỗi viết Lisp theo nguyên tắc :
Viết sao cho Tổng quát áp dụng được cho mọi trường hợp -> hình thành nên 1 tư duy khái quát được vấn đề
- viết càng đơn giản càng tốt nhưng phải áp dụng được cho trường hợp Tổng Quát

Mình không biết cái này dùng vào việc gì, tuy nhiên tò mò lên mình dùng thử và mình thấy nó quá loằng ngoằng, quá phức tạp để nhận được kết quả.
ko biết bạn thế nào. còn mình, mình viết lisp theo nguyên tắc sau:
- viết càng ngắn càng tốt
- viết càng đơn giản càng tốt
- viết càng ít bước nhập số liệu càng tốt
- sử dụng càng ít hộp thoại càng tốt
- viết để khi sử dụng càng ít bước phải rời tay phải khỏi con chuột để nhập số liệu càng tốt
- viết để cho người sử dụng càng dễ hình thành thói quen khi chạy lệnh càng tốt.
.....

Mấy lời góp ý
Tue_NV
  • 1

#1429 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 22 July 2010 - 08:37 AM

Em tìm kiếm trên diễn đàn rồi nhưng không có cái nào đúng việc mình cần nên nhờ các bác, mong các bác giúp hoặc tìm giúp cũng được.
Cụ thể như thế này: Em cần một lisp thực hiện lệnh sẽ yêu cầu chọn đối tượng Text sẽ cho biết được Current Width Factor của đối tượng text đó và yêu cầu nhập Width Factor mới, sẽ áp dụng Width Factor mới cho đối tượng cần điều chỉnh.
Thanks các bác nhiều

Bạn thử Lisp thay đổi Width Factor của Text
(defun C:cwf(/ cwfactor ent obj ss val);Chang Width Factor
(vl-load-com)
(princ "\nChon Text can thay doi Width Factor : ")
(while (setq ss (ssget "+.:S:N" (list (cons 0 "TEXT"))))
(setq ent (ssname ss 0))
(setq obj (vlax-ename->vla-object ent)
cwF (vla-get-ScaleFactor obj))
(initget 6)
(setq val (getreal (strcat "\nInput new Width Factor <" (rtos cwF) "> :" )))
(if (and val (/= val cwF))
(vla-put-ScaleFactor obj val))
(princ "\nChon Text can thay doi Width Factor : ") )
(princ ))

  • 1

#1430 dvqkt112

dvqkt112

    biết zoom

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

Đã gửi 22 July 2010 - 01:11 PM

Chào các anh em trên điễn đàn!
Công ty mình trước kia hay dùng font vnsimli.shx Nhưng bây giừ lại chuyển toàn bộ sang dùng arial. Toàn bộ những mẫu chi tiết điển hình của mình bây mà ngồi đánh lại thì mệt chết mất. Mình đã dùng list chuyển font trên diễn đàn rồi nhưng vấn đề mình gặp ở đây là : Khi mình chuyển từ vnsimli.shx sang arial thì font mới là chữ bình thường. Mình muốn là chữ in hoa thì bản vẽ mới đẹp. Rất mong các bạn giúp đỡ.
Đây là file minh hoạ :
http://www.cadviet.c...iles/3/font.dwg
List minh dùng :
http://www.cadviet.c...files/3/t2u.lsp
  • 0

#1431 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 22 July 2010 - 01:16 PM

1 nguyên tắc viết Lisp mà Tue_NV muốn góp ý cho Thaistreetz là : Khi viết Lisp nên áp dụng cho 1 trường hợp Tổng Quát , tức là mọi trường hợp, cộng trừ số đo góc đều có thể áp dụng được nó chứ không riêng gì góc có số đo 180độ (áp dụng đúng cho trường hợp góc có AdB'C"

Góp thêm 1 ý nữa cho chuỗi viết Lisp theo nguyên tắc :
Viết sao cho Tổng quát áp dụng được cho mọi trường hợp -> hình thành nên 1 tư duy khái quát được vấn đề
- viết càng đơn giản càng tốt nhưng phải áp dụng được cho trường hợp Tổng Quát

Mấy lời góp ý
Tue_NV

Cảm ơn anh đã góp ý. Tuy nhiên em nghĩ cái này cũng còn tùy thuộc cách tư duy hay thói quen của từng người đối với 1 công việc cụ thể anh ạ.
Em lấy ví dụ như trong trường hợp này.
Nhiều người sẽ muốn gộp chung tất cả mọi trường hợp cho 1 lệnh duy nhất. điều tất yếu sảy ra là trong quá trình chạy lisp sẽ phải thêm 1 bước lựa chọn hoặc + hoặc - hoặc phải nhâp vào 1 con số nào đó. Như thế nếu ta thực hiện lệnh này với n lần thì số lần phải nhập số liệu đầu vào cũng sẽ tăng lên n lần.
Em lựa chọn cách khác vì đây là công việc đã được chỉ ra cụ thể. ta chỉ cần nhập lệnh 1 lần duy nhất và công việc còn lại chỉ có pick, pick, và pick cho đến khi enter để kết thúc. (dĩ nhiên với code trên em còn thiếu sót là chưa cho vòng lặp vào). với cách viết này ta chỉ cần chú ý đặt tên các lệnh sao cho có hệ thống để dễ nhớ là được.

nguyên tắc "viết càng đơn giản càng tốt" của em cũng xuất phát từ quan điểm này. Ta viết lisp nên ta hiểu rõ về nó, ta biết cần phải nhập những gì, lựa chọn ra sao. nhưng nếu đặt mình vào vị trí người dùng, họ sẽ cảm thấy rối khi có quá nhiều bước, quá nhiều sự lựa chọn.
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1432 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2010 - 02:45 PM

Cảm ơn anh đã góp ý. Tuy nhiên em nghĩ cái này cũng còn tùy thuộc cách tư duy hay thói quen của từng người đối với 1 công việc cụ thể anh ạ.
Em lấy ví dụ như trong trường hợp này.
Nhiều người sẽ muốn gộp chung tất cả mọi trường hợp cho 1 lệnh duy nhất. điều tất yếu sảy ra là trong quá trình chạy lisp sẽ phải thêm 1 bước lựa chọn hoặc + hoặc - hoặc phải nhâp vào 1 con số nào đó. Như thế nếu ta thực hiện lệnh này với n lần thì số lần phải nhập số liệu đầu vào cũng sẽ tăng lên n lần.
Em lựa chọn cách khác vì đây là công việc đã được chỉ ra cụ thể. ta chỉ cần nhập lệnh 1 lần duy nhất và công việc còn lại chỉ có pick, pick, và pick cho đến khi enter để kết thúc. (dĩ nhiên với code trên em còn thiếu sót là chưa cho vòng lặp vào). với cách viết này ta chỉ cần chú ý đặt tên các lệnh sao cho có hệ thống để dễ nhớ là được.

nguyên tắc "viết càng đơn giản càng tốt" của em cũng xuất phát từ quan điểm này. Ta viết lisp nên ta hiểu rõ về nó, ta biết cần phải nhập những gì, lựa chọn ra sao. nhưng nếu đặt mình vào vị trí người dùng, họ sẽ cảm thấy rối khi có quá nhiều bước, quá nhiều sự lựa chọn.

CAD và Lisp đã hỗ trợ phép tính cộng trừ nhân chia giữa các góc có số đo độ phút giây dạng AdB'C" rất tốt. Sao bạn lại làm thế? :D
  • 0

#1433 t3pubt

t3pubt

    biết pan

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

Đã gửi 22 July 2010 - 02:55 PM

phần 180- mình gặp như sau
hàm tách và trả đối tượng entsel mình chưa nắm vững nên khi thêm các biến phút giây mình không làm được.mình định làm thế này:
(độ : 179 -
phút: 59 -
giây: 60-
hoàn trả lại biến(val) để in.)
mình chỉ mới tập tành list thôi,mong các bạn giúp mình với.
cám ơn cadviệt rất nhiều
  • 0

#1434 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 22 July 2010 - 03:11 PM

CAD và Lisp đã hỗ trợ phép tính cộng trừ nhân chia giữa các góc có số đo độ phút giây dạng AdB'C" rất tốt. Sao bạn lại làm thế? :D

Vì em chưa biết cái này, cũng chưa dành thời gian tìm hiểu kỹ về nó nên mới đành phải sử dụng phương pháp tách chuỗi thủ công như vậy bác ạ. cũng một phần vì thấy bài bạn t3pubt post mấy hôm rồi nhưng chưa có ai viết giúp bạn ấy nên em viết cái code đó để t3pubt dùng tạm. có thể cách giải quyết của em chưa tốt nhưng cũng là điều kiện để anh em trao đổi tìm ra hướng giải quyết tốt hơn.
@t3pubt: ý của mình khi viết code chủ yếu nằm ở thuật toán tách chuỗi, xử lý nó rồi lại nhập chuỗi để có đươc kết quả. bạn có thể tra các hàm mình sử dụng để hiểu hơn về cách làm.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1435 congdung04

congdung04

    biết vẽ line

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

Đã gửi 22 July 2010 - 03:22 PM

Trước tiên xin được cảm ơn bác gia_bach đã giúp đỡ.
Em xin có một việc nhờ các bác như sau:
Em tìm trên diễn đàn có một Lisp "SAPXEP" có thế "thống kê text" nhưng chưa được như ý, mong các cao thủ có thể sửa lại giúp em để nó có thể chạy được như sau không?

Chạy lisp sẽ yêu cầu Pick điểm cần chèn bảng thống kê, sau đó sẽ yêu cầu chọn các đối tượng text để thống kê, kết thúc việc chọn sẽ yêu cầu nhập khoảng cách giữa các hàng (mỗi hàng là một đối tượng text vừa chọn, giá trị mặc định là chiều cao của textstyle hiện hành), sau khi nhập khoảng cách các hàng hoặc enter chấp nhận giá trị mặc định sẽ cho ra một cột gồm nhiều hàng là các text đã được chọn.

Mục đích của em trong lisp này là lập một bảng thống kê danh mục bản vẽ trong điều kiện tên bản vẽ không nằm trong block thuộc tính mà là từng đối tượng text độc lập nhau nhưng em lại không "đủ trình" để viết.

xin chân thành cảm ơn các bác đã giúp.
  • 0

#1436 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2010 - 03:37 PM

Vì em chưa biết cái này, cũng chưa dành thời gian tìm hiểu kỹ về nó nên mới đành phải sử dụng phương pháp tách chuỗi thủ công như vậy bác ạ. cũng một phần vì thấy bài bạn t3pubt post mấy hôm rồi nhưng chưa có ai viết giúp bạn ấy nên em viết cái code đó để t3pubt dùng tạm. có thể cách giải quyết của em chưa tốt nhưng cũng là điều kiện để anh em trao đổi tìm ra hướng giải quyết tốt hơn.
@t3pubt: ý của mình khi viết code chủ yếu nằm ở thuật toán tách chuỗi, xử lý nó rồi lại nhập chuỗi để có đươc kết quả. bạn có thể tra các hàm mình sử dụng để hiểu hơn về cách làm.

Hàm Cal và lênh Units sẽ giải quyết vấn đề này của bạn
Set đơn vị units
(setvar "AUNITS" 1)
(setvar "auprec" 3)
-> Tính (c:cal "1d1'1\"+2d2'2\"")
-> ra kết quả : 3.05083 => Dùng hàm cvunits để chuyển 3.05083 về góc đo độ , phút và giây sau đó nối chuỗi lại

Command: cal
>> Expression: 1d1'2"+1d2'3"
2.05138889

-> Đây là bài toán cụ thể -> Đương nhiên, viết 1 Lisp Tống quát áp dụng cho nó sẽ hay hơn nhiều. Ứng dụng rộng rãi nữa
  • 1

#1437 ut_cung

ut_cung

    biết vẽ line

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

Đã gửi 22 July 2010 - 03:54 PM

@ Nguyen Hoanh!
Bác Hoành ơi, u đang dùng cái mplot của Bác, u thấy rất hay nhưng có 1 chút bất tiện là nó không sử dụng được khi in bên layout. Nhờ Bác sửa lại giúp u với.
Cảm ơn Bác nhiều! Chúc bác sức khoẻ!

hình như dạo này bác Hoanh "ẩn cư gian hồ" rồi, chẳng thấy bác ghé thăm cad việt nữa. Có bác biết cái món của Bác Hoành này không giúp út với. Cảm ơn các Bác, chúc các bác sức khoẻ!
  • 0

#1438 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 22 July 2010 - 04:17 PM

Trước tiên xin được cảm ơn bác gia_bach đã giúp đỡ.
Em xin có một việc nhờ các bác như sau:
Em tìm trên diễn đàn có một Lisp "SAPXEP" có thế "thống kê text" nhưng chưa được như ý, mong các cao thủ có thể sửa lại giúp em để nó có thể chạy được như sau không?

Chạy lisp sẽ yêu cầu Pick điểm cần chèn bảng thống kê, sau đó sẽ yêu cầu chọn các đối tượng text để thống kê, kết thúc việc chọn sẽ yêu cầu nhập khoảng cách giữa các hàng (mỗi hàng là một đối tượng text vừa chọn, giá trị mặc định là chiều cao của textstyle hiện hành), sau khi nhập khoảng cách các hàng hoặc enter chấp nhận giá trị mặc định sẽ cho ra một cột gồm nhiều hàng là các text đã được chọn.

Mục đích của em trong lisp này là lập một bảng thống kê danh mục bản vẽ trong điều kiện tên bản vẽ không nằm trong block thuộc tính mà là từng đối tượng text độc lập nhau nhưng em lại không "đủ trình" để viết.

xin chân thành cảm ơn các bác đã giúp.

Bạn sài tạm : Lisp lập một bảng thống kê danh mục bản vẽ cho đối tượng text độc lập.
(defun c:sxT(/ ent h i lst msp obj pt row ss str tblobj tmp txtlength) 
(vl-load-com)
(princ "\nChon Text can thong ke : ")
(if (setq ss (ssget '((0 . "TEXT"))))
(progn
(setq i -1)
(while (setq ent (ssname ss (setq i (1+ i))))
(setq obj (vlax-ename->vla-object ent)
str (vla-get-TextString obj)
lst (cons str lst)))
(or *h* (setq *h* (* (getvar "dimtxt")(getvar "dimscale"))))
(initget 6)
(setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))
(if h (setq *h* h) (setq h *h*) )
(if (setq pt (getpoint "\nDiem dat Bang :"))
(progn
(setq txtLength 10)
(foreach pt lst
(if (> (setq tmp (strlen pt)) txtLength)
(setq txtLength tmp) ) )
(setq msp (vla-get-modelspace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst) 2) 2 (* 2 h) (* txtLength h)))
(vla-put-regeneratetablesuppressed TblObj :vlax-true)
(vla-put-vertcellmargin TblObj (* 0.75 h))
(vla-SetColumnWidth TblObj 0 (* 6 h))
(mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
(list acTitleRow acHeaderRow acDataRow) )
(mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
(list acTitleRow acHeaderRow acDataRow))
(vla-MergeCells TblObj 0 0 0 1)
(vla-setText TblObj 0 0 "Bang thong ke : ")
(vla-setText TblObj 1 0 "STT")
(vla-setText TblObj 1 1 "Ten ban ve")
(setq i 1 row 2)
(foreach pt (vl-sort lst '<)
(vla-setText TblObj row 0 (itoa i))
(vla-setText TblObj row 1 pt)
(setq row (1+ row) i (1+ i)))
(vla-put-regeneratetablesuppressed TblObj :vlax-false)
(vlax-release-object TblObj) ) ) ))
(princ))

  • 1

#1439 congdung04

congdung04

    biết vẽ line

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

Đã gửi 22 July 2010 - 04:32 PM

Rất cảm ơn bác đã nhiệt tình giúp đỡ nhưng bác có thể đơn giản hóa lisp này hơn chút nữa không ạ, cụ thể là không cần nó phải ra cả một cái bảng mà trong đó không có chữ nào :D mà chỉ cần nó cho ra một cột gồm tất cả các text đã chọn (mỗi hàng một đối tượng text đã chọn - như thể là copy cái text đã chọn ấy ạ) và yêu cầu khoảng cách các hàng để sau đó em move tất cả chúng vào một bảng được kẻ bằng các line, như thế có phải dễ không ạ.
EM chỉ cần lisp này cho ra tên bản vẽ thôi còn kí hiệu thì em để ở một cột dùng Tcount sẽ ra ví dụ KC-01, KC-02, ........
Bác hiểu ý em chưa ạ?

kiểu như là đoạn code này nhưng mà thay vì nó sắp xếp theo hàng ta cho nó sắp theo cột ạ.
;; free lisp from cadviet.com
(defun c:sapxep (/ dsach pt pt1 ss ten txtsiz)
(setq pt (getpoint "\nDiem dat Bang thong ke Text:" )
txtsiz (* (getvar "dimtxt")(getvar "dimscale")) )
(princ "\nChon Text can sap xep :")
(while (setq ss (ssget (list (cons 0 "Text"))))
(setq dsach (list) pt1 pt)
(foreach e (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq ten (cdr (assoc 1 e))
dsach (append (list ten) dsach) )
)
(foreach ten dsach
(Make_Text_bl pt1 ten txtsiz)
(setq pt1 (polar pt1 0 (* 10 txtsiz)))
)
(setq pt (polar pt (/ pi -2) (* 1.5 txtsiz)))
(princ "\nChon Text can sap xep :")
)
(princ)
)

(defun Make_Text_bl(pt val TextSize)
(entmake (list '(0 . "TEXT")
(cons 10 pt)
(cons 40 TextSize)
(cons 1 val)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0)
'(72 . 0)
'(73 . 1)
(cons 11 pt))))

  • 0

#1440 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 22 July 2010 - 09:35 PM

Rất cảm ơn bác đã nhiệt tình giúp đỡ nhưng bác có thể đơn giản hóa lisp này hơn chút nữa không ạ, cụ thể là không cần nó phải ra cả một cái bảng mà trong đó không có chữ nào :D mà chỉ cần nó cho ra một cột gồm tất cả các text đã chọn (mỗi hàng một đối tượng text đã chọn - như thể là copy cái text đã chọn ấy ạ) và yêu cầu khoảng cách các hàng để sau đó em move tất cả chúng vào một bảng được kẻ bằng các line, như thế có phải dễ không ạ.
EM chỉ cần lisp này cho ra tên bản vẽ thôi còn kí hiệu thì em để ở một cột dùng Tcount sẽ ra ví dụ KC-01, KC-02, ........
Bác hiểu ý em chưa ạ?

kiểu như là đoạn code này nhưng mà thay vì nó sắp xếp theo hàng ta cho nó sắp theo cột ạ.
...............

Muốn đơn giản hóa ?! có ngay LISP sắp xếp theo cột.
(defun c:sapxep (/ dsach pt ss ten txtsiz)
(defun Make_Text_bl(pt val TextSize)
(entmake (list '(0 . "TEXT")
(cons 10 pt) (cons 40 TextSize) (cons 1 val)
(cons 7 (getvar "TEXTSTYLE"))
'(71 . 0) '(72 . 0)'(73 . 1)
(cons 11 pt))))
(setq pt (getpoint "\nDiem dat Bang thong ke Text:" )
txtsiz (* (getvar "dimtxt")(getvar "dimscale")) )
(princ "\nChon Text can sap xep :")
(while (setq ss (ssget (list (cons 0 "Text"))))
(foreach e (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq ten (cdr (assoc 1 e))
dsach (append (list ten) dsach) ) )
(foreach ten (vl-sort dsach '<)
(Make_Text_bl pt ten txtsiz)
(setq pt (polar pt (/ pi -2) (* 1.5 txtsiz))) )
(setq pt (polar pt (/ pi -2) txtsiz))
(princ "\nChon Text can sap xep :") )
(princ))

  • 1