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

#341 anhca21

anhca21

    thành viên khai báo email ảo!

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

Đã gửi 24 November 2007 - 01:24 AM

SAO KHÔNG AI TRẢ LỜI EM THẾ.......

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:
- Nhập chiều dài phuong L1.
- Nhập chiều dài theo phương L2.
- Nhập số nhịp theo L1
- Nhập số nhịp theo L2
=> Cái này để hình thành sơ bộ mặt bằng thôi.
Nếu cần anh hảy phát triển nó lên như sau:
Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.
Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.
Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

Em xin cám ơn anh rất nhiều.

:) :bigsmile:
  • 0

#342 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 24 November 2007 - 07:45 AM

SAO KHÔNG AI TRẢ LỜI EM THẾ.......

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:
- Nhập chiều dài phuong L1.
- Nhập chiều dài theo phương L2.
- Nhập số nhịp theo L1
- Nhập số nhịp theo L2
=> Cái này để hình thành sơ bộ mặt bằng thôi.
Nếu cần anh hảy phát triển nó lên như sau:
Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.
Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.
Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

Em xin cám ơn anh rất nhiều.

:) :bigsmile:


Chú này lười quá. Là dân kỹ thuật thì phải chăm chỉ lên chứ.
Bác Hòanh mà làm vụ này là làm hư em đó.
  • 0

#343 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 24 November 2007 - 08:05 AM

Mình đã nói từ trước rồi. Cái "thằng" stretch này "khó chơi" lắm, chưa nghĩ ra cách gì!

À hay là bác ssg xem thèn mstrech của essprest í . Có khi đi theo hướng đó để chọn đối tượng là ok 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


#344 ngayve324

ngayve324

    biết lệnh xref

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

Đã gửi 24 November 2007 - 08:28 AM

SAO KHÔNG AI TRẢ LỜI EM THẾ.......

Anh Hoanh ơi!Em đang làm đồ án và mún vẽ mặt bằng của một công trình.Nhưng để vễ xong cái mặt bằng thì hơi lâu và mất thời gian nên em nhờ anh viết cái lips như sau:
- Nhập chiều dài phuong L1.
- Nhập chiều dài theo phương L2.
- Nhập số nhịp theo L1
- Nhập số nhịp theo L2
=> Cái này để hình thành sơ bộ mặt bằng thôi.
Nếu cần anh hảy phát triển nó lên như sau:
Tương tự như tren nhưng có thêm 1 cái là nhiều khi nhịp của phương L1 hoặc theo phương L2 ko bằng nhau (VD : theo phương L1 có các nhịp 3m 3m 1.5m 3m 3m ) nên anh hãy bổ sung để có thể vẽ được nhịp 1.5m.
Một cái nữa là khi vẽ mặt bằng thì phải có trục số,nên anh hãy cho thêm các trực nữa.
Và cái cuối cùng là khi vẽ mặt bằng anh hãy cho nhập tiết dện cột tại các chỗ giao nhau của các trục nhá.

Em xin cám ơn anh rất nhiều.

:) :bigsmile:


BẠn dùng cái này xem sao?
lệnh là LC

;VE LUOI COT
(defun c:LC ()
(setq om (getvar "osmode"))
(setvar "osmode" 0)
(setq tile (getreal "\nCho biet Ti Le ve 1/x, x="))
(setq p0 (getpoint "\n Chon Basic Point:"))
(setq nc (getreal "\n Nhap chieu ngang cua cot : "))
(setq dc (getreal "\n Nhap chieu doc cua cot : "))
(setq p1 (polar (polar p0 pi (/ (* nc hstl) 2 tile) ) (* pi 1.5) (/ (* dc hstl) 2 tile) ) )
(setq p2 (polar (polar p0 0 (/ (* nc hstl) 2 tile) ) (* pi 0.5) (/ (* dc hstl) 2 tile) ) )
(command "rectang" p1 p2)
(command "hatch" "solid" "l" "")
(setq bcn (getreal "\n Buoc cot theo phuong ngang : "))
(setq nn (getint "\n So buoc cot phuong ngang : "))
(setq w1 (polar (polar p1 pi (/ (* nc hstl) 2 tile) ) (* pi 1.5) (/ (* dc hstl) 2 tile) ) )
(setq w2 (polar (polar p2 0 (/ (* nc hstl) 2 tile) ) (* pi 0.5) (/ (* dc hstl) 2 tile) ) )
(command "select" "w" w1 w2 "")
(command "array" "p" "" "r" "1" (+ nn 1) (/ (* bcn hstl) tile) )
(command "line" (polar p0 pi (/ (* 1000 hstl) tile)) (polar p0 0 (/ (* (+ (* bcn nn) 1000) hstl) tile) ) "")
(setq w1 (polar (polar p0 pi (/ (* hstl 2000) tile)) (* pi 1.5) (/ (* hstl 2000) tile) ))
(setq w2 (polar (polar p0 0 (/ (* (+ (* bcn nn) 2000) hstl) tile) ) (* pi 0.5) (/ (* hstl 2000) tile) ))
(command "zoom" "w" w1 w2)
(command "select" "w" w1 w2 "")
(setq bcd (getreal "\n Buoc cot theo phuong doc : "))
(setq nd (getint "\n So buoc cot phuong doc : "))
(command "array" "p" "" "r" (+ nd 1) "1" (/ (* hstl bcd) tile) )
(command "line" (polar p0 (* pi 1.5) (/ (* hstl 1000) tile)) (polar p0 (* pi 0.5) (/ (* (+ (* bcd nd) 1000) hstl) tile)) "")
(command "array" "l" "" "r" "1" (+ nn 1) (/ (* hstl bcn) tile) )
(setq w2 (polar w2 (* pi 0.5) (/ (* (+ (* bcd nd) 2000) hstl) tile)) )
(command "zoom" "w" w1 w2)
(setvar "osmode" om)

)

  • 0

#345 ngayve324

ngayve324

    biết lệnh xref

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

Đã gửi 24 November 2007 - 11:46 AM

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

Bác nào có thể cho em xin một lisp vẽ cầu thang không?
nhập góc nghiêng (độ), Số bậc ( hay chiều rộng bậc) thì tự vẽ
  • 0

#346 anhca21

anhca21

    thành viên khai báo email ảo!

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

Đã gửi 26 November 2007 - 10:55 PM

Bác nào có thể cho em xin một lisp vẽ cầu thang không?
nhập góc nghiêng (độ), Số bậc ( hay chiều rộng bậc) thì tự vẽ

Uhm đúng òi ....em cũng đang cần cái này.....Anh nào cho em với....
  • 0

#347 leolas

leolas

    biết lệnh stretch

  • CADViet Team
  • PipPipPip
  • 163 Bài viết
Điểm đánh giá: 133 (tàm tạm)

Đã gửi 28 November 2007 - 01:59 PM

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

Bác Hoành có thể giúp em một lisp đếm tất cả các hình tròn và hình lục giác trong bản vẽ.
Lisp có 2 lệnh : 1/ đếm hình tròn, 2/ đếm hình lục giác.
Khi nhập lệnh 1 hoặc 2 thì yêu cầu nhập R (Đối với hình lục giác R là Bk đường tròn ngoại tiếp)
(nếu được thì có thêm phần mở rộng là : khi đếm xong, yêu cầu pick điểm chèn, chọn điểm chèn sẽ có một text ghi số hình vừa đếm = số)
Cám ơn
  • 0
Let those who only see the thorns have eyes to see the rose

#348 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 28 November 2007 - 02:33 PM

Bác Hoành có thể giúp em một lisp đếm tất cả các hình tròn và hình lục giác trong bản vẽ.
Lisp có 2 lệnh : 1/ đếm hình tròn, 2/ đếm hình lục giác.
Khi nhập lệnh 1 hoặc 2 thì yêu cầu nhập R (Đối với hình lục giác R là Bk đường tròn ngoại tiếp)
(nếu được thì có thêm phần mở rộng là : khi đếm xong, yêu cầu pick điểm chèn, chọn điểm chèn sẽ có một text ghi số hình vừa đếm = số)
Cám ơn


Theo tôi đếm hình tròn thì dể thôi nhưng phần lục giác thì hơi khó không biết bác nguyenhoanh có cao kiến gì không
  • 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


#349 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 28 November 2007 - 02:57 PM

trong khi chờ dợi tôi tặng bác để đếm hình tròn này
Lệnh: cht
Không gỏ bán kính mà là chọn 1 CIRCLE làm chuẩn

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

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

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

(Defun c:cht ( )
(prompt "\nChon Circle mau.")
(setq DT (car (entsel)))
(setq DT (entget DT))
(setq STNAME (cdr (assoc 40 DT)))

(Princ "\nHay chon vung :")
(setq SS (ssget (list (cons 0 "CIRCLE")
(cons 40 STNAME)
)
)
)

(if (Null ss)
(princ "\nKhong tim thay doi tuong nao")
)
(IF (/= NIL SS) (PROGN
(setq Sl (SSLength SS))
(princ (strcat "\nTim thay: <" (itoa sl) "> doi tuong"))
)
)
(princ)
)

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

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

;;;;;;;;;;;;;;;;;;;;;;;
  • 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


#350 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 28 November 2007 - 03:12 PM

Cái này hơi khó vì không có đối tượng POLYGON mà chỉ là một đường LWPOLYLINE (0 . "LWPOLYLINE"), có 6 nét (90 . 6) và đường kín (70 . 1).
Và đi kèm là các tọa độ....
Vậy nên vẫn làm được nhưng mà hơi dài dòng một chút...
  • 0

#351 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 28 November 2007 - 03:22 PM

Bác nào có thể cho em xin một lisp vẽ cầu thang không?
nhập góc nghiêng (độ), Số bậc ( hay chiều rộng bậc) thì tự vẽ


Dữ liệu nhập của bạn bị thiếu:
Ít ra phải là số bậc và chiều rộng bậc hoặc chiều rộng bậc và độ dài cạnh xiên hoặc số bậc và chiều dài cạnh xiên
  • 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


#352 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 28 November 2007 - 07:28 PM

Bạn nào có thể giúp mình viết lisp với công việc như sau:
- Chọn một đường tròn sẵn có trên bản vẽ, sau đó ghi tọa độ tâm của đường tròn đến 1 vị trí bất kỳ do người dùng chọn.
- Bình thường trong bản vẽ kỹ thuật hay ghi kích thước theo kiểu như sau VD: 3000/2=1500. Khi ghi kích thước theo kiểu này mình thường hay ghi kích thước bằng lệnh Autocad, sau đó edit nội dung của kích thước. Mà trong bản vẽ xây dựng thường rất hay dùng.
Cám ơn các bạn nhé
  • 0

#353 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 29 November 2007 - 07:29 AM

...lisp đếm tất cả các hình tròn và hình lục giác trong bản vẽ.
Lisp có 2 lệnh : 1/ đếm hình tròn, 2/ đếm hình lục giác.
Khi nhập lệnh 1 hoặc 2 thì yêu cầu nhập R (Đối với hình lục giác R là Bk đường tròn ngoại tiếp)
(nếu được thì có thêm phần mở rộng là : khi đếm xong, yêu cầu pick điểm chèn, chọn điểm chèn sẽ có một text ghi số hình vừa đếm = số)
Cám ơn

1) @vndes: bạn nêu còn thiếu 1 điều kiện. Pline không được chứa bất kỳ một cung tròn nào: code (42 . 0). Nếu không, hình tam giác có 3 góc bo tròn cũng sẽ... bị xem là lục giác!

2) @leolas: bạn thử code dưới đây trong nhiều trường hợp khác nhau xem có lỗi gì không? Riêng phần ghi kết quả, bạn không nói rõ quy cách ghi như thế nào. Ví dụ: chương trình đếm đuợc 3 hình tròn có bán kính r= 5.0 thì ghi:
- 3 ?
- Circles = 3 ?
- There are 3 circles with radius = 5.0 ?
-...?
- Cỡ chữ, font chữ?

Nhưng nói chung phần ghi kết quả rất đơn giản, nếu bạn biết một chút về lisp sẽ tự làm được. Bạn có thể sử dụng 3 giá trị nhận được trong các biến sau và trình bày text theo ý thích:
- ctyp: loại
- r: bán kính
- n: số lượng đếm được


;;;--------------------------------------------------------------------------------------
(defun countCir(r / ss) ;;;Count all circles with radius r
(setq ss (ssget "X" (list (cons 0 "CIRCLE") (cons 40 r))))
(if ss (sslength ss) 0)
)
;;;--------------------------------------------------------------------------------------
(defun countHex(r / ss1 ss2 e re) ;;;Count all hexagons are inscribed by circles with radius r
(setq ss1 (ssget "X"
(list
(cons 0 "LWPOLYLINE") (cons 90 6) (cons 70 1)
(cons -4 "")
))
)
(setq ss2 (ssadd))
(vl-load-com)
(while (setq e (ssname ss1 0))
[color="#FF0000"](setq re (vlax-curve-getDistAtParam e 1))[/color]
(if (equal r re 0.00000001) (setq ss2 (ssadd e ss2)))
(ssdel e ss1)
)
(if ss2 (sslength ss2) 0)
)
;;;===============================================
(defun C:CCH( / r) ;;;Count Circles or Hexagons
(initget "C H")
(setq
ctyp (getkword "\ncount Circles or Hexagons :")
r (getreal "\nRadius:")
)
(if (not ctyp) (setq ctyp "C"))
(if (= ctyp "C") (setq n (countCir r )) (setq n (countHex r)))
(alert (strcat "\nType = " ctyp "\t\tRadius = " (rtos r) "\tCount = " (itoa n)))
)
;;;===============================================



Chú ý:
- Chương trình chỉ áp dụng cho các hình lục giác đều được tạo nên bởi lệnh Polygon hoặc lệnh Pline với tùy chọn c (close)
- Các hình lục giác bị explode, nằm trong block hoặc đã biến thành region sẽ không được tính
- Dòng code màu đỏ ssg mới sửa lại cho gọn hơn so với lần post trước

Bài viết đã được chỉnh sửa nội dung bởi ssg: 29 November 2007 - 10:43 AM

  • 0

#354 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 29 November 2007 - 08:23 AM

Bạn nào có thể giúp mình viết lisp với công việc như sau:
- Chọn một đường tròn sẵn có trên bản vẽ, sau đó ghi tọa độ tâm của đường tròn đến 1 vị trí bất kỳ do người dùng chọn.
- Bình thường trong bản vẽ kỹ thuật hay ghi kích thước theo kiểu như sau VD: 3000/2=1500. Khi ghi kích thước theo kiểu này mình thường hay ghi kích thước bằng lệnh Autocad, sau đó edit nội dung của kích thước. Mà trong bản vẽ xây dựng thường rất hay dùng.
Cám ơn các bạn nhé

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ì!
  • 0

#355 leolas

leolas

    biết lệnh stretch

  • CADViet Team
  • PipPipPip
  • 163 Bài viết
Điểm đánh giá: 133 (tàm tạm)

Đã gửi 29 November 2007 - 12:23 PM

2) @leolas: bạn thử code dưới đây trong nhiều trường hợp khác nhau xem có lỗi gì không? Riêng phần ghi kết quả, bạn không nói rõ quy cách ghi như thế nào.

Cám ơn 2 lisp của bác "ssg" và "duy782006". Đã text thử ở nhiều trường hợp, chạy tốt. Nhờ có nó công việc của em đã nhanh hơn
  • 0
Let those who only see the thorns have eyes to see the rose

#356 laichauc45

laichauc45

    biết pan

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

Đã gửi 29 November 2007 - 02:53 PM

tôi cúng là một dân trong kỹ thuật nên CAD là điều không thể thiếu được nhưng công việc của tôi đôi khi phải chuyển bản vẽ cho người khác (cho nên cần tính bảo mất cho bản vẽ vì dùnh PDF thì cũng bất tiện )vậy có bác nào giúp hộ tôi viết lisp có thể phá tất cả các đối tượng thành các nét nhỏ được không.
2- tôi có 1 thư viện các chi tiết liên quan đến ngành của tôi và tôi muốn có 1 lisp ( hoạc 1 chương trình ) chỉ cấn gõ tên chi tiết đó là nó có thể hiện lên chi tiết đó trong dấu nháp của con chỏ ( ngày xưa tôi đã dùng rồi nhưng do hỏng máy nên mất cái này mà đi xin thì giờ không biết xin ai) nhờ các bác giúp đỡ 1 tay nhé
  • 0

#357 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 29 November 2007 - 08:23 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. Vì mình 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 bắt điểm và lại phải chỉ vị trí cho nó. Như thế rất lâu.

2. Thường mình vẽ hết toàn bộ các hình xong, sau đó bố trí và ghi kích thước. Chỉ việc gõ lệnh và pick điểm để ghi kích thước thật cho mỗi hình vẽ, không bao giờ phải gõ "M" để ghi text cho bản vẽ nữa vì như thế rất lâu.

Cám ơn bác SSG nhé, vì lần trước em chỉ nêu chung chung mà không nói rõ cụ thể. Bác SSG, anh em nào xem có thể giúp mình không ?
  • 0

#358 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 30 November 2007 - 11:43 AM

tôi cúng là một dân trong kỹ thuật nên CAD là điều không thể thiếu được nhưng công việc của tôi đôi khi phải chuyển bản vẽ cho người khác (cho nên cần tính bảo mất cho bản vẽ vì dùnh PDF thì cũng bất tiện )vậy có bác nào giúp hộ tôi viết lisp có thể phá tất cả các đối tượng thành các nét nhỏ được không.
2- tôi có 1 thư viện các chi tiết liên quan đến ngành của tôi và tôi muốn có 1 lisp ( hoạc 1 chương trình ) chỉ cấn gõ tên chi tiết đó là nó có thể hiện lên chi tiết đó trong dấu nháp của con chỏ ( ngày xưa tôi đã dùng rồi nhưng do hỏng máy nên mất cái này mà đi xin thì giờ không biết xin ai) nhờ các bác giúp đỡ 1 tay nhé

1) Bạn dùng thử chương trình này. Cung cách hoạt động của CT như sau:
- User chọn vùng cần xử lý, trong phạm vi hình chữ nhật được xác định bằng 2 điểm pick
- CT explode toàn bộ các blocks
- Explode toàn bộ các pline (thành line và arc)
- CT không split arc, circle và spline (nếu làm sẽ gãy khúc, in ra không coi được!)
- Split line thành từng segments có chiều dài do người dùng chọn. Lưu ý: trị số này càng nhỏ, số lượng segment càng lớn -> thời gian chạy CT lâu hơn và kích thước file cũng lớn lên theo tương ứng. Trị số trong cặp dấu móc nhọn là do CT tính và đề nghị = 1/100 khoảng cách 2 điểm pick khi user chọn vùng (nếu đồng ý chỉ Enter)
- Purge toàn bộ các block


;;;----------------------------------------------------------------------------------
(defun expall (ss / e) ;;;Explode all entities in ss
(while (setq e (ssname ss 0))
(command "explode" e)
(ssdel e ss)
)
)
;;;----------------------------------------------------------------------------------
(defun splite(e x / d lay col p1 p2 L a n) ;;;Convert a line to segments
(setq
d (entget e)
lay (cdr (assoc 8 d))
col (cdr (assoc 62 d))
p1 (cdr (assoc 10 d))
p2 (cdr (assoc 11 d))
L (distance p1 p2)
a (angle p1 p2)
n (fix (/ L x))
)
(if (= n 0) (setq n 1))
(setq x (/ L n))
(if (null col) (setq col "BYLAYER"))
(setvar "clayer" lay)
(command "color" col)
(repeat n
(command "line" p1 (polar p1 a x) "")
(setq p1 (getvar "lastpoint"))
)
(entdel e)
)
;;;=============================================
(defun C:SS( / p1 p2 di x0 x oldos ss nL i e per) ;;;Split selected objects to Segments
(prompt "\nSelect objects in a window, specified by 2 points...")
(setq
p1 (getpoint "\nFirst corner:")
p2 (getcorner p1 "\nOpposite corner:")
di (distance p1 p2)
x0 (fix (/ di 100))
x (getreal (strcat "\nLength of segments <" (itoa x0) " >:"))
oldos (getvar "osmode")
)
(if (null x) (setq x x0))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(while (setq ss (ssget "w" p1 p2 '((0 . "INSERT")))) (expall ss))
(while (setq ss (ssget "w" p1 p2 '((0 . "LWPOLYLINE")))) (expall ss))
(setq
ss (ssget "w" p1 p2 '((0 . "LINE")))
nL (sslength ss)
i -1
)
(repeat nL
(setq
i (1+ i)
e (ssname ss i)
per (fix (+ (* (/ (float i) nL) 100) 0.5))
)
(splite e x)
(setvar "cmdecho" 1)
(princ (strcat "\n" (itoa per) "% objects had been splited"))
(setvar "cmdecho" 0)
)
(command "purge" "a" "*" "n")
(setvar "osmode" oldos)
(setvar "cmdecho" 1)
(alert "\nFinish!")
)
;;;=============================================


2) Theo bạn mô tả thì đó là insert block. Bạn thử dùng lệnh adcenter (AutoCAD Design Center, bấm Ctrl+2) bao giờ chưa? Cái này đúng yêu cầu của bạn, cần gì đến lisp.
  • 0

#359 vinataba

vinataba

    biết vẽ circle

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

Đã gửi 01 December 2007 - 01:07 AM

EM TÌM ĐƯỢC DOẠN CODE TÍNH GIÁ TRỊ TRUNG BÌNH. NHƯNG MÀ HÌNH NHƯ NÓ BỊ LỖI, CHẠY KHÔNG ĐƯỢC. CÁC CAO THỦ VÀO XEM SỬA GIÚP EM VỚI. THANKS

;Tinh gia tri trung binh cac so chon
;*************************************************************************
(defun C:tb (/ cnt enam ent pnt s1 tot v1 val)
(setvar "CMDECHO" 0)
(prompt "\nChon cac so de tinh: ")
(setq s1 (ssget))
(prompt "\nDiem dat ket qua: ")
(setq pnt (getpoint))
(setvar "cmdecho" 0)
(setq tot 0)
(if s1
(progn
(setq cnt (1- (sslength s1)))
(while (>= cnt 0)
(setq enam (ssname s1 cnt))
(setq ent (entget enam))
(if (= (cdr (assoc 0 ent)) "TEXT")
(progn
(setq v1 (assoc 1 ent))
(setq val (atof (cdr v1)))
(if (and (numberp val) (/= val 0))
(progn
(setq tot (+ val tot))
)
)
)
)
(setq cnt (1- cnt))
))
)
(setq tot (/ tot (sslength s1)))
(setq tot (rtos tot 2))
(command "text" pnt "" tot)
(princ)
(setvar "cmdecho" 1)
)
  • 0

#360 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 01 December 2007 - 09:16 AM

EM TÌM ĐƯỢC DOẠN CODE TÍNH GIÁ TRỊ TRUNG BÌNH. NHƯNG MÀ HÌNH NHƯ NÓ BỊ LỖI, CHẠY KHÔNG ĐƯỢC. CÁC CAO THỦ VÀO XEM SỬA GIÚP EM VỚI. THANKS



Cái này làm việc đó được nè. Còn bây giờ hơi bận nên không sửa đoạn của bạn được

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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
;--------------------

  • 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