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

#1101 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 16 September 2008 - 11:40 AM

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

Xin chào Anh Hoành! Em là thành viên mới, em đã xem rất nhiều lisp mà anh viết, em công nhận Anh là cao thủ về lisp, các yêu cầu của các thành viên diễn đàn anh đều đáp ứng được. Em cũng mới tập tành nghiên cứu về lisp, như em thấy khó quá, trăm sự nhờ anh giúp đỡ.
Em muốn anh viết giúp em một lisp như sau: Tạo một Linetype trong Autocad có cú pháp text nằm giữa các ký hiệu gạch ngang (ví dụ: ống D100===ống D100===Ống D100, ống D150===ống D150===ống D150...) để em sử dụng trong bản vẽ mặt bằng cấp nước. Cảm ơn Anh nhiều
(Có thể em viết hơi dài, nhưng mong Anh thông cảm, vì là thành viên mới nên cách diễn đạt chưa được hay lắm)
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#1102 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 16 September 2008 - 01:40 PM

Xin chào Anh Hoành! Em là thành viên mới, em đã xem rất nhiều lisp mà anh viết, em công nhận Anh là cao thủ về lisp, các yêu cầu của các thành viên diễn đàn anh đều đáp ứng được. Em cũng mới tập tành nghiên cứu về lisp, như em thấy khó quá, trăm sự nhờ anh giúp đỡ.
Em muốn anh viết giúp em một lisp như sau: Tạo một Linetype trong Autocad có cú pháp text nằm giữa các ký hiệu gạch ngang (ví dụ: ống D100===ống D100===Ống D100, ống D150===ống D150===ống D150...) để em sử dụng trong bản vẽ mặt bằng cấp nước. Cảm ơn Anh nhiều
(Có thể em viết hơi dài, nhưng mong Anh thông cảm, vì là thành viên mới nên cách diễn đạt chưa được hay lắm)


Để tạo linetype như bạn yêu cầu thì cad có sẳn lệnh trong phần Express rồi đó bạn. Lệnh là MKLTYPE . bạn tìm trong diển đàn mình có bài hướng dẩn dùng lệnh này rất kỷ rồi đó.
  • 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


#1103 phutthu6

phutthu6

    biết vẽ arc

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

Đã gửi 18 September 2008 - 09:45 AM

em có một yêu cầu nhỏ mong các bờ rồ giúp em viết 1 cái lisp.Nó đơn giản cực, nhưng em không có thời gian để học lisp nên không thể tự viết được.
Nó như thế này ạ:
bản vẽ của em dùng layer theo số thứ tự từ 1 đến 9. Em muốn cái lisp đó có một loạt lệnh là các số từ 1 đến 9 để chuyển sang các layer cùng. Nghĩa là lệnh "1" sẽ chuyển sang layer hiện hành là layer-1, lệnh "2" sang layer 2, ...(giống như lệnh "ai_molc" rồi click vào layer trong bản vẽ)
Em xin cám va mong sớm có lisp để dùng. Chúc cả nhà vui vẻ
  • 0

#1104 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 18 September 2008 - 09:49 AM

em có một yêu cầu nhỏ mong các bờ rồ giúp em viết 1 cái lisp.Nó đơn giản cực, nhưng em không có thời gian để học lisp nên không thể tự viết được.
Nó như thế này ạ:
bản vẽ của em dùng layer theo số thứ tự từ 1 đến 9. Em muốn cái lisp đó có một loạt lệnh là các số từ 1 đến 9 để chuyển sang các layer cùng. Nghĩa là lệnh "1" sẽ chuyển sang layer hiện hành là layer-1, lệnh "2" sang layer 2, ...(giống như lệnh "ai_molc" rồi click vào layer trong bản vẽ)
Em xin cám va mong sớm có lisp để dùng. Chúc cả nhà vui vẻ

bạn xem ở đây: đặt lệnh tắt cho các Layer bằng phím số bên trên
  • 0

#1105 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 19 September 2008 - 07:17 PM

PP nhờ các Bác viết cho đoạn Lisp, chỉ cần select vào line Gas trong bản vẽ thí dụ (hoặc bất kỳ linetype nào) thì nó sẽ tự xoay 180 độ để có thể đọc được ký hiệu rò ràng mà không phải xoay bản vẽ. Xin cám ơn nhiều.
http://www.cadviet.c...p_size_down.zip
  • 0

#1106 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 19 September 2008 - 09:34 PM

PP nhờ các Bác viết cho đoạn Lisp, chỉ cần select vào line Gas trong bản vẽ thí dụ (hoặc bất kỳ linetype nào) thì nó sẽ tự xoay 180 độ để có thể đọc được ký hiệu rò ràng mà không phải xoay bản vẽ. Xin cám ơn nhiều.
http://www.cadviet.c...p_size_down.zip


Lệnh là FL (flip line):
(defun c:fl()
(setq ss (ssget '((0 . "LINE"))))
(while (> (sslength ss) 0)
(setq
ent (ssname ss 0)
tt (entget ent)
d10 (assoc 10 tt)
d11 (assoc 11 tt)
tt (subst (cons 11 (cdr d10)) d11 tt)
tt (subst (cons 10 (cdr d11)) d10 tt)
ss (ssdel ent ss)
)
(entmod tt)
)
(princ)
)

  • 1

#1107 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 19 September 2008 - 10:18 PM

Lệnh là FL (flip line):
...

Rất cám ơn Bác Nguyễn Hoành.
Have a good night!
  • 0

#1108 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 20 September 2008 - 10:20 AM

Mình sưu tầm một lisp tính diện tính tự động cho tất cả polyline kín, cực hay nhưng trong quá trình sử dụng có một số bất tiện, cần phải sửa lại nội dung lisp cho phù hợp nhưng mình không hiểu về lisp, nhờ các bạn nghiên cứu giúp.
mình đã có một bản vẽ gồm nhiều thửa đất được tạo bằng các polylines kín, trong mỗi thửa có point tâm thửa (file VD1)
http://www.cadviet.com/upfiles/VD1.dwg
Dùng lisp trên để tính và ghi diện tích tự động
Nếu thiết lập sẵn text height >0 thì kết quả diện tích các thửa đất đều có một giá trị là 0 (file VD2)
http://www.cadviet.com/upfiles/VD2.dwg
Do vậy, muốn tính, ghi diện tích đúng thì phải thiết lập text height =0 trước khi sử dụng lisp (file VD3)
http://www.cadviet.com/upfiles/VD3.dwg
Mình muốn sử dụng lisp này không cần khai báo chiều cao text trong quá trình sử dụng lisp, mà sử dụng chiều cao thiết lập sẵn trong text style
Về vị trí ghi text: đoạn lisp ghi text diện tích tại điểm pt nào đó mình không hiểu, nhưng nó không quan hệ gì với các point tâm thửa đã có. Mình muốn các text này ghi vào vị trí point tương ứng của mỗi thửa và J=TC (file VD4)
http://www.cadviet.com/upfiles/VD4.dwg
Và đây là đoạn lisp

(defun C:AREARON (/
allx
ally
areaobj
counter
ctr
el
entity-name
entnamevla
mysset
pt
tst
vertex
x
y
)
(vl-load-com)
(COMMAND "_.UNDO" "BE")
(set_var)
(if (tblsearch "Layer" "AREARON")
(command "._layer"
"_thaw"
"AREARON"
"_on"
"AREARON"
"_unlock"
"AREARON"
"_set"
"AREARON"
""
) ;_ closes command
(command "._layer"
"_make"
"AREARON"
"_color"
1
"AREARON"
""
) ;_ closes command
)
(if (null sch)
(setq sch 1.0)
)
(initget 6)
(setq temp (getreal (strcat "\nENTER SCALE <"
(rtos sch 2 2)
">: "
)
)
)
(if temp
(setq sch temp)
(setq temp sch)
)

(if (null precision)
(setq precision 1)
)
(initget 6)
(setq prec_temp (getint (strcat "\nHOW MANY DECIMAL PLACES?: <"
(rtos precision 2 2)
">: "
)
)
)
(if prec_temp
(setq precision prec_temp)
(setq prec_temp precision)
)
(prompt "\nSELECT CLOSED POLYLINES:> ")
(setq
mysset (ssget '((0 . "POLYLINE,LWPOLYLINE") (-4 . "&") (70 . 1)))
counter 0
)
(if mysset
(progn
(while (< counter (sslength mysset))
(setq allx 0
ally 0
ctr 0
tst 1
entity-name (ssname mysset counter)
EL (entget entity-name)
entnamevla (vlax-ename->vla-object entity-name)
areaobj (vla-get-area entnamevla)
)
(while (assoc 10 el)
(setq vertex (cdr (assoc 10 el))
ctr (+ ctr 1)
x (car vertex)
y (cadr vertex)
allx (+ allx x)
ally (+ ally y)
EL (cdr (member (assoc 10 el) el))
)
)
(setq x (/ allx ctr)
y (/ ally ctr)
pt (list x y)
)
(command "text" "j" "mc"
pt
(* sch 2.5)
"0"
(rtos areaobj 2 precision)
)
(setq counter (+ counter 1))
)
)
(alert "\nNO CLOSED POLYLINES/LWPOLYLINES IN YOUR SELECTION"
)
)
(reset_var)
(princ)
(COMMAND "_.UNDO" "END")
)
(princ)


(defun set_var ()
(setq oldlayer (getvar "clayer"))
(setq oldsnap (getvar "osmode"))
(setq temperr *error*)
(setq *error* traperror)
(setvar "osmode" 0)
(princ)
)


(defun traperror (errmsg)
(command nil nil nil)
(if (not (member errmsg '("console break" "Function Cancelled"))
)
(princ (strcat "\nError: " errmsg))
)
(setvar "clayer" oldlayer)
(setvar "osmode" oldsnap)
(princ "\nError Resetting Enviroment ")
(setq *error* temperr)
(princ)
)



(defun reset_var ()
(setq *error* temperr)
(setvar "clayer" oldlayer)
(setvar "osmode" oldsnap)
(princ)
)

---
Nhờ các bạn giúp mình, có thể nhiều người cần sử dụng lisp này. Thanks
  • 0

#1109 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 20 September 2008 - 07:19 PM

Mình đã sửa lại đoạn code trên để nó ghi text có kiểu TC và đúng với trường hợp textheight khác 0, nếu = 0 thì lisp hiện tại đã lấy SCALE*2.5 làm chiều cao text
(defun C:AREARON (/ allx ally areaobj counter ctr el entity-name entnamevla mysset pt tst vertex x y)
(setvar "cmdecho" 0)
(vl-load-com)
(COMMAND "_.UNDO" "BE")
(set_var)
(if (tblsearch "Layer" "AREARON")
(command "._layer"
"_thaw"
"AREARON"
"_on"
"AREARON"
"_unlock"
"AREARON"
"_set"
"AREARON"
""
) ;_ closes command
(command "._layer"
"_make"
"AREARON"
"_color"
1
"AREARON"
""
) ;_ closes command
)
(if (null sch)
(setq sch 1.0)
)
(initget 6)
(setq temp (getreal (strcat "\nENTER SCALE <"
(rtos sch 2 2)
">: "
)
)
)
(if temp
(setq sch temp)
(setq temp sch)
)

(if (null precision)
(setq precision 1)
)
(initget 6)
(setq prec_temp (getint (strcat "\nHOW MANY DECIMAL PLACES?: <"
(rtos precision 2 2)
">: "
)
)
)
(if prec_temp
(setq precision prec_temp)
(setq prec_temp precision)
)
(prompt "\nSELECT CLOSED POLYLINES:> ")
(setq
mysset (ssget '((0 . "POLYLINE,LWPOLYLINE") (-4 . "&") (70 . 1)))
counter 0
)
(if mysset
(progn
(while (< counter (sslength mysset))
(setq allx 0
ally 0
ctr 0
tst 1
entity-name (ssname mysset counter)
EL (entget entity-name)
entnamevla (vlax-ename->vla-object entity-name)
areaobj (vla-get-area entnamevla)
)
(while (assoc 10 el)
(setq vertex (cdr (assoc 10 el))
ctr (+ ctr 1)
x (car vertex)
y (cadr vertex)
allx (+ allx x)
ally (+ ally y)
EL (cdr (member (assoc 10 el) el))
)
)
(setq x (/ allx ctr)
y (/ ally ctr)
pt (list x y)
)
(utext pt (rtos areaobj 2 precision) "TC" (* sch 2.5) "0")
;(command "text" "j" "mc" pt (* sch 2.5) "0" (rtos areaobj 2 precision))
(setq counter (+ counter 1))
)
)
(alert "\nNO CLOSED POLYLINES/LWPOLYLINES IN YOUR SELECTION"
)
)
(reset_var)
(princ)
(COMMAND "_.UNDO" "END")
)
(princ)


(defun set_var ()
(setq oldlayer (getvar "clayer"))
(setq oldsnap (getvar "osmode"))
(setq temperr *error*)
(setq *error* traperror)
(setvar "osmode" 0)
(princ)
)


(defun traperror (errmsg)
(command nil nil nil)
(if (not (member errmsg '("console break" "Function Cancelled"))
)
(princ (strcat "\nError: " errmsg))
)
(setvar "clayer" oldlayer)
(setvar "osmode" oldsnap)
(princ "\nError Resetting Enviroment ")
(setq *error* temperr)
(princ)
)



(defun reset_var ()
(setq *error* temperr)
(setvar "clayer" oldlayer)
(setvar "osmode" oldsnap)
(princ)
)

(defun utext (pt text kieu cao goc)
(if (/= (cdr(assoc 40 (tblsearch "style" (GETVAR "TEXTSTYLE")))) 0)
(progn
(if (/= kieu "")
(COMMAND "_.TEXT" "J" kieu pt goc text)
(COMMAND "_.TEXT" pt goc text)
)
)
(progn
(if (/= kieu "")
(COMMAND "_.TEXT" "J" kieu pt cao goc text)
(COMMAND "_.TEXT" pt cao goc text)
)
)
)
)

  • 0

#1110 Bommak

Bommak

    biết vẽ line

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

Đã gửi 21 September 2008 - 03:15 AM

Em định viết 1 đoạn lisp thực hiện lệnh dimlinear của cad nhưng gặp khó khăn mong được các bác giúp đỡ. Đoạn code em viết thử thì thấy hoạt động bình thường (giống như CAD) đối với các đối tượng đơn (LINE, ARC) nhưng nếu đối tượng chọn (LINE, ARC) là một segment trong 1 LWPOLYLINE thì đoạn code của em không giải quyết được (lệnh dimlinear của CAD thì vẫn giải quyết ngon lành), điều này làm em băn khoăn mà không hiểu tại sao. Em không có kiến thức sâu về xử lý ENTITY data nên loay hoay mãi không biết cách làm. Em mong các bác giúp đỡ. Thanks

(defun c:dx (/ pt1 pt2 obj)
(setq pt1 (getpoint "\nFirst point or :"))
(if (/= pt1 nil)
(progn (setq pt2 (getpoint pt1 "\nSecond point:"))
(command "Dimlinear" pt1 pt2)
)
(progn (setq obj (entsel "\nSelect object:"))
(command "Dimlinear" "" obj)
)
)
(princ)
)


Các bác làm ơn cho em hỏi AutLISP có hàm nào cho phép truy cập vào danh sách con (subentity) của đối tượng LWPOLYLINE không ạ? em thử dùng hàm nentsel thay cho hàm entsel nhưng cũng không giải quyết được. (Không hiểu bằng cách nào mà lệnh dimlinear gốc của CAD lại giải quyết vấn đề này đơn giản thế nhi?)
Mong các bác giúp đỡ.
Em xin cảm ơn
  • 0

#1118 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 23 September 2008 - 08:50 AM

mình tìm mãi mà không thấy, nếu có bạn có thể post cho mình được không. Cảm ơn bạn nhiều

http://www.cadviet.c...?showtopic=3270
Đây bạ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


#1119 hatieu

hatieu

    biết vẽ pline

  • Advance Member
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 23 September 2008 - 09:32 AM

Bác nào giúp em lisp này với!
Em có một đường line A (hoặc đường bất kì) cắt qua nhiều đường B khác, yêu cầu của em là:
- Gõ lệnh: chat
- Chọn đường line A là đối tượng làm dao cắt như lệnh trim
- Chọn phần cần chặt của đường B. Nhưng phần cần chặt không biến mất như lệnh trim mà nó chỉ bị tách ra làm đối tượng khác tại điểm giao cắt của đường A và B
Tại diển đàn em đã dùng thử lệnh BRK nhưng lệnh này ta đôi khi gây khó khăn cho em. Em mong bác nào rảnh giúp em cái nha. Thanks!!
  • 0
Công ty cổ phần đầu tư và xây dựng AGA
Chuyên tư vấn, cung cấp, thi công hệ vách dựng nhôm kính khổ lớn, cửa nhôm kính,
kính cường lực, vách ngăn, lan can, cầu thang kinh, lam nhôm chăn nắng.
Hot: 0984.985.119

#1120 connaivang

connaivang

    biết vẽ arc

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

Đã gửi 23 September 2008 - 10:26 AM

Chào bác Nguyễn Hoành! Em mới phát hiện ra diễn đàn này và cảm thấy nó thật là bổ ích. Em là dân cơ khí và cũng dùng CAD khá thường xuyên. Tuy nhiên, em cũng chưa biết nhiều về Autolip. Em có một câu hỏi thế này muốn nhờ bác giúp. Em muốn bác lập giúp em một lisp có nội dung như sau :
Giả sử trong bản vẽ của em có những dòng text ( có thể là chữ hoặc số). Khi chạy lisp, Cad sẽ hởi ta muốn chèn thêm ký tự gì vào phía trước các dòng text. Ta có thể nhập ký tự mà mình muốn thêm vào. Tiếp theo, Cad sẽ hỏi: Chọn các đối tượng cần chèn thêm ký tự. Ta chọn đối tượng và enter kết thúc lệnh. Sau khi kết thúc lệnh, ở các dòng text trong bản vẽ sẽ được chèn thêm những ký tự đã được nhập vào kia.
Xin cảm ơn bác trước. Mong bác bớt chút thời gian giúp đỡ. Em thật sự đang rất cần lisp này.
  • 0