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

#1261 trinhks

trinhks

    biết vẽ circle

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

Đã gửi 03 November 2008 - 09:12 AM

bạn dùng thử hai lệnh này xem

(defun c:dh1() (command ".dimstyle" "r" "1000")) ; "1000 la ten dimstyle vi du"
(defun c:dh() (command ".dimstyle" "r" "" ))

Trời,ông bạn có biết tôi tìm kiếm cái lisp này của ông cả tháng trời nay rồi ko?cấu trúc của nó thật đơn giản mà lại có ích rất nhiều.Cám ơn ông nhiều nhé .ko biết nhiều về líp thật là thiệt đủ thứ.he.chắc m phải học cách viết lisp thôi.ông bạn có cách nào học dễ hiểu để có thể viết đc,có thể hướng dẫn cho tôi ko?một lần nữa cám ơn ông rất nhiều về tất cả!!!!
  • 0

#1262 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 07 November 2008 - 04:26 PM

thanks snowmen rất nhiều !!! các bạn cho hỏi thêm là : bây h công việc của mình cần dùng nhiều đến2 lệnh offset (O) và ME và thường phải dùng cùng nhau. Ví dụ như khi mình OFFSET 1 đường thằng thì sau đó là phải ME 1 block lên trên đường vừa OFFSET xong, vậy liệu có lisp nào cho phép kết hợp 2 lệnh trên trong 1 lệnh kô ( tạm gọi là lệnh OM).vừa OFFSET và ME 1 block lên đường vừa OFFSET, rất cảm ơn các bạn

lâu rồi kô thấy ai trả lời,mình post lại cái.mong các bạn quan tâm giúp đỡ
  • 0

#1263 AssassiN

AssassiN

    biết pan

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

Đã gửi 07 November 2008 - 07:16 PM

lâu rồi kô thấy ai trả lời,mình post lại cái.mong các bạn quan tâm giúp đỡ

mình cũng muốn biết cách viết lisp, ai biết chỉ dùm nhé
thanks nhiều .
  • 0

#1264 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 07 November 2008 - 07:32 PM

mình cũng muốn biết cách viết lisp, ai biết chỉ dùm nhé
thanks nhiều .

Chào bạn Assassin,
Học viết lisp không khó, cái khó là ứng dụng nó vào công việc cụ thể của mình.
Bạn hãy vào đây để học những vấn đề cơ bản về cách viết lisp, còn ứng dụng thì bạn phải tự cày thôi, chả ai thay bạn được.
http://www.cadviet.c...?showtopic=2480
Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1265 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 07 November 2008 - 09:47 PM

lâu rồi kô thấy ai trả lời,mình post lại cái.mong các bạn quan tâm giúp đỡ

Mọi ng ko "quan tâm" đến vấn đề của bạn vì nhiều lý do. Thứ nhất: việc gộp lệnh trên ko làm giảm tg thao tác là bao nhiêu. Thứ 2: lệnh OM như bạn nói ko được dùng phổ biến cho lắm. Thứ 3: Yêu cầu này ko "hấp dẫn" lắm đối với những ng yêu thích lisp - vì yêu cầu của bạn chỉ là thay 2 thao tác nhàm chán bằng 1 thao tác ít nhàm chán hơn mà thôi (cái này có thể chỉ là ý kiến chủ quan của tôi -_- ).
Đây là đoạn code bạn cần, (post lên để bạn thấy rằng để viết gộp 2 lệnh thành 1 thôi, nhưng để nó "dễ dùng" và "thân thiện" cũng phải...dài dòng văn tự thế nào)
(defun c:OM ( / Osmode obj Me_obj)
(command "undo" "begin")
(setvar "cmdecho" 0)
(setq osmode (getvar "OSMODE"))

(command "Ucs" "w")
(princ "\nChon doi tuong offset")
(setq obj (car (entsel))
)
(if dist
(if (setq dist1 (getreal (strcat "\nKhoang cach offset <"
(rtos dist 2)
"> : "
)
)
)
(setq dist dist1)
)
(setq dist (getreal "\nKhoang cach offset : ")
)
)
(setq
Poff (getpoint "\nChon phia offset")
)
(if Me_dist
(if (setq dist1 (getreal (strcat "\nKhoang cach rai block <"
(rtos Me_dist 2)
"> : "
)
)
)
(setq Me_dist dist1)
)
(setq Me_dist (getreal "\nKhoang cach rai block : ")
)
)
(if Block
(if (setq Block1 (getstring (strcat "\nTen block can rai <"
Block
"> : "
)
)
)
(setq Block Block1)
)
(setq Block (getstring "\nTen block can rai: ")
)
)

(command "offset" dist obj Poff "")
(setq Me_obj (entlast))
(command "measure" Me_obj "b" Block "Y" Me_dist)
(command "Ucs" "P")
(setvar "OSMODE" osmode)
(command "undo" "end")
(setvar "cmdecho" 1)
(princ)

)

  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#1266 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 07 November 2008 - 10:21 PM

Các Bác viết giúp em lish sau với.
Em làm ý công trình. Vẽ bằng Pline với width =220 or =110.
Sau đó em muốn chuyển toàn bộ Pl vừa vẽ về 2 line có khoảng cách 220 or 110
http://www.cadviet.c.../Drawing2_5.dwg

Em đã post yêu cầu 1 lần, nhưng ko thấy ai trả lời, chắc vì đợt đó có quá nhìu iu cầu.
Nay em xin post lại mong các bác giúp


Có ng đã post câu trả lời. nhung đó không phải là những gì câu hỏi của mình đưa ra.
Mong nbhững bậc tiền bỗi giúp đỡ. bởi vì em đang rất cần
  • 0

#1267 tuanlongtl

tuanlongtl

    biết vẽ arc

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

Đã gửi 08 November 2008 - 03:23 PM

Lệnh P2T:


(defun c:P2T (/ sst lstent pp p soht strht)
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(defun getp (ent)
(cdr (assoc 10 (entget ent)))
)
(defun sosanh (ent1 ent2 / p1 p2 x1 y1 x2 y2)
(setq
p1 (getp ent1)
x1 (car p1)
y1 (cadr p1)
p2 (getp ent2)
x2 (car p2)
y2 (cadr p2)
)
(or (< x1 x2)
(and (= x1 x2) (< y1 y2))
)
)

;;------------- Main -------------------------------
(princ "\nPoint to Text © 2007 CADViet.com")
(setq
sst (ssget '((0 . "POINT")))
caochu (getdist "\nVao chieu cao text: ")
soht (1- (getint "\nVao so bat dau danh: "))
lstent (vl-sort (ss2ent sst) 'sosanh)
)
(foreach pp lstent
(setq
soht (1+ soht)
strht (itoa soht)
p (getp pp)
)
(entmake
(list
(cons 0 "TEXT")
(cons 10 P)
(cons 40 caochu)
(cons 1 strht)
)
)
)
(princ)
)
(princ "\nSu dung lenh P2T bat dau")

CÓ cách nào mà không cần phải chọn các point không bác Nguyenhoanh? Giống như lệnh array ấy?Ví dụ có 1 đối tượng là số 1. Bây giờ muốn tạo n hàng và m cột thì dùng lệnh array nó sẽ tạo ra n hàng và m cột số 1. Làm thế nào để vưà array vừa tăng theo chiều x và chiều y?
  • 0

#1268 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 09 November 2008 - 04:07 PM

Vừa rồi tôi có lấy 1 file lisp ở diễn đàn để căn biên cho text. Khi dùng ở bản vẽ mới thì được, với bản vẽ đã có của tôi khi áp dụng lisp này thì text biến đâu mất. Cả file cad, và lisp tôi upload lên đây. Bác nào biết giúp tôi với nhé. http://www.cadviet.com/upfiles/Can_le.rar, Dùng các lệnh rt, lft,...
  • 0

#1269 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 09 November 2008 - 05:02 PM

Vừa rồi tôi có lấy 1 file lisp ở diễn đàn để căn biên cho text. Khi dùng ở bản vẽ mới thì được, với bản vẽ đã có của tôi khi áp dụng lisp này thì text biến đâu mất. Cả file cad, và lisp tôi upload lên đây. Bác nào biết giúp tôi với nhé. http://www.cadviet.com/upfiles/Can_le.rar, Dùng các lệnh rt, lft,...

Với bản vẽ đã có, bạn thử dùng lệnh UCS > W để chuyển ucs hiện hành về World xem sao?
  • 0

#1270 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 10 November 2008 - 09:10 AM

Với bản vẽ đã có, bạn thử dùng lệnh UCS > W để chuyển ucs hiện hành về World xem sao?

Tôi đã dùng như a Hoành nói, nhưng mà không được. Không biết lý do là sao nhỉ. File tôi đã up lên gồm file cad và file lisp. Có ai biết chỉ giáo giúp
  • 0

#1271 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 10 November 2008 - 09:47 AM

Các Bác viết giúp em lish sau với.
Em làm ý công trình. Vẽ bằng Pline với width =220 or =110.
Sau đó em muốn chuyển toàn bộ Pl vừa vẽ về 2 line có khoảng cách 220 or 110


Vấn đề của bạn mình cũng nghĩ và có 2 hướng giải quyết nhưng hướng nào mình cũng bị vướng hết nên mình nêu lên coi có ai giải quyết được không.
1/Đọc độ rộng của pline. Đọc các đỉnh pline, vẽ Mline với độ rộng đo được qua các đỉnh đọc được. Explode cái mline ra. Cách này sẽ sai khi pline có chứa cung tròn. Vấn đề mình vướng là không biết cách lấy tọa độ của pline được chọn (cái này bác ssg làm được nhưng mình đọc hoài không hiểu).
2/Đọc độ rộng của pline. Ofset ra hai phía. Explode ra. cái này thì đúng với cả pline có cung tròn. Vấn đề mình vướng là không biết cách nào dùng lệnh ofset trong líp.
  • 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


#1272 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 10 November 2008 - 06:34 PM

Vấn đề của bạn mình cũng nghĩ và có 2 hướng giải quyết nhưng hướng nào mình cũng bị vướng hết nên mình nêu lên coi có ai giải quyết được không.
1/Đọc độ rộng của pline. Đọc các đỉnh pline, vẽ Mline với độ rộng đo được qua các đỉnh đọc được. Explode cái mline ra. Cách này sẽ sai khi pline có chứa cung tròn. Vấn đề mình vướng là không biết cách lấy tọa độ của pline được chọn (cái này bác ssg làm được nhưng mình đọc hoài không hiểu).
2/Đọc độ rộng của pline. Ofset ra hai phía. Explode ra. cái này thì đúng với cả pline có cung tròn. Vấn đề mình vướng là không biết cách nào dùng lệnh ofset trong líp.


Cám ơn Duy nhiều, để mình thử hỏi Bác ấy xem sao?
Bác SSG có thể giúp em đc không?
  • 0

#1273 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 10 November 2008 - 07:52 PM

Tôi đã dùng như a Hoành nói, nhưng mà không được. Không biết lý do là sao nhỉ. File tôi đã up lên gồm file cad và file lisp. Có ai biết chỉ giáo giúp

Vì lisp bị sai.

Tôi chạy với bản vẽ mới, tất cả đều mặc định, vậy mà dùng lệnh rt,lft text đều văng sang chỗ khác. Bạn thử nhờ tác giả chỉnh lại lisp xem sao.
  • 1

#1274 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 10 November 2008 - 08:07 PM

Các Bác viết giúp em lish sau với.
Em làm ý công trình. Vẽ bằng Pline với width =220 or =110.
Sau đó em muốn chuyển toàn bộ Pl vừa vẽ về 2 line có khoảng cách 220 or 110
http://www.cadviet.c.../Drawing2_5.dwg

Em đã post yêu cầu 1 lần, nhưng ko thấy ai trả lời, chắc vì đợt đó có quá nhìu iu cầu.
Nay em xin post lại mong các bác giúp

Bạn xem lisp CVT ở ngay chính trong chủ đề này: Viết lisp theo yêu cầu

Mục này quá nhiều bài viết rồi, nên nhiều người trong chúng ta khó theo dõi. Sắp tới đây có lẽ phải chia nhỏ topic này thành các topic con theo chủ đề cho dễ theo dõi. Nhớ ngày trước, có thành viên hiến 'tối kiến' là nên gộp các lệnh của autocad vào một topic cho dễ đọc, dễ tìm. May mà quản trị đủ thông mình, chứ không thì ốm đòn vì nếu làm theo thì toàn các topic 'khủng' và khó theo dõi như topic này.
  • 0

#1275 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 10 November 2008 - 10:05 PM

Vừa rồi tôi có lấy 1 file lisp ở diễn đàn để căn biên cho text. Khi dùng ở bản vẽ mới thì được, với bản vẽ đã có của tôi khi áp dụng lisp này thì text biến đâu mất. Cả file cad, và lisp tôi upload lên đây. Bác nào biết giúp tôi với nhé. http://www.cadviet.com/upfiles/Can_le.rar, Dùng các lệnh rt, lft,...

Vì lisp bị sai.

Tôi chạy với bản vẽ mới, tất cả đều mặc định, vậy mà dùng lệnh rt,lft text đều văng sang chỗ khác. Bạn thử nhờ tác giả chỉnh lại lisp xem sao.

Bác Hoành trách oan em rồi -_- Lisp của em ko sai, chỉ "bỏ lọt" đối tượng thôi mà. Trước đây viết cũng ko để ý kỹ, dùng cũng chẳng thấy vấn đề j. Hôm nay mới giở help ra xem lại thì thấy đoạn này:
11 Second alignment point (in OCS) (optional)

DXF: X value; APP: 3D point

This value is meaningful only if the value of a 72 or 73 group is nonzero (if the justification is anything other
than baseline/left)

Đoạn lisp bỏ sót trường hợp text ở dạng mặc định (như các bác đã test) (left : mã 72 và 73 = 0)
Đây là lisp đã sửa lại.
(defun myerror (s)
(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD) ; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(princ)
)




;;;==============================================================
;;; Can le fai text
;;;==============================================================
(defun c:rt (/ P1)
(setq olderr *error*
*error* myerror
)
(setvar "cmdecho" 0)

(command "UCS" "W" )

(setq sstxt (ssget '((-4 . " (-4 . " (0 . "text")
(0 . "Mtext")
(-4 . "OR>")
(50 . 0)
(-4 . "and>")
)
) ;chon text
P1 (getpoint "\nChon diem canh le phai cho text")
XRtxt (car P1)
)

(if (not (null sstxt))
(progn
(setq sslen (sslength sstxt) ;dem so doi tuong chon
ctr 0 ;Dat bien dem = 0
)
(command ".undo" "begin")
(while (< ctr sslen) ;Neu bien dem < so doi tuong
(setq object (entget (ssname sstxt ctr))
altxt (cdr (assoc 72 object))
altxt1 (cdr (assoc 73 object))
)
(if (and (= 0 altxt)
(= 0 altxt1)
)
(setq Ptxt (cdr (assoc 10 object)))
(setq Ptxt (cdr (assoc 11 object)))
)

(setq object (subst (cons 72 2) (assoc 72 object) object))
(setq object (entmod object))
(setq object (subst (cons 73 1) (assoc 73 object) object))
(setq object (entmod object))
(setq NPtxt (list XRtxt (cadr Ptxt) ) ;(cadr Ptxt)
object (subst (cons 11 NPtxt) (assoc 11 object) object)
)
(setq object (entmod object))



(setq ctr (1+ ctr))
)

(command ".undo" "end")

)
)

(setq *error* olderr)

(setvar "cmdecho" 1)
(princ)
)

;;;=====================================================
;;; Can le trai text
(defun c:lft (/ P1)
(setq olderr *error*
*error* myerror
)
(setvar "cmdecho" 0)
(command "UCS" "W")
(setq sstxt (ssget '((-4 . " (-4 . " (0 . "text")
(0 . "Mtext")
(-4 . "OR>")
(50 . 0)
(-4 . "and>")
)
) ;chon text
P1 (getpoint "\nChon diem canh le trai cho text")
XRtxt (car P1)
)

(if (not (null sstxt))
(progn
(setq sslen (sslength sstxt) ;dem so doi tuong chon
ctr 0 ;Dat bien dem = 0
)
(command ".undo" "begin")
(while (< ctr sslen) ;Neu bien dem < so doi tuong
(setq object (entget (ssname sstxt ctr))
altxt (cdr (assoc 72 object))
altxt1 (cdr (assoc 73 object))
)
(if (and (= 0 altxt)
(= 0 altxt1)
)
(setq Ptxt (cdr (assoc 10 object)))
(setq Ptxt (cdr (assoc 11 object)))
)

(setq object (subst (cons 72 0) (assoc 72 object) object))
(setq object (entmod object))
(setq object (subst (cons 73 1) (assoc 73 object) object))
(setq object (entmod object))
(setq NPtxt (list XRtxt (cadr Ptxt) ) ;(cadr Ptxt)
object (subst (cons 11 NPtxt) (assoc 11 object) object)
)
(setq object (entmod object))



(setq ctr (1+ ctr))
)
(command ".undo" "end")

)
)

(setq *error* olderr)

(setvar "cmdecho" 1)
(princ)
)
;;;=====================================================
;;; Can giua cot text
(defun c:cct (/ P1)
(setq olderr *error*
*error* myerror
)
(setvar "cmdecho" 0)
(command "UCS" "W")
(setq sstxt (ssget '((-4 . " (-4 . " (0 . "text")
(0 . "Mtext")
(-4 . "OR>")
(50 . 0)
(-4 . "and>")
)
) ;chon text
P1 (getpoint "\nChon diem canh le giua cho cot text")
XRtxt (car P1)
)

(if (not (null sstxt))
(progn
(setq sslen (sslength sstxt) ;dem so doi tuong chon
ctr 0 ;Dat bien dem = 0
)
(command ".undo" "begin")
(while (< ctr sslen) ;Neu bien dem < so doi tuong
(setq object (entget (ssname sstxt ctr))
altxt (cdr (assoc 72 object))
altxt1 (cdr (assoc 73 object))
)
(if (and (= 0 altxt)
(= 0 altxt1)
)
(setq Ptxt (cdr (assoc 10 object)))
(setq Ptxt (cdr (assoc 11 object)))
)

(setq object (subst (cons 72 1) (assoc 72 object) object))
(setq object (entmod object))
(setq object (subst (cons 73 2) (assoc 73 object) object))
(setq object (entmod object))
(setq NPtxt (list XRtxt (cadr Ptxt) ) ;(cadr Ptxt)
object (subst (cons 11 NPtxt) (assoc 11 object) object)
)
(setq object (entmod object))



(setq ctr (1+ ctr))
)
(command ".undo" "end")

)
)

(setq *error* olderr)

(setvar "cmdecho" 1)
(princ)
)

;;;=====================================================
;;; Can giua hang text
(defun c:crt (/ P1)
(setq olderr *error*
*error* myerror
)
(setvar "cmdecho" 0)
(command "UCS" "W")
(setq sstxt (ssget '((-4 . " (-4 . " (0 . "text")
(0 . "Mtext")
(-4 . "OR>")
(50 . 0)
(-4 . "and>")
)
) ;chon text
P1 (getpoint "\nChon diem can giua cho hang text")
XRtxt (car P1)
YRtxt (cadr P1)
)

(if (not (null sstxt))
(progn
(setq sslen (sslength sstxt) ;dem so doi tuong chon
ctr 0 ;Dat bien dem = 0
)
(command ".undo" "begin")
(while (< ctr sslen) ;Neu bien dem < so doi tuong
(setq object (entget (ssname sstxt ctr))
altxt (cdr (assoc 72 object))
altxt1 (cdr (assoc 73 object))
)
(if (and (= 0 altxt)
(= 0 altxt1)
)
(setq Ptxt (cdr (assoc 10 object)))
(setq Ptxt (cdr (assoc 11 object)))
)

(setq object (subst (cons 72 1) (assoc 72 object) object))
(setq object (entmod object))
(setq object (subst (cons 73 2) (assoc 73 object) object))
(setq object (entmod object))

(setq
NPtxt (list (car Ptxt) YRtxt ) ;(cadr Ptxt)
object (subst (cons 11 NPtxt) (assoc 11 object) object)
)
(setq object (entmod object))



(setq ctr (1+ ctr))
)
(command ".undo" "end")

)
)

(setq *error* olderr)

(setvar "cmdecho" 1)
(princ)
)

  • 2

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#1276 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 11 November 2008 - 09:26 AM

Mọi ng ko "quan tâm" đến vấn đề của bạn vì nhiều lý do. Thứ nhất: việc gộp lệnh trên ko làm giảm tg thao tác là bao nhiêu. Thứ 2: lệnh OM như bạn nói ko được dùng phổ biến cho lắm. Thứ 3: Yêu cầu này ko "hấp dẫn" lắm đối với những ng yêu thích lisp - vì yêu cầu của bạn chỉ là thay 2 thao tác nhàm chán bằng 1 thao tác ít nhàm chán hơn mà thôi (cái này có thể chỉ là ý kiến chủ quan của tôi -_- ).
Đây là đoạn code bạn cần, (post lên để bạn thấy rằng để viết gộp 2 lệnh thành 1 thôi, nhưng để nó "dễ dùng" và "thân thiện" cũng phải...dài dòng văn tự thế nào)

(defun c:OM ( / Osmode obj Me_obj)
(command "undo" "begin")
(setvar "cmdecho" 0)
(setq osmode (getvar "OSMODE"))

(command "Ucs" "w")
(princ "\nChon doi tuong offset")
(setq obj (car (entsel))
)
(if dist
(if (setq dist1 (getreal (strcat "\nKhoang cach offset <"
(rtos dist 2)
"> : "
)
)
)
(setq dist dist1)
)
(setq dist (getreal "\nKhoang cach offset : ")
)
)
(setq
Poff (getpoint "\nChon phia offset")
)
(if Me_dist
(if (setq dist1 (getreal (strcat "\nKhoang cach rai block <"
(rtos Me_dist 2)
"> : "
)
)
)
(setq Me_dist dist1)
)
(setq Me_dist (getreal "\nKhoang cach rai block : ")
)
)
(if Block
(if (setq Block1 (getstring (strcat "\nTen block can rai <"
Block
"> : "
)
)
)
(setq Block Block1)
)
(setq Block (getstring "\nTen block can rai: ")
)
)

(command "offset" dist obj Poff "")
(setq Me_obj (entlast))
(command "measure" Me_obj "b" Block "Y" Me_dist)
(command "Ucs" "P")
(setvar "OSMODE" osmode)
(command "undo" "end")
(setvar "cmdecho" 1)
(princ)

)

thật ngại wa, cảm ơn snowmen tại mình kô bít viết nên kô bít cái nào nên viết
  • 0

#1277 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 11 November 2008 - 11:01 AM

Bác Hoành trách oan em rồi -_- Lisp của em ko sai, chỉ "bỏ lọt" đối tượng thôi mà. Trước đây viết cũng ko để ý kỹ, dùng cũng chẳng thấy vấn đề j. Hôm nay mới giở help ra xem lại thì thấy đoạn này:
11 Second alignment point (in OCS) (optional)

DXF: X value; APP: 3D point

This value is meaningful only if the value of a 72 or 73 group is nonzero (if the justification is anything other
than baseline/left)

Đoạn lisp bỏ sót trường hợp text ở dạng mặc định (như các bác đã test) (left : mã 72 và 73 = 0)
Đây là lisp đã sửa lại.
[codebox]

Cám ơn Snowman rất nhiều.
Anh có thể giúp tôi thêm 1 vấn đề này được không. Giá sử tôi có các text nằm quá sát nhau (gần trùng nhau), khi in sẽ không đọc được. Nếu mình move từng text ra để khi in đọc được sẽ mất rất nhiều thời gian. Có cách nào khi mình chọn các text, lệnh thực hiện sẽ giãn các text ra đều nhau theo hàng, cột tùy ý không ? Tâm của các text do user chọn. Cám ơn Snowman trước.
  • 0

#1278 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 11 November 2008 - 12:23 PM

Cám ơn Snowman rất nhiều.
Anh có thể giúp tôi thêm 1 vấn đề này được không. Giá sử tôi có các text nằm quá sát nhau (gần trùng nhau), khi in sẽ không đọc được. Nếu mình move từng text ra để khi in đọc được sẽ mất rất nhiều thời gian. Có cách nào khi mình chọn các text, lệnh thực hiện sẽ giãn các text ra đều nhau theo hàng, cột tùy ý không ? Tâm của các text do user chọn. Cám ơn Snowman trước.


Bạn tìm trong topic này cái lisp sắp dim sd.lsp của NguyenHoanh có đó
  • 0

#1279 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 11 November 2008 - 02:50 PM

Bạn tìm trong topic này cái lisp sắp dim sd.lsp của NguyenHoanh có đó

Cám ơn, vấn đề của tôi là sắp xếp text chứ không phải là dim
  • 0

#1280 nhunhang

nhunhang

    Chưa sử dụng CAD

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

Đã gửi 11 November 2008 - 07:51 PM

Chào mọi người!
Tôi mới tìm hiểu về lisp. Mong mọi người giúp đỡ. Tôi viết một chương trình nhỏ nhưng chạy không được không biết lỗi chỗ nào. Chỉ dùm tôi với:
(defun c:dt()
(command "cicrle")
(setq pt (getpoint "cho tam duong tron:"))
(setq D (getdist "cho ban kinh duong tron:")
(princ)
)
  • 0