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

#2201 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 23 June 2009 - 04:08 PM

Hix, quên nữa Bác q228 ơi, còn cái vụ cho save lại bảng TĐGR bằng file text.txt ngay tại thư mục mở bản vẽ nữa. Thank Bác nhiều.
  • 0

#2202 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 24 June 2009 - 11:07 AM

chào các bạn, lại lên đây nhờ vả các bạn. xin nhờ các bạn cho mình cái lisp hăọc cách nào đó để đổi chiều của đường line,Pline, spline để cái chữ mình tạo trên đó nó kô bị ngược. mình gửi kèm bản vẽ, cảm ơn các bạn nhiều :s_big:


http://www.mediafire.com/?zkndmzdgu2m
  • 0

#2203 vnp84055

vnp84055

    biết zoom

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

Đã gửi 24 June 2009 - 11:39 AM

Mình đang dùng các lisp như: tổng chiều dài đt line, pline; đo chiều dài đối tượng line, pline rùi ghi thành test + điểm chèn.
Vì để làm như mình muốn thì hơi lâu, phải vẽ pline trước, chọn, xong rùi mới gõ lệnh đo + ghi text.

Mình muốn nhờ các bạn giúp mình viết lại lisp có thể gộp các việc đó thành 1 lần:
- đánh lệnh của lisp (vd: pld),
- Nó sẽ cho phép mình vẽ pline theo ý muốn, >> Enter
- Nhập chiều cao của text + chọn điểm chèn text.
- Nó sẽ ghi chiều dài đoạn pline mà mình vẽ theo đúng chiều cao và điểm chèn text đã chọn.
Các thuộc tính: layer, color, style text theo hiện hành đã chọn trước.

Và một lisp thứ hai là mình muốn mở rộng lệnh giống như lệnh DIST (distance), thay vì chỉ đo bằng 2 điểm (điểm đầu và cuối), mình muốn khi gõ lệnh của lisp giống như vậy thì cho phép mình chọn nhiều điểm liên tục, sau khi enter thì nó sẽ hiện khoảng cách tổng chiều dài các điểm đó (từ điểm 1 sang 2, 2 sang 3,... giống như là pline)

Thanks.
  • 0

#2204 thiep

thiep

    biết dimbaseline

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

Đã gửi 24 June 2009 - 12:33 PM

chào các bạn, lại lên đây nhờ vả các bạn. xin nhờ các bạn cho mình cái lisp hăọc cách nào đó để đổi chiều của đường line,Pline, spline để cái chữ mình tạo trên đó nó kô bị ngược. mình gửi kèm bản vẽ, cảm ơn các bạn nhiều :s_big:
http://www.mediafire.com/?zkndmzdgu2m

Bạn tham khảo lisp PLREV.LSP, lisp này chỉ đổi chiều các LINE, POLYLINE, ARC, CIRCLE, nhưng chưa đổi chiều được SPLINE. Tải file ở đây:
http://www.cadviet.c...p_bo_sung_1.zỉp
Chắc bạn đang tạo một Lisp mà bị chướng ngại vật không đổi chiều Text được phải không?
  • 1

#2205 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 24 June 2009 - 12:41 PM

Bạn tham khảo lisp PLREV.LSP, lisp này chỉ đổi chiều các LINE, POLYLINE, ARC, CIRCLE, nhưng chưa đổi chiều được SPLINE. Tải file ở đây:
http://www.cadviet.c...p_bo_sung_1.zỉp
Chắc bạn đang tạo một Lisp mà bị chướng ngại vật không đổi chiều Text được phải không?


cảm ơn thiep, mình đang tạo 1 đuờng linetype theo ý mình thôi ( lenh mkltype), nhưng mà vẽ nguợc lại thì chữ nó cũng nguợc thành ra đành nhờ các bạn :blink:
link kia die rồi bạn ah :s_big: bạn cho mình link khác nhé, thanks
  • 0

#2206 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 June 2009 - 12:43 PM

Mình đang dùng các lisp như: tổng chiều dài đt line, pline; đo chiều dài đối tượng line, pline rùi ghi thành test + điểm chèn.
Vì để làm như mình muốn thì hơi lâu, phải vẽ pline trước, chọn, xong rùi mới gõ lệnh đo + ghi text.

Mình muốn nhờ các bạn giúp mình viết lại lisp có thể gộp các việc đó thành 1 lần:
- đánh lệnh của lisp (vd: pld),
- Nó sẽ cho phép mình vẽ pline theo ý muốn, >> Enter
- Nhập chiều cao của text + chọn điểm chèn text.
- Nó sẽ ghi chiều dài đoạn pline mà mình vẽ theo đúng chiều cao và điểm chèn text đã chọn.
Các thuộc tính: layer, color, style text theo hiện hành đã chọn trước.

Và một lisp thứ hai là mình muốn mở rộng lệnh giống như lệnh DIST (distance), thay vì chỉ đo bằng 2 điểm (điểm đầu và cuối), mình muốn khi gõ lệnh của lisp giống như vậy thì cho phép mình chọn nhiều điểm liên tục, sau khi enter thì nó sẽ hiện khoảng cách tổng chiều dài các điểm đó (từ điểm 1 sang 2, 2 sang 3,... giống như là pline)

Thanks.

Đây bạn :
Lệnh dipl Thực hiện bài toán thứ nhất của bạn
Lệnh mudi thực hiện bài toán thứ hai của bạn

(defun c:mudi(/ p1 p2 di L po)
(setq p1 (getpoint "\n Chon diem thu nhat can do :") L 0)

(while (setq p2 (getpoint p1"\n Chon diem tiep theo can do :"))
(if p2
(progn
(setq di (distance p1 p2))
(setq L (+ L di))
(setq p1 p2)
)
)
)
(setq po (getpoint "\n Chon diem chen Text :"))
(wtxt (strcat "Tong chieu dai khoang cach giua cac diem can do : " (rtos L 2 2)) po)

(princ)
)
;

(defun c:dipl(/ p1 p2 LA p3 L po)
(setq p1 (getpoint "\n First point:"))
(setq p2 (getpoint p1"\n Second point:"))
(command "pline" p1 p2 "")
(setq LA (entlast))

(while (setq p3 (getpoint p2"\n Second point:"))
(if p3
(progn
(command "pline" p2 p3 "")
(command "pedit" "m" LA "L" "" "j" "0" "")
(setq LA (entlast))
(setq p2 p3)
)
)
)
(setq L (vlax-curve-getDistAtPoint LA p2))
(setq po (getpoint "\n Chon diem chen Text :"))
(wtxt (strcat "Tong chieu dai Polyline vua ve : " (rtos L 2 2)) po)

(princ)
)
;
(defun wtxt (txt p / sty d h)
(setq
    sty (getvar "textstyle")
    d (tblsearch "style" sty)
    h (cdr (assoc 40 d))
)
(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) (cons 72 1) (cons 73 2)
          (if (> h 0) (cons 40 h) (assoc 40 d)) (assoc 41 d))
)
)

@ NguyenKhoaDung : Lisp Này bác Hoành đã có viết rồi, bạn thử tìm kiếm xem
  • 1

#2207 vnp84055

vnp84055

    biết zoom

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

Đã gửi 24 June 2009 - 01:27 PM

@Tue_NV: thanks.
Tại nhiều trang quá, mình tìm cả buổi mà không thấy đâu hết, nên mới nhờ. Nói chung lisp này ok, mình dùng nó để sửa lại cho đúng ý của mình.
Good luck for u.
  • 0

#2208 thiep

thiep

    biết dimbaseline

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

Đã gửi 24 June 2009 - 01:41 PM

cảm ơn thiep, mình đang tạo 1 đuờng linetype theo ý mình thôi ( lenh mkltype), nhưng mà vẽ nguợc lại thì chữ nó cũng nguợc thành ra đành nhờ các bạn :blink:
link kia die rồi bạn ah :s_big: bạn cho mình link khác nhé, thanks

Đây là lisp PLREV.LSP:
|

PLREV.LSP © 1999-2004 Tee Square Graphics

Version 2.03a - 11/15/2004

Used to reverse the direction in which Lines, Polylines, LWPolylines
and other objects are drawn. Useful for correcting the "direction"
of specialized complex linetypes.
____

Revision History:

Version 2.03a: problem with non-American English installations fixed
(with thanks to Jürgen Palme); name changed from REV to PLREV to
resolve conflict with shortcut for REVolve command. 11/15/2004

Version 2.03: problem with ByLayer linetype fixed. 9/18/2001

Version 2.02: revised to preserve layer property of selected object.
8/17/2001

Version 2.01: error checking added; bug related to PLINEGEN system
variable fixed. 3/27/2001

Version 2.0 updated to include Arcs and Circles. These will be
converted to either Polylines or LWPolylines, depending on the
current setting of the PLINETYPE variable. Circles and Arcs over
180 may sometimes behave oddly; for best results, select these
items by clicking on a point near the "quad" points, at 0, 90,
180 or 270 degrees. If an Arc or Circle disappears during a REV
operation, just enter a U (undo) command to bring back the object
and try again by picking a different point on the object. 3/24/2001

Please report bugs and other difficulties, along with a detailed
description of the steps leading up to the problem, via email to
cadman@turvill.com.

|;

(defun C:PLREV (/ olderr cmde blip ltsc cclr snap pwid pgenen1 nam ent p obj ltp
clr lts wid flgs first final next spl cur vert a clos zoomit clyr lyr)
(setq olderr *error*)
(defun *error* (x)
(setvar "cmdecho" cmde)
(setvar "blipmode" blip)
(setvar "osmode" snap)
(setvar "celtscale" ltsc)
(setvar "cecolor" cclr)
(setvar "plinewid" pwid)
(setvar "plinegen" pgen)
(setq *error* olderr)
(princ)
) ;; end of *error* function
(setq cmde (getvar "cmdecho")
blip (getvar "blipmode")
ltsc (getvar "celtscale")
cclr (getvar "cecolor")
snap (getvar "osmode")
pwid (getvar "plinewid")
clyr (getvar "clayer")
pgen (getvar "plinegen"))
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "osmode" 0)
(setvar "plinewid" 0)
(setvar "plinegen" 1)
(command "_.undo" "_be")
(while (null (setq en1 (entsel "\nPick an object to reverse: "))))
(setq nam (car en1)
ent (entget nam)
p (cadr en1)
obj (cdr (assoc 0 ent)))
(cond
((= obj "CIRCLE")
(setq ctr (cdr (assoc 10 ent))
dia (* 2.0 (cdr (assoc 40 ent)))
a (angle p ctr))
(command "_.break" p (polar p (/ pi 4) 0.001)
"_.pedit" p "_y" "_c" "_x")
(carc))
((= obj "ARC")
(command "_.break" p "@"
"_.pedit" p "_y" "_j" nam (entlast) "" "_x")
(carc))
(T nil))
(setq ltp (cdr (assoc 6 ent))
lyr (cdr (assoc 8 ent))
clr (cdr (assoc 62 ent))
lts (cdr (assoc 48 ent))
wid (cdr (assoc 40 ent))
flgs (cdr (assoc 70 ent)))
(if (not ltp)(setq ltp "bylayer"))
(cond
((= obj "LINE")
(setq first (assoc 10 ent)
final (assoc 11 ent)
ent (subst (cons 10 (cdr final)) first ent)
ent (subst (cons 11 (cdr first)) final ent))
(entmod ent))
((= obj "LWPOLYLINE")
(setq final (cdr (assoc 10 (setq ent (reverse ent))))
next (cdr (assoc 10 (cdr (member (assoc 10 ent) ent)))))
(prev))
((= obj "POLYLINE")
(setq spl (= (logand flgs 4) 4)
cur (= (logand flgs 2) 2)
vert (entnext nam))
(if cur
(command "_.pedit" p "_s" ""))
(while (= (cdr (assoc 0 (entget (setq vert (entnext vert))))) "VERTEX")
(setq next final
final (cdr (assoc 10 (entget vert)))))
(prev))
(T (alert "Not a REVersible object.")))
(command "_.undo" "_e")
(setvar "cmdecho" cmde)
(setvar "blipmode" blip)
(setvar "osmode" snap)
(setvar "celtscale" ltsc)
(setvar "cecolor" cclr)
(setvar "plinewid" pwid)
(setvar "plinegen" pgen)
(setvar "clayer" clyr)
(setq *error* olderr)
(princ)
)
(defun carc ()
(setq ent (entget (entlast))
nam (cdr (assoc -1 ent))
obj (cdr (assoc 0 ent)))
)
(defun prev ()
(setq a (angle next final)
clos (= (logand flgs 1) 1))
(if clos (command "_.pedit" nam "_o" ""))
(setq zoomit (null (ssget "_c" final final)))
(if zoomit (command "_.zoom" "_c" final ""))
(if clr (command "_.color" clr))
(if lts (setvar "celtscale" lts))
(setvar "clayer" lyr)
(command "_.pline" (polar final a 0.0001) final ""
"_.chprop" (entlast) "" "_lt" ltp ""
"_.pedit" (entlast) "_j" nam "" ""
"_.break" final (polar final a 0.001))
(if cur (command "_.pedit" (entlast) "_f" ""))
(if spl (command "_.pedit" (entlast) "_s" ""))
(if clos (command "_.pedit" (entlast) "_c" ""))
(if wid (command "_.pedit" (entlast) "_w" wid ""))
(if zoomit (command "_.zoom" "_p"))
)

(princ)

Khoadung tạo Linetype, Thiep gợi ý: nên nghiên cứu tạo 2 kiểu đường: + và -. Có nghĩa là kiểu CHIEUSANG+ và CHIEUSANG-. Khi đó: nếu vẽ đường từ phải sang trái thì dùng kiểu CHIEUSANG+, nếu vẽ đường từ trái sang phải thì dùng kiểu CHIEUSANG-
  • 0

#2209 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 June 2009 - 03:57 PM

cảm ơn thiep, mình đang tạo 1 đuờng linetype theo ý mình thôi ( lenh mkltype), nhưng mà vẽ nguợc lại thì chữ nó cũng nguợc thành ra đành nhờ các bạn :blink:
link kia die rồi bạn ah :s_big: bạn cho mình link khác nhé, thanks

Chào KhoaDung.
Bạn hãy upload file .lin mà bạn tạo kiểu đường nét lên đây nhé. Để Tue_NV xem thử cấu trúc của nó.
  • 0

#2210 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 24 June 2009 - 04:25 PM

Chào bạn Tue_NV!
Mình muốn bạn viết dùm mình 1lisp như sau:
Khi chọn đối tượng thì lisp hỏi: bạn muốn bỏ dấu hay thêm dấu (chọn nhiều đối tượng cùng lúc) >> Enter thì dấu phía trước mất đi (VD: -0.123 -> 0.123)
(cái này mình sử dụng trong vẽ trắc dọc, khi chương trình chạy độ dốc âm nên phải đánh dấu trừ, xong xuôi ra ngoài mình làm thủ công chọn các giá trị âm muốn bỏ dấu là ok). Cố gắng giúp mình nha, mình đang rất cần. Cảm ơn bạn
  • 0

#2211 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 June 2009 - 04:28 PM

Chào KhoaDung.
Bạn hãy upload file .lin mà bạn tạo kiểu đường nét lên đây nhé. Để Tue_NV xem thử cấu trúc của nó.

Không cần xem file đâu tue à vì 1 dạng đường không mang tính đối xứng thì nếu vẽ từ trái qua phải cái text nằm đúng chiều thì vẽ từ phải qua trái cái text sẽ lôn ngược đó là hiển nhiên. Nên việc tạo ra kiểu đường thuận và nghịch là phù hợp nhất.
  • 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


#2212 phamthanhhungks

phamthanhhungks

    biết vẽ polygon

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

Đã gửi 24 June 2009 - 04:33 PM

Lâu lắm không gặp lại mấy vấn đề về CAD. Hum nay lại gặp bùn ghê.
Hum nay bên em đang đưa phương án cho 1 công trình chung cư ở Vũng Tàu. Nhưng hiện tại bên A chỉ giao cho bên em 1 bản vẽ tổng thể bằng A3, trong đó có hình tổng mặt bằng và diện tích khu đất. Em đã Scan bản vẽ và chuyển nó sang file dxf để có 1 bản vẽ CAD hiện trạng khu đất 1 cách tương đối nhất. Nhưng khi scale lại khu đất cho đúng diện tích với điện tích thực của khu đất thì không cách nào làm được (mệt mỏi ghê, thử mọi cách nhưng vẫn bó tay) Aem nào có cách nào scale 1 hình theo tỉ lệ diện tích không (Lưu ý: Diện tích chứ không phải theo 1 trục, hay tim) nếu có thì share em với. Còn nếu không ai có liệu bác Tue, hay bác Hoành có thể giúp em với được không? không biết vấn đề này Autolisp có thể giải quyết được ko đây? Nếu được thì cho em 1 cái Lisp scale bản vẽ theo diện tích dùm em với.
Em có Úp khu đất đính kèm vào có gì nhờ anh em tham khảo và góp ý tìm cách giải quyết giúp mình với nhé (mình đang cần khu đất này gấp)
Diện tích khu đất mà em cần là 12.934m2
Chân thành cảm ơn các aem đã đọc qua Reply này của mình và góp ý giúp đỡ mình. Thank

http://www.cadviet.c...en_S12934m2.dwg
  • 0

#2213 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 June 2009 - 04:49 PM

Chào bạn Tue_NV!
Mình muốn bạn viết dùm mình 1lisp như sau:
Khi chọn đối tượng thì lisp hỏi: bạn muốn bỏ dấu hay thêm dấu (chọn nhiều đối tượng cùng lúc) >> Enter thì dấu phía trước mất đi (VD: -0.123 -> 0.123)
(cái này mình sử dụng trong vẽ trắc dọc, khi chương trình chạy độ dốc âm nên phải đánh dấu trừ, xong xuôi ra ngoài mình làm thủ công chọn các giá trị âm muốn bỏ dấu là ok). Cố gắng giúp mình nha, mình đang rất cần. Cảm ơn bạn

Cái này anh Duy đã viết rồi bạn.
Lisp thêm text và bớt text đó
Đây :
http://www.cadviet.c...?showtopic=6991

Còn đây là Lisp themdau và botdau, Tue_NV viết theo ý của bạn :
Chú ý : Nếu Text đã có dấu trừ đằng trước thì chạy Lisp Themdau sẽ không có tác dụng vì đã có dấu trừ đằng trước
Nếu Text không có dấu trừ đằng trước thì chạy Lisp botdau sẽ không có tác dụng vì Text đã là số dương (không thể bớt số)

(defun c:themdau()
(setq ss (ssget '((0 . "TEXT,MTEXT")))
n (sslength ss) i 0)

(while (< i n)
(setq ent (entget(ssname ss i)))
(setq chuoi (cdr(assoc 1 ent)))

(if (/= (substr chuoi 1 1) "-")
(progn
(setq chuoitach (strcat "-" (cdr(assoc 1 ent))))
(setq ent (subst (cons 1 chuoitach) (assoc 1 ent) ent))
(entmod ent)
)
)
(setq i (1+ i))
)
(princ)
)
;
(defun c:botdau()
(setq ss (ssget '((0 . "TEXT,MTEXT")))
n (sslength ss) i 0)

(while (< i n)
(setq ent (entget(ssname ss i)))

(setq chuoi (cdr(assoc 1 ent)))

(if (= (substr chuoi 1 1) "-")
(progn
(setq chuoitach (substr chuoi 2 (strlen chuoi)))
(setq ent (subst (cons 1 chuoitach) (assoc 1 ent) ent))
(entmod ent)
)
)
(setq i (1+ i))
)
(princ)
)

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 24 June 2009 - 05:01 PM

  • 1

#2214 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 24 June 2009 - 05:06 PM

Cái này anh Duy đã viết rồi bạn.
Lisp thêm text và bớt text đó
Đây :
http://www.cadviet.c...?showtopic=6991

Còn đây là Lisp themdau và botdau, Tue_NV viết theo ý của bạn :
Chú ý : Nếu Text đã có dấu trừ đằng trước thì chạy Lisp Themdau sẽ không có tác dụng vì đã có dấu trừ đằng trước
Nếu Text không có dấu trừ đằng trước thì chạy Lisp botdau sẽ không có tác dụng vì Text đã là số dương (không thể bớt số)

(defun c:themdau()
(setq ss (ssget '((0 . "TEXT,MTEXT")))
n (sslength ss) i 0)

(while (< i n)
(setq ent (entget(ssname ss i)))
(setq chuoi (cdr(assoc 1 ent)))

(if (/= (substr chuoi 1 1) "-")
(progn
(setq chuoitach (strcat "-" (cdr(assoc 1 ent))))
(setq ent (subst (cons 1 chuoitach) (assoc 1 ent) ent))
(entmod ent)
)
)
(setq i (1+ i))
)
(princ)
)
;
(defun c:botdau()
(setq ss (ssget '((0 . "TEXT,MTEXT")))
n (sslength ss) i 0)

(while (< i n)
(setq ent (entget(ssname ss i)))

(setq chuoi (cdr(assoc 1 ent)))

(if (= (substr chuoi 1 1) "-")
(progn
(setq chuoitach (substr chuoi 2 (strlen chuoi)))
(setq ent (subst (cons 1 chuoitach) (assoc 1 ent) ent))
(entmod ent)
)
)
(setq i (1+ i))
)
(princ)
)

Xin lỗi bạn Tue_NV, mong bạn thông cảm, mình quên một chi tiết, trước dấu âm là 1 text nên lisp không thực hiện được (VD: i=-0.123)
Bạn sửa lại giúp mình. Cảm ơn bạn
  • 0

#2215 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 June 2009 - 05:22 PM

Xin lỗi bạn Tue_NV, mong bạn thông cảm, mình quên một chi tiết, trước dấu âm là 1 text nên lisp không thực hiện được (VD: i=-0.123)
Bạn sửa lại giúp mình. Cảm ơn bạn

Khi yêu cầu viết lisp thì cần cụ thể chứ không ví dụ. Về nhu cầu của bạn thì theo mình nghỉ dùng 2 cái lisp của mình mà bạn tue đã chỉ để thực hiện là được: cách làm:
Ví dụ bạn có i=-123456 thì :
-Dùng lisp bớt text bỏ đi 3 ký tự phía trước.
-Dùng lisi thêm text thêm i= vào là được.
Nó tổng quát được cho nhiều trường hợp.
Yêu cầu cảu bạn sẽ đặt ra cho người viết lisp câu hỏi:
-Phía trước dấu trừ cố định là nội dung i= hay thay đổi theo thời gian và tình cảm của bạn.
-Cứ sau dấy = thì bỏ dấu trừ đi.
-Cứ gặp dấu trừ là bỏ đi.
Đấy ít nhứt là có 3 thắc mắc vậy lại phải hỏi lại bạn nửa mệt. <_<
  • 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


#2216 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 24 June 2009 - 05:46 PM

Khi yêu cầu viết lisp thì cần cụ thể chứ không ví dụ. Về nhu cầu của bạn thì theo mình nghỉ dùng 2 cái lisp của mình mà bạn tue đã chỉ để thực hiện là được: cách làm:
Ví dụ bạn có i=-123456 thì :
-Dùng lisp bớt text bỏ đi 3 ký tự phía trước.
-Dùng lisi thêm text thêm i= vào là được.
Nó tổng quát được cho nhiều trường hợp.
Yêu cầu cảu bạn sẽ đặt ra cho người viết lisp câu hỏi:
-Phía trước dấu trừ cố định là nội dung i= hay thay đổi theo thời gian và tình cảm của bạn.
-Cứ sau dấy = thì bỏ dấu trừ đi.
-Cứ gặp dấu trừ là bỏ đi.
Đấy ít nhứt là có 3 thắc mắc vậy lại phải hỏi lại bạn nửa mệt. <_<

Xin lỗi bạn, mình sẽ rút kinh nghiệm cho lần sau. Mình muốn cố định cụm i=, bỏ dấu trừ đi
  • 0

#2217 q288

q288

    biết lệnh fillet

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

Đã gửi 24 June 2009 - 08:14 PM

Lâu lắm không gặp lại mấy vấn đề về CAD. Hum nay lại gặp bùn ghê.
Hum nay bên em đang đưa phương án cho 1 công trình chung cư ở Vũng Tàu. Nhưng hiện tại bên A chỉ giao cho bên em 1 bản vẽ tổng thể bằng A3, trong đó có hình tổng mặt bằng và diện tích khu đất. Em đã Scan bản vẽ và chuyển nó sang file dxf để có 1 bản vẽ CAD hiện trạng khu đất 1 cách tương đối nhất. Nhưng khi scale lại khu đất cho đúng diện tích với điện tích thực của khu đất thì không cách nào làm được (mệt mỏi ghê, thử mọi cách nhưng vẫn bó tay) Aem nào có cách nào scale 1 hình theo tỉ lệ diện tích không (Lưu ý: Diện tích chứ không phải theo 1 trục, hay tim) nếu có thì share em với. Còn nếu không ai có liệu bác Tue, hay bác Hoành có thể giúp em với được không? không biết vấn đề này Autolisp có thể giải quyết được ko đây? Nếu được thì cho em 1 cái Lisp scale bản vẽ theo diện tích dùm em với.
Em có Úp khu đất đính kèm vào có gì nhờ anh em tham khảo và góp ý tìm cách giải quyết giúp mình với nhé (mình đang cần khu đất này gấp)
Diện tích khu đất mà em cần là 12.934m2
Chân thành cảm ơn các aem đã đọc qua Reply này của mình và góp ý giúp đỡ mình. Thank
http://www.cadviet.c...en_S12934m2.dwg


Chắc bạn bức xúc lắm hay sao mà xài chữ vừa to vừa đỏ thế.
Bạn thử cái này xem sao. Mình chưa nghĩ ra cái gì hay nên xài tạm cái này nhé.

(defun c:sca()
(setvar "cmdecho" 0)
(setq dt1 (entsel "Chon doi tuong scale :")
dt (car dt1)
vt (cadr dt1)
dtt (getreal "\nDien tich muon sau khi scale(m2) :"))

(command "undo" "begin")
(command "area" "o" dt)
(setq av (* 0.000001 (getvar "area")))

(while (not (equal dtt av 0.1))
(setq sc (/ (sqrt dtt ) (sqrt av)))
(command "scale" dt "" vt sc)
(command "area" "o" dt)
(setq av (* 0.000001 (getvar "area")))
)
(command "undo" "end")
(setvar "cmdecho" 1)
(princ)
)

  • 0

#2218 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 June 2009 - 05:35 AM

Xin lỗi bạn Tue_NV, mong bạn thông cảm, mình quên một chi tiết, trước dấu âm là 1 text nên lisp không thực hiện được (VD: i=-0.123)
Bạn sửa lại giúp mình. Cảm ơn bạn

Tue_NV viết trong trường hợp tổng quát :
Khi chạy Lisp hỏi :
Ban muon bot chuoi cach vi tri dau bao nhieu ki tu : (1)
So ki tu can bo bot : (2)

trong trường hợp của HoangSon thì :
Ban muon bot chuoi cach vi tri dau bao nhieu ki tu : 3
So ki tu can bo bot : 1
(defun c:bgtext()
(setq vitri (getint "\n Ban muon bot chuoi cach vi tri dau bao nhieu ki tu :"))
(setq skt (getint "\n So ki tu can bo bot :"))
(prompt "\nChon chu muon chinh.")
(setq ss (ssget '((0 . "TEXT,MTEXT"))) n (sslength ss) i 0)

(while (< i n)
(setq e (entget(ssname ss i)))
(setq chuoicu (cdr(assoc 1 e)))

(setq tachdau (substr chuoicu 1 (- vitri 1)))
(setq tachcuoi (substr chuoicu (+ vitri skt) (+ (- (strlen chuoicu) vitri skt) 1)))
(setq chunoi (strcat tachdau tachcuoi))
(setq e (subst (cons 1 chunoi) (assoc 1 e) e))
(entmod e)
(setq i (1+ i))
)
(princ)
)

  • 1

#2219 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 25 June 2009 - 09:20 AM

Chắc bạn bức xúc lắm hay sao mà xài chữ vừa to vừa đỏ thế.
Bạn thử cái này xem sao. Mình chưa nghĩ ra cái gì hay nên xài tạm cái này nhé.
................

Sorry q288
Xin giới thiệu cách tiếp cận khác, LISP gán (thay đổi) diện tích cho các đối tuợng có diện tích : CIRCLE, ELLIPSE, PLINE, HATCH, ...
(defun c:GDT (/ ent e newVal)
(vl-load-com)
(command "UNDO" "begin")
(or *dt* (setq *dt* 12934e6))
(while
(and
(setq ent (entsel "\nChon doi tuong can thay doi Dien tich :") )
(setq e (vlax-Ename->Vla-Object (car ent)) )
)
(if (vlax-property-available-p e 'Area)
(progn
(setq newVal (getreal (strcat "\nNhap dien tich mong muon <" (rtos *dt*) "> :")) )
(if newVal (setq *dt* newVal) (setq newVal *dt*))
(vlax-invoke e 'ScaleEntity (vlax-curve-getStartPoint e) (sqrt(/ newVal (vla-get-Area e ))))
)
(princ "\n Doi tuong vua chon khong co dien tich. Chon lai ....")
)
)
(command "UNDO" "end")
)

  • 2

#2220 toai

toai

    biết vẽ ellipse

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

Đã gửi 25 June 2009 - 09:24 AM

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

\
Chào bác Hoành. Tôi có một ý định là sau khi ghi kích thước cho bản vẽ rồi thì sẽ điều chỉnh toàn bộ khoảng cách từ đường ghi KT tới đối tượng cần ghi KT trong BV về một giá trị chung (như ví dụ tôi gửi kèm). Tôi đã tìm trong diiễn đàn nhưng chưa có chủ đề nào đúng ý định của tôi cả. Bác xem xét và giúp đỡ nhé. Thank!
http://www.cadviet.c...pfiles/VD_1.dwg
  • 0
Mưu sự tại nhân, thành sự tại thiên.