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

#581 chandoll

chandoll

    biết pan

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

Đã gửi 24 March 2008 - 09:46 AM

Đây là đoạn lisp em lập để xoay một đối tượng Mtext quanh tâm của nó một goc 90. Nhưng nó không chạy được . Nhờ bác sửa giùm em .

(Defun C:quay ( )

(setq DT (entsel "\nChon text mau"))
(while
(or
(null DT)
(/= "MTEXT" (cdr (assoc 0 (entget (car DT)))))
)
(princ "\nDoi tuong khong phai la MTEXT! Chon lai")
(setq DT (entsel "\nChon MTEXT mau"))
)
(setq DT (car DT))
(setq DT (entget DT))
(setq DD (cdr (assoc 10 DT)))
(setq DC (cdr (assoc 11 DT)))


(princ DD)
(princ dc)
(setq dx1 (distof car(dd) 2))
(setq dx2 (distof car(dc) 2))
(setq dx (+ dx1 dx2))
(setq dx (/ dx 2)
(setq dy1 (distof cadr(dd) 2))
(setq dy2 (distof cadr(dc) 2))
(setq dy (+ dy1 dy2))
(setq dy (/ dy 2))
(command "rotate" dt "" '(dx dy) 90)
)

Bac Hoanh sua cho em cái này với
  • 0

#582 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 24 March 2008 - 01:24 PM

Bac Hoanh sua cho em cái này với

Không sửa được, vì đoạn code trên của bạn vừa sai chính tả, vừa sai thuật toán.

Nếu viết lại thì tôi có thể, nhưng sửa thì tôi chịu.
  • 0

#583 themanh01

themanh01

    biết zoom

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

Đã gửi 25 March 2008 - 11:41 AM

Bạn hãy search từ MPLOT trên diễn đàn rồi download về và dùng!

thank bác nhiều! em sử dụng cái này rồi nhưng nó chưa được như em cần. Mplot chỉ tự điều chỉnh tỷ lệ thôi chứ không căn được lề và khi in thì mất luôn cái khung bao bên ngoài. Bác phát triển thêm dùm mọi người đi. thank!
  • 0

#584 lispteur

lispteur

    biết zoom

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

Đã gửi 25 March 2008 - 02:22 PM

Cho em xin lisp nhận biết số nguyên trong một đối tượng text , sau đó thay số nguyên đó bằng số khác . Ví dụ text là "tang 3 " thì sẽ được thay bằng "tang 4"
  • 0

#585 ngayve324

ngayve324

    biết lệnh xref

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

Đã gửi 25 March 2008 - 02:57 PM

Rất mong các bạn viết cho mình xin lisp vẽ đoạn dư cho đường thẳng
C:\Documents and Settings\user\Desktop\GOI XIN LISP.jpg

Mình thấy có các Pác chỉ đăng ký vào diễn để xin lips xong rùi lặn đâu mất hết, khổ cho các anh em phải ngồi tìm và viết giúp
  • 0

#586 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 25 March 2008 - 04:18 PM

Cho em xin lisp nhận biết số nguyên trong một đối tượng text , sau đó thay số nguyên đó bằng số khác . Ví dụ text là "tang 3 " thì sẽ được thay bằng "tang 4"

Lisp đây, lệnh là INC:

;;;----------------------------------------------------
(defun ach(x) (or (< x 48) (> x 57)))
;;;----------------------------------------------------
(defun inc1 (txt / L C N)
(setq
L (vl-string->list txt)
C (vl-list->string (vl-remove-if-not 'ach L))
N (itoa (1+ (atoi (vl-list->string (vl-remove-if 'ach L)))))
)
(strcat C N)
)
;;;----------------------------------------------------
(defun C:INC( / e d txt)
(setq
e (car (entsel "\nSelect text object:"))
d (entget e)
txt (inc1 (cdr (assoc 1 d)))
d (subst (cons 1 txt) (assoc 1 d) d)
)
(entmod d)
)
;;;----------------------------------------------------

  • 2

#587 lispteur

lispteur

    biết zoom

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

Đã gửi 25 March 2008 - 06:14 PM

Lisp đây, lệnh là INC:


;;;----------------------------------------------------
(defun ach(x) (or (< x 48) (> x 57)))
;;;----------------------------------------------------
(defun inc1 (txt / L C N)
(setq
L (vl-string->list txt)
C (vl-list->string (vl-remove-if-not 'ach L))
N (itoa (1+ (atoi (vl-list->string (vl-remove-if 'ach L)))))
)
(strcat C N)
)
;;;----------------------------------------------------
(defun C:INC( / e d txt)
(setq
e (car (entsel "\nSelect text object:"))
d (entget e)
txt (inc1 (cdr (assoc 1 d)))
d (subst (cons 1 txt) (assoc 1 d) d)
)
(entmod d)
)
;;;----------------------------------------------------

Lisp của bác khi em nhập vào với dãy text như "cd34ah5" thì nó lại sắp lại thành "cdah346" . Bác có thể viết lại để nó thành "cd35ah5" không ?
  • 0

#588 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 26 March 2008 - 08:18 AM

Lisp của bác khi em nhập vào với dãy text như "cd34ah5" thì nó lại sắp lại thành "cdah346" . Bác có thể viết lại để nó thành "cd35ah5" không ?

Tất nhiên là có thể, chỉ cần đảo tới đảo lui mấy cái code trên và ràng buộc thêm một số điều kiện. Nhưng lẽ ra bạn phải đặt vấn đề đó ngay từ đầu một cách chi tiết hơn, cụ thể hơn. Bạn nêu ví dụ cũng phải thể hiện rõ tính tổng quát của vấn đề. Ngay cả bây giờ, chẳng hạn mình có thể biến "cd34ah5" thành "cd35ah5", nhưng sau đó bạn lại muốn nó thành "cd34ah6" hay "cd35ah6" thì phải viết lại chương trình lần nữa à? Mong bạn thông cảm, mình không làm được!
Xin phép hỏi lại bạn: bạn dùng đoạn chương trình trên như là user hay là programmer?

1) Nếu là user, bạn phải biết cách diễn đạt để người trợ giúp thông suốt được các ý:
- Bạn muốn dùng chương trình cho trường hợp ứng dụng cụ thể nào? Nêu đủ các ví dụ mình hoạ cho các khả năng có thể xảy ra trong quá trình sử dụng.
- Mục đích đó là chính đáng, mang lại hiệu quả thiết thực, phù hợp với thói quen sử dụng Cad của nhiều ngưởi. Chỗ này xin được nói rõ hơn, mình không có hứng thú lập trình để đáp ứng các nhu cầu cá biệt của một vài người.

2) Nếu là programmer, với mục đích học hỏi về cú pháp và vận dụng lisp, yêu cầu bắt buộc là bạn phải biết chắt lọc ra điều gì là quan trọng nhất, nêu vấn đề một cách cô đọng, chính xác và mang tính khái quát hoá cao.

Mình rất sẵn lòng giúp đỡ mọi người bằng tất cả khả năng của bản thân với điều kiện: vấn đề đặt ra đáp ứng được các tiêu chí nêu trên. Mong rằng bạn hiểu ý và đừng trách vì mình không chịu làm tiếp theo ý bạn.
  • 0

#589 lispteur

lispteur

    biết zoom

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

Đã gửi 26 March 2008 - 09:16 AM

Tất nhiên là có thể, chỉ cần đảo tới đảo lui mấy cái code trên và ràng buộc thêm một số điều kiện. Nhưng lẽ ra bạn phải đặt vấn đề đó ngay từ đầu một cách chi tiết hơn, cụ thể hơn. Bạn nêu ví dụ cũng phải thể hiện rõ tính tổng quát của vấn đề. Ngay cả bây giờ, chẳng hạn mình có thể biến "cd34ah5" thành "cd35ah5", nhưng sau đó bạn lại muốn nó thành "cd34ah6" hay "cd35ah6" thì phải viết lại chương trình lần nữa à? Mong bạn thông cảm, mình không làm được!
Xin phép hỏi lại bạn: bạn dùng đoạn chương trình trên như là user hay là programmer?

1) Nếu là user, bạn phải biết cách diễn đạt để người trợ giúp thông suốt được các ý:
- Bạn muốn dùng chương trình cho trường hợp ứng dụng cụ thể nào? Nêu đủ các ví dụ mình hoạ cho các khả năng có thể xảy ra trong quá trình sử dụng.
- Mục đích đó là chính đáng, mang lại hiệu quả thiết thực, phù hợp với thói quen sử dụng Cad của nhiều ngưởi. Chỗ này xin được nói rõ hơn, mình không có hứng thú lập trình để đáp ứng các nhu cầu cá biệt của một vài người.

2) Nếu là programmer, với mục đích học hỏi về cú pháp và vận dụng lisp, yêu cầu bắt buộc là bạn phải biết chắt lọc ra điều gì là quan trọng nhất, nêu vấn đề một cách cô đọng, chính xác và mang tính khái quát hoá cao.

Mình rất sẵn lòng giúp đỡ mọi người bằng tất cả khả năng của bản thân với điều kiện: vấn đề đặt ra đáp ứng được các tiêu chí nêu trên. Mong rằng bạn hiểu ý và đừng trách vì mình không chịu làm tiếp theo ý bạn.

Đây là kinh nghiệm lần đầu của em , mong bác thông cảm .
  • 0

#590 traitimsat034

traitimsat034

    biết vẽ pline

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

Đã gửi 26 March 2008 - 03:36 PM

anh viết giúp em một lisp thay thế một block bằng block khác chèn đúng vào vị trí của block cũ. block có thể chọn bằng cách nhập tên hoặc select trên bản vẽ. nếu có thể thay thế đc nhiều block một lần thì tốt nhất. em cám ơn anh nhiều!
  • 0

#591 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 26 March 2008 - 03:47 PM

anh viết giúp em một lisp thay thế một block bằng block khác chèn đúng vào vị trí của block cũ. block có thể chọn bằng cách nhập tên hoặc select trên bản vẽ. nếu có thể thay thế đc nhiều block một lần thì tốt nhất. em cám ơn anh nhiều!




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

(defun c:mab ()
(setq ddd (entsel "\nChon Block mau"))
(while
(or
(null ddd)
(/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)


;(prompt "\nChon BLOCK mau.")
; (setq DT (car (entsel)))
(setq DT (car ddd))
(setq DTM (entget DT))
(setq TENKHOI (cdr (assoc 2 DTM)))
(setq TILEX (cdr (assoc 41 DTM)))
(setq TILEY (cdr (assoc 42 DTM)))
;(setq TILEZ (cdr (assoc 43 DTM)))
(setq GOCCHEN (cdr (assoc 50 DTM)))
(setq GOCCHENn (atof (angtos GOCCHEN 0 2)))

(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(setq DIEMCHEN (cdr (assoc 10 DTMs)))
(command "ERASE" DTs "")
(luuos)
(setvar "osmode" 0)
(command "INSERT" TENKHOI DIEMCHEN TILEX TILEY GOCCHENn)
(traos)
(setq L (1+ L))
)


(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))

;-------------
(defun c:mabt ()

(setq ddd (entsel "\nChon Block mau"))
(while
(or
(null ddd)
(/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)




;(prompt "\nChon BLOCK mau.")
;(setq DT (car (entsel)))
(setq DT (car ddd))
(setq DTM (entget DT))
(setq TENKHOI (cdr (assoc 2 DTM)))

(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(setq DIEMCHEN (cdr (assoc 10 DTMs)))

(setq TILEX (cdr (assoc 41 DTMs)))
(setq TILEY (cdr (assoc 42 DTMs)))
(setq GOCCHEN (cdr (assoc 50 DTMs)))
(setq GOCCHENn (atof (angtos GOCCHEN 0 2)))

(command "ERASE" DTs "")
(luuos)
(setvar "osmode" 0)
(command "INSERT" TENKHOI DIEMCHEN TILEX TILEY GOCCHENn)
(traos)
(setq L (1+ L))
)


(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))


;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if DUY_CMD
(setvar "CMDECHO" DUY_CMD)
)
(if DUY_OLDERROR
(setq *error* DUY_OLDERROR)
)
(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)
)


)
;;----------




Lệnh MAB và MABT bạn coi cái nào đúng ý bạn thì dùng
  • 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


#592 traitimsat034

traitimsat034

    biết vẽ pline

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

Đã gửi 26 March 2008 - 11:54 PM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

(defun c:mab ()
(setq ddd (entsel "\nChon Block mau"))
(while
(or
(null ddd)
(/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)


;(prompt "\nChon BLOCK mau.")
; (setq DT (car (entsel)))
(setq DT (car ddd))
(setq DTM (entget DT))
(setq TENKHOI (cdr (assoc 2 DTM)))
(setq TILEX (cdr (assoc 41 DTM)))
(setq TILEY (cdr (assoc 42 DTM)))
;(setq TILEZ (cdr (assoc 43 DTM)))
(setq GOCCHEN (cdr (assoc 50 DTM)))
(setq GOCCHENn (atof (angtos GOCCHEN 0 2)))

(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(setq DIEMCHEN (cdr (assoc 10 DTMs)))
(command "ERASE" DTs "")
(luuos)
(setvar "osmode" 0)
(command "INSERT" TENKHOI DIEMCHEN TILEX TILEY GOCCHENn)
(traos)
(setq L (1+ L))
)


(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))

;-------------
(defun c:mabt ()

(setq ddd (entsel "\nChon Block mau"))
(while
(or
(null ddd)
(/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)




;(prompt "\nChon BLOCK mau.")
;(setq DT (car (entsel)))
(setq DT (car ddd))
(setq DTM (entget DT))
(setq TENKHOI (cdr (assoc 2 DTM)))

(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(setq DIEMCHEN (cdr (assoc 10 DTMs)))

(setq TILEX (cdr (assoc 41 DTMs)))
(setq TILEY (cdr (assoc 42 DTMs)))
(setq GOCCHEN (cdr (assoc 50 DTMs)))
(setq GOCCHENn (atof (angtos GOCCHEN 0 2)))

(command "ERASE" DTs "")
(luuos)
(setvar "osmode" 0)
(command "INSERT" TENKHOI DIEMCHEN TILEX TILEY GOCCHENn)
(traos)
(setq L (1+ L))
)


(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))


;;----------
(defun done ()
(command ".redraw")
(command ".undo" "E")
(if DUY_CMD
(setvar "CMDECHO" DUY_CMD)
)
(if DUY_OLDERROR
(setq *error* DUY_OLDERROR)
)
(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)
)


)
;;----------




Lệnh MAB và MABT bạn coi cái nào đúng ý bạn thì dùng

em cám ơn anh đã giúp đỡ, anh có thể bổ xung giúp em một chút,
-anh xem xét bổ xung thêm phần lựa chọn block mẫu, có thể lựa chọn bẳng cách nhập tên block từ bàn phím.
-khi thay thế nhiều block bằng block thuộc tính thì gặp vấn đề, anh xem xét cách nào giải quết, còn không thì em nghĩ anh có thể lưu lại block mẫu của lần thay thế trước cho lần thay thế sau để tránh phải chọn block mẫu nhiều lần, em cám ơn anh nhiều!
  • 1

#593 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 27 March 2008 - 09:46 AM

em cám ơn anh đã giúp đỡ, anh có thể bổ xung giúp em một chút,
-anh xem xét bổ xung thêm phần lựa chọn block mẫu, có thể lựa chọn bẳng cách nhập tên block từ bàn phím.
-khi thay thế nhiều block bằng block thuộc tính thì gặp vấn đề, anh xem xét cách nào giải quết, còn không thì em nghĩ anh có thể lưu lại block mẫu của lần thay thế trước cho lần thay thế sau để tránh phải chọn block mẫu nhiều lần, em cám ơn anh nhiều!

Mình không dùng block thuộc tình nên không biết vụ này. Nhưng với block thường thì chỉ cần chọn block mẩu 1 lần sau đó chọn 1 mớ block cần thay đổi được mà.
  • 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


#594 traitimsat034

traitimsat034

    biết vẽ pline

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

Đã gửi 27 March 2008 - 11:49 AM

Mình không dùng block thuộc tình nên không biết vụ này. Nhưng với block thường thì chỉ cần chọn block mẩu 1 lần sau đó chọn 1 mớ block cần thay đổi được mà.

khi em thay block thuộc tính thì lệnh bị lỗi vì khi thay có thêm bước nhập giá trị cho thuộc tính, em không rành lắm nhưng hình như khi lisp thực hiện đến bước xoá block cũ thì bị lỗi, em nghĩ chỗ này mình chỉ thay từng block một vì sau khi thay còn phải nhập giá trị của thuộc tính, sau đó lại chọn block khác và thay tiếp, nhưng do phải chọn block mẫu nhiều lần sẽ không thuận tiện nên nếu lưu dc block mẫu của lần trước cho lần sau thì sẽ thuận tiện hơn.cám ơn anh.
  • 0

#595 nnt12yeu

nnt12yeu

    biết vẽ line

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

Đã gửi 28 March 2008 - 08:33 PM

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

em đã có bài tính tổng số lượng các block, tuy nhiên các block của em có kích thước khác nhau (do em scale) vậy bác có cách nào để tính được kích thước (hay diện tích) của block và xuất ra số block cùng tên nhưng có kích thước khác nhau (hay diện tích khác nhau) ko.
ví dụ như:
command: tongbl (enter)
(S)pecifed (enter)
AA (enter)
xuất ra:
9 block AA co dien tich 10 m2
10 block AA co dien tich 20 m2
.......
chẳng hạn
  • 0

#596 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 28 March 2008 - 09:35 PM

em đã có bài tính tổng số lượng các block, tuy nhiên các block của em có kích thước khác nhau (do em scale) vậy bác có cách nào để tính được kích thước (hay diện tích) của block và xuất ra số block cùng tên nhưng có kích thước khác nhau (hay diện tích khác nhau) ko.
ví dụ như:
command: tongbl (enter)
(S)pecifed (enter)
AA (enter)
xuất ra:
9 block AA co dien tich 10 m2
10 block AA co dien tich 20 m2
.......
chẳng hạn

Không hiểu ý bạn.

Tại sao block cùng tên lại có kích thước khác nhau?

Bạn hãy upload 1 file lên diễn đàn được không?
  • 0

#597 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 28 March 2008 - 10:07 PM

click đúp thì lisp rất khó làm được.
Nhưng sử dụng lệnh inc dưới đây sẽ giúp bạn làm được điều đó:

(defun c:inc ( / tt)
(while (and (not (setq sel (nentsel "\nPick vao doi tuong: ")))
(wcmatch (cdr (assoc 0 (entget (car sel))))
"TEXT,ATTRIBUTE"
)
)
)
(setq
tt (entget (car sel))
old (assoc 1 tt)
gt (cdr old)
)
(if (wcmatch gt "#")
(progn
(setq gt (itoa (1+ (atoi gt)))
tt (subst (cons 1 gt) old tt)
)
(entmod tt)
(entupd (car sel))
)
(alert (strcat "Ban can pick vao mot so\n"
gt
" khong phai la mot so"
)
)
)
(princ)
)


Cám ơn bác nhưng đoạn code bác viết chưa tổng quát. Nó chỉ cho phép đối với số có 1 chữ số, nếu là số hàng chục trở lên thì chịu, hoặc 01 thì cũng chuyển thành 2 chứ không phải thành 02. Bác có thể giúp em một lần nữa được không? Cám ơn bác đã giúp đớ
  • 0

#598 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 28 March 2008 - 10:39 PM

Cám ơn bác nhưng đoạn code bác viết chưa tổng quát. Nó chỉ cho phép đối với số có 1 chữ số, nếu là số hàng chục trở lên thì chịu, hoặc 01 thì cũng chuyển thành 2 chứ không phải thành 02. Bác có thể giúp em một lần nữa được không? Cám ơn bác đã giúp đớ


Nếu theo cách của bạn thì chữ 09 sẽ thành 10 hay 010? lisp trên sẽ cho kết quả là 10 chứ không phải 010 như bạn muốn.
và tương tự với 099 thì sẽ thành 100 hay 0100? lisp trên sẽ cho kết quả là 100 chứ không phải là 0100 như bạn muốn.
và 0109 sẽ thành 01010 hay 0110 hay 110? nếu là lisp trên sẽ là 110.

Luật của diễn đàn đã có từ trước là người viết lisp chỉ được viết 1 lần cho 1 yêu cầu. Bạn nên rút kinh nghiệm lần sau nêu đầu bài kỹ hơn, lần này thì xem như là một sự đáng tiếc nho nhỏ, tôi không tiếp tục giúp bạn được. Thông cảm nhé.
  • 1

#599 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 29 March 2008 - 08:40 AM

em đã có bài tính tổng số lượng các block, tuy nhiên các block của em có kích thước khác nhau (do em scale) vậy bác có cách nào để tính được kích thước (hay diện tích) của block và xuất ra số block cùng tên nhưng có kích thước khác nhau (hay diện tích khác nhau) ko.
ví dụ như:
command: tongbl (enter)
(S)pecifed (enter)
AA (enter)
xuất ra:
9 block AA co dien tich 10 m2
10 block AA co dien tich 20 m2
.......
chẳng hạn


Không hiểu ý bạn.

Tại sao block cùng tên lại có kích thước khác nhau?

Bạn hãy upload 1 file lên diễn đàn được không?


Đây là bài toán thống kê, nhưng mà vẫn băn khoăn là block thì có thể biết được hệ số scale là bao nhiêu, còn diện tích của block thì sao mà tính được.
  • 0

#600 nnt12yeu

nnt12yeu

    biết vẽ line

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

Đã gửi 29 March 2008 - 01:44 PM

Không hiểu ý bạn.

Tại sao block cùng tên lại có kích thước khác nhau?

Bạn hãy upload 1 file lên diễn đàn được không?

dưới đây là bản vẽ (thi công lắp đặt nước)
trong đó em có rất nhiều các block về : T, Lơi, Co, I ....
do có nhiều đường ống kích cỡ khác nhau nên các block em phải scale lại
chính vì vậy, nếu em sử dụng chương trình .lisp đếm block sẽ ko có ý nghĩa gì nhiều (chỉ đơn giản là đếm tổng số)
do đó em cần một .lisp có thể tính được số block có kích cỡ khác nhau.
rất mong bác giúp đỡ.
link sau:
http://www.cadviet.c...iles/upload.dwg
  • 0