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

#1721 minhdao1905

minhdao1905

    Chưa sử dụng CAD

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

Đã gửi 22 March 2009 - 09:58 PM

Chào bác Hoành. Em dang viết một chương trình về ngành trắc địa. Em có vấn đề sau nhờ bác gúp hộ: Đọc dữ liệu từ file *.txt sau đó gán dữ liệu đó cho một biến
File số liệu *.txt như sau
1 1000.00 2000.00 10.00 DC1
Bây giờ muốn đọc file này đồng thời trên 1 dòng sau mỗi dấu cách gán cho nó các biến lần lượt như: 1=stti, 10000.00=xi, 2000.00=yi, 10.00=zi, DC1= teni
  • 0

#1722 anhlylyhuynh

anhlylyhuynh

    biết zoom

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

Đã gửi 23 March 2009 - 10:11 AM

Chuyển các các điểm có cao độ là các text 2d thành các contours rồi sử dụng lệnh QP của Lisp được post ở bài #22: http://www.cadviet.c...o...=9019&st=20 và xem video clip demo ở bài #29.
Kết quả được PP làm thử: http://www.cadviet.c...CUA_LISP_QP.zip

Mình sẽ thử.Cảm ơn bạn Phiphi rất nhiều.
  • 0

#1723 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 24 March 2009 - 08:52 AM

thành viên mới nhờ bác hoanh giúp đỡ. bác có thể giúp em làm sao để chọn được các đối tượng là line trong bản bản vẻ gồm có text trong đó không? bình thường thì em dùng filter . co thể làm cho em 1 cái lisp được ko . chọn để xóa các line đó luôn . thank bac nha
  • 0

#1724 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 24 March 2009 - 08:53 AM

thành viên mới nhờ bác hoanh giúp đỡ. bác có thể giúp em làm sao để chọn được các đối tượng là line trong bản bản vẻ gồm có text trong đó không? bình thường thì em dùng filter . co thể làm cho em 1 cái lisp được ko . chọn để xóa các line đó luôn . thank bac nha
  • 0

#1725 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 24 March 2009 - 09:30 AM

chào mọi người .mình là thành viên mới có vấn đề cần nhờ mọi người giúp đỡ tí nha. trong bản vẽ này chổ cái BILL OF MATERIAL
các đường line bị đứt đoạn. giờ mình muốn nối lai thành 1 line . thì làm sao cho nhanh đây?. thường thì mình dùng filter để chọn line rồi xoá song nối line lại. nhưng dùng filter th2 nó nổi lên bản object selscetion làm sao để ko hiện len bản này nữa. hay là có thể viết cho mình 1 cái lisp làm việc này được không . thank trước nha mọi người. gấp lắm đó .giúp nhanh nha. help me
http://www.cadviet.c...PR5_D7587_1.zip
  • 0

#1726 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 24 March 2009 - 09:41 AM

chào mọi người .mình là thành viên mới có vấn đề cần nhờ mọi người giúp đỡ tí nha. trong bản vẽ này chổ cái BILL OF MATERIAL
các đường line bị đứt đoạn. giờ mình muốn nối lai thành 1 line . thì làm sao cho nhanh đây?. thường thì mình dùng filter để chọn line rồi xoá song nối line lại. nhưng dùng filter th2 nó nổi lên bản object selscetion làm sao để ko hiện len bản này nữa. hay là có thể viết cho mình 1 cái lisp làm việc này được không . thank trước nha mọi người. gấp lắm đó .giúp nhanh nha. help me
http://www.cadviet.c...PR5_D7587_1.zip

Đầu tiên nhắc nhở bạn cân nhắc kỹ trước khi post bài tránh làm người khác khó chịu khi đọc yêu cầu.
Lisp sau cho phép bạn chọn toàn bộ line trong vùng bạn chọn.

(Defun c:chonline ( )
(Princ "\nHay chon vung :")
(setq SS (ssget '((0 . "line"))))
(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 la LINE"))
)
)
(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


#1727 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 March 2009 - 09:41 AM

thành viên mới nhờ bác hoanh giúp đỡ. bác có thể giúp em làm sao để chọn được các đối tượng là line trong bản bản vẻ gồm có text trong đó không? bình thường thì em dùng filter . co thể làm cho em 1 cái lisp được ko . chọn để xóa các line đó luôn . thank bac nha

Đây bạn : Chọn Line và Text
(defun c:CLT()
(setq doituong (ssget '((0 . "text,line"))))
(princ)
)
to ngocthinh84 : đọc bản vẽ của bạn không hiểu bạn muốn gì thì làm sao giúp đây???
  • 1

#1728 phuonghuynhduy

phuonghuynhduy

    biết vẽ line

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

Đã gửi 24 March 2009 - 10:12 AM

Anh Hoành cho em hỏi tại sao câu lệnh này Lisp báo lỗi "too many arguments":
(action_tile "load" "(setq filename (getfiled "Doc file so lieu" "" "txt" 1))")
Mong trả lời giúp. Thank,
  • 0

#1729 thao_tedi

thao_tedi

    biết zoom

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

Đã gửi 24 March 2009 - 01:49 PM

Mình có một lisp ghi khoảng cách và cao độ tuyệt đối so với khoảng cách và cao độ gốc (cái này thích hợp cho thiết kế trắc ngang, tính cao độ đào đất yếu và cao độ cống) nhưng format nó không được đẹp lắm. Các bạn có thể giúp mình sửa nó để kết quả tạo ra một leader với Mtext trong đó Mtext gồm 2 dòng: Dòng trên là khoảng cách tương đối so với điểm gốc chọn ban đầu, dòng thứ 2 là cao độ tuyệt đối của điểm được chọn được không?
Xin cảm ơn

;*******************************************************************************
***************;
;Ghi cao do, offset cua diem can cu vao diem goc
(defun c:eff ( / pt p1 p01 p02 ent ecopy elev elev1 offset etype txth)
(setvar "osmode" 1)
(command "ucs" "w")
(setq pt (getpoint "\nPick reference point: ")
ent (entget(car(entsel "\nSelect elevation text: ")))
etype (cdr(assoc 0 ent))
txth (cdr(assoc 40 ent))
)
(if (/= etype "TEXT") (progn
(princ "\nThe elevation selection must be a TEXT entity")
(exit))
(setq elev (atof(cdr(assoc 1 ent))))
)

(command "layer" "m" "UNSUITABLE" "")

(while (setq p1(getpoint "\nPick offset point"))
(setq elev1 (+ elev (- (cadr p1) (cadr pt)))
offset (abs(- (car p1) (car pt)))
p01 (polar p1 (* 3.0 (/ pi 2)) txth)
p01 (polar p01 pi (* 0.9 txth))
p02 (polar p01 0 (* 1.6 txth))
ecopy (list (assoc 0 ent)
(cons 100 "AcDbEntity")
(cons 8 "UNSUITABLE")
(cons 100 "AcDbText")
(assoc 10 ent)
(assoc 40 ent)
(cons 1 (strcat "Cao ®é: " (rtos elev1 2 2)))
(assoc 50 ent)
(assoc 41 ent)
(assoc 51 ent)
(assoc 7 ent)
(cons 71 0)
(cons 72 2)
(list 11 (car p01) (cadr p01) 0.0)
(list 210 0.0 0.0 1.0)
(cons 100 "AcDbText")
(cons 73 2)
)
)
(entmake ecopy)
(setq ecopy (list (assoc 0 ent)
(cons 100 "AcDbEntity")
(cons 8 "UNSUITABLE")
(cons 100 "AcDbText")
(assoc 10 ent)
(assoc 40 ent)
(cons 1 (strcat "K.c¸ch: " (rtos offset 2 2)))
(assoc 50 ent)
(assoc 41 ent)
(assoc 51 ent)
(assoc 7 ent)
(cons 71 0)
(cons 72 2)
(list 11 (car p02) (cadr p02) 0.0)
(list 210 0.0 0.0 1.0)
(cons 100 "AcDbText")
(cons 73 2)
)
)
(entmake ecopy)
(princ "\nPress ESC or SPACE bar to cancel")
)
(end_task)
)
  • 0

#1730 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 25 March 2009 - 12:50 PM

a. tại cái khung có vẽ mây lại đó . mình muốn xoá hết các line bị đứt và nối lại thành 1 line ma thôi. có cách nào hay không . chỉ dùm nhe
  • 0

#1731 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 25 March 2009 - 01:21 PM

Bác nào có lisp có chức năng insert 1 item vào 2 đầu đường line mà mình vẽ không ạ?

Ví dụ như em vẽ cốt thép thì nó tự chèn 2 cái móc vào 2 đầu ( 2 cái móc này lại đối xứng nhau ) hay em vẽ cốt thép mũ thì nó tự chèn 2 đoạn thẳng vuông góc với đường line em vừa vẽ.

Hình đã gửi

Hoặc bác nào có thể viết giúp em 1 cái được không ạ?

Đa tạ, đa tạ!
  • 0

Hình đã gửi


#1732 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 25 March 2009 - 02:12 PM

Anh Hoành cho em hỏi tại sao câu lệnh này Lisp báo lỗi "too many arguments":
(action_tile "load" "(setq filename (getfiled "Doc file so lieu" "" "txt" 1))")
Mong trả lời giúp. Thank,

Bạn hãy sửa thành:
(action_tile "load" "(setq filename (getfiled \"Doc file so lieu\" \"\" \"txt\" 1))")
  • 0

#1733 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 25 March 2009 - 02:13 PM

Bác nào có lisp có chức năng insert 1 item vào 2 đầu đường line mà mình vẽ không ạ?

Ví dụ như em vẽ cốt thép thì nó tự chèn 2 cái móc vào 2 đầu ( 2 cái móc này lại đối xứng nhau ) hay em vẽ cốt thép mũ thì nó tự chèn 2 đoạn thẳng vuông góc với đường line em vừa vẽ.

Hình đã gửi

Hoặc bác nào có thể viết giúp em 1 cái được không ạ?

Đa tạ, đa tạ!

Bạn hãy upload 1 file lên, chúng tôi sẽ tạo lisp cho bạn.
  • 1

#1734 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 25 March 2009 - 03:27 PM

Bạn hãy upload 1 file lên, chúng tôi sẽ tạo lisp cho bạn.



Đây ạ:
http://www.mediafire...php?ommgmnmflgt

Cảm ơn bác rất nhiều!
  • 0

Hình đã gửi


#1735 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 25 March 2009 - 05:45 PM

a. tại cái khung có vẽ mây lại đó . mình muốn xoá hết các line bị đứt và nối lại thành 1 line ma thôi. có cách nào hay không . chỉ dùm nhe

Bạn xài thử cái lisp này của bác ssg xem nhé.
(defun c:nn (/ tdt ssdt sodt index)
(defun ObjName (ssdt /)
(cdr (assoc '0 (entget ssdt)))
)
(defun MoPL (ssdt /)
(= (cdr (assoc '70 (entget ssdt))) 0)
)
(defun NoiPL (ssdt /)
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" (ssget) "" "")

)
)
(defun NoiLC (ssdt /)
(command ".PEDIT" ssdt "Y" "J" (ssget) "" "")

)
(setq
tdt (ssget)
sodt (sslength tdt)
index 0
)
(repeat sodt
(setq
ssdt (ssname tdt index)
index (1+ index)
)
(if (or (= (Objname ssdt) "LWPOLYLINE")
(= (Objname ssdt) "POLYLINE")
)
(NoiPL ssdt)
)
(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))
(NoiLC ssdt)
)
)
(princ)
)
Hy vọng bạn hài lòng.
Cách xài:
1/- load lisp váo cad
2/- gõ lệnh nn
3/- Chọn đối tượng theo cửa sổ
4/- Nhân Enter.
5/- kiểm tra kết quả.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1736 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 25 March 2009 - 05:56 PM

Đây ạ:
http://www.mediafire...php?ommgmnmflgt

Cảm ơn bác rất nhiều!

Bác Kỹ sư có thể post file dưới dạng cad2004 không ạ. Cho anh em mót với ạ.
Thanks bác trướ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.

#1737 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 25 March 2009 - 06:52 PM

Bác nào có lisp có chức năng insert 1 item vào 2 đầu đường line mà mình vẽ không ạ?
Ví dụ như em vẽ cốt thép thì nó tự chèn 2 cái móc vào 2 đầu ( 2 cái móc này lại đối xứng nhau ) hay em vẽ cốt thép mũ thì nó tự chèn 2 đoạn thẳng vuông góc với đường line em vừa vẽ.
Hình đã gửi
Hoặc bác nào có thể viết giúp em 1 cái được không ạ?
Đa tạ, đa tạ!

Đây chỉ là các Dynamic blocks, select đối tượng, click vào các mũi tên xanh, thay đổi, move... hãy tự khám phá thêm sẽ thấy...
http://www.cadviet.c...ges__Rebars.zip
  • 1

#1738 notme48

notme48

    Chưa sử dụng CAD

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

Đã gửi 25 March 2009 - 09:17 PM

Mình muốn tìm lisp đánh trục tự động mà không thấy. Ai thấy chỉ cho mình với. Thanks :cry:
  • 0

#1739 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 25 March 2009 - 11:39 PM

Bác Kỹ sư có thể post file dưới dạng cad2004 không ạ. Cho anh em mót với ạ.
Thanks bác trước.


Hi hi, cái file kia là em post lên để bác nào viết hộ em dễ hình dung thôi mà bác! :cry:

Đây chỉ là các Dynamic blocks, select đối tượng, click vào các mũi tên xanh, thay đổi, move... hãy tự khám phá thêm sẽ thấy...
http://www.cadviet.c...ges__Rebars.zip


Cái này là thể hiện cốt thép trên tiết diện chứ không phải là vẽ cốt thép trên mặt bằng sàn mà em cần bác ạ
Dù sao cũng cảm ơn bác, cái này cũng sẽ dùng nhiều đây! :cry:
  • 0

Hình đã gửi


#1740 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 March 2009 - 05:19 AM

Bác nào có lisp có chức năng insert 1 item vào 2 đầu đường line mà mình vẽ không ạ?

Ví dụ như em vẽ cốt thép thì nó tự chèn 2 cái móc vào 2 đầu ( 2 cái móc này lại đối xứng nhau ) hay em vẽ cốt thép mũ thì nó tự chèn 2 đoạn thẳng vuông góc với đường line em vừa vẽ.

Hình đã gửi

Hoặc bác nào có thể viết giúp em 1 cái được không ạ?

Đa tạ, đa tạ!

Bạn dùng thử Code này xem :

;VE THEP AM
(DEFUN C:SAM (/ OLDERR CMD OSM DK PT1 PT2 STR PRPT GOCX
PTD PTC)
(SETQ OLDERR *error*
*error* myerror)
(command "layer" "m" "thep" "c" "1" """")
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(SETQ DK (GETVAR "USERR3"))
(IF (= DK 0)
(PROGN
(SETQ STR "100")
(SETVAR "USERR3" 100)
)
(SETQ STR (RTOS DK))
)
(SETQ PRPT (STRCAT "do dai moc: <" STR ">:"))
(SETQ DK (GETREAL PRPT))
(IF (= DK NIL)
(SETQ DK (GETVAR "USERR3"))
(SETVAR "USERR3" DK)
)
(INITGET 7)
(SETQ PTD (GETPOINT "\nFrom point:"))
(INITGET 7)
(SETQ PTC (GETPOINT PTD "\nTo point:"))
(SETVAR "OSMODE" 0)
(SETQ GOCX (ANGLE PTD PTC))

(SETQ PT1 (POLAR PTD (- GOCX (/ pi 2)) (* 1 DK)))
(SETQ PT2 (POLAR PTC (- GOCX (/ pi 2)) (* 1 DK)))
(COMMAND "PLINE" pt1 ptd ptc pt2 "")
(SETVAR "OSMODE" OSM)
(SETVAR "CMDECHO" CMD)
(PRINC)
)
;VE THEP DUOI
(DEFUN C:SDuong (/ OLDERR CMD OSM DK PT1 PT2 PT3 PT4 PT5 PT6 STR PRPT GOCX GOCY
PTD PTC)
(SETQ OLDERR *error*
*error* myerror)
(command "layer" "m" "thep" "c" "1" """")
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(SETQ DK (GETVAR "USERR3"))
(IF (= DK 0)
(PROGN
(SETQ STR "100")
(SETVAR "USERR3" 100)
)
(SETQ STR (RTOS DK))
)
(SETQ PRPT (STRCAT "Duong kinh moc tron <" STR ">:"))
(SETQ DK (GETREAL PRPT))
(IF (= DK NIL)
(SETQ DK (GETVAR "USERR3"))
(SETVAR "USERR3" DK)
)
(INITGET 7)
(SETQ PTD (GETPOINT "\nFrom point:"))
(INITGET 7)
(SETQ PTC (GETPOINT PTD "\nTo point:"))
(SETVAR "OSMODE" 0)
(SETQ GOCX (ANGLE PTD PTC))
(SETQ GOCY (+ GOCX (/ PI 2)))
(SETQ PT1 (POLAR PTD GOCX (/ (* 1 DK) 2)))
(SETQ PT2 (POLAR PTC (+ GOCX PI) (/ (* 1 DK) 2)))
(SETQ PT3 (POLAR PT1 GOCY (* 1 DK)))
(SETQ PT4 (POLAR PT2 GOCY (* 1 DK)))
(SETQ PT5 (POLAR PT3 GOCX (* 1 DK)))
(SETQ PT6 (POLAR PT4 (+ GOCX PI) (* 1 DK)))
(COMMAND "PLINE" PT5 PT3 "A" PT1 "L" PT2 "A" PT4 "L" PT6 "")
(SETVAR "OSMODE" OSM)
(SETVAR "CMDECHO" CMD)
(PRINC)
)

Chúc thành công :cry:
  • 2