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

#1561 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 16 February 2009 - 09:52 PM

Các bác trong diễn đàn bỏ chút ít thời gian giúp em làm một việc nhỏ thế này nhé: em cần lisp tính diện tích tổng của các đường polyline kín có sẵn, kết quả không cần xuất ramàn hình mà chỉ cần hiện trên dòng command line: tổng diện tich các vùng polyline kín là:...
Em đã search thử trước khi hỏi nhưng chỉ thấy lisp tính dt của 1 hình kín, sau đó xuất kq ra màn hình.Cái này lại không thích hợp với việc em đang làm vì Property của vung kín có dt rồi, em cần dt tổng của một đống các polyline kín cơ các bác ạ.
Các bác giúp em nhé, em xin cảm ơn trước. :cheers:

Mình có 1 mẹo này cho bạn nhé. Bạn tô mặt cắt cho các pline kín đó. Rồi nhấp ctrl+1, quét chọn các hatch. Bạn xem ở phần Geometry ->Cumumlative area. Đấy là tổng diện tích của các hình pline kín ban đầu của bạn.
@all member: mình thấy trên diễn đàn nhiều bạn rất có tinh thần học hỏi (VD: haiduong2105, phiphi...) mình tin là các bạn sẽ giỏi trong tương lai không xa. Rất khâm phục các bạn. Chúc thành công :cheers:
  • 0

#1562 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 17 February 2009 - 05:18 AM

Nhờ bác Nataca viết giúp cái LISP chia Polyline/Spline theo phương X/Y thành những đoạn nhỏ bằng nhau có kích thước xác định. Thanks you.
http://www.cadviet.c...Chia_theo_X.zip
Tham khảo: http://www.cadviet.c...?showtopic=9019

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

#1563 dacvien2007

dacvien2007

    biết vẽ polygon

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

Đã gửi 17 February 2009 - 08:12 AM

Nhờ Anh chỉnh giúp về Lisp vẽ nhà: VN
Chọn điểm đầu nhà làm gốc, chọn hướng vẽ, chiều rộng nhà, chiều dài nhà, loại nhà.
Rất mong được Anh giúp
  • 0

#1564 cmengenie

cmengenie

    biết zoom

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

Đã gửi 17 February 2009 - 09:15 AM

Mình có 1 mẹo này cho bạn nhé. Bạn tô mặt cắt cho các pline kín đó. Rồi nhấp ctrl+1, quét chọn các hatch. Bạn xem ở phần Geometry ->Cumumlative area. Đấy là tổng diện tích của các hình pline kín ban đầu của bạn.
@all member: mình thấy trên diễn đàn nhiều bạn rất có tinh thần học hỏi (VD: haiduong2105, phiphi...) mình tin là các bạn sẽ giỏi trong tương lai không xa. Rất khâm phục các bạn. Chúc thành công :cheers:

Uhm, em đã làm theo cách của bác này, xong roài, tại vội quá nên không có thời gian mà trao đổi với bác phamthanhbinh và bác nataca. :cheers: tks mỗi bác 1 cái, chúc diễn đàn luôn vui vẻ, giúp đỡ lẫn nhau :s_big:.
  • 0

#1565 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 17 February 2009 - 09:55 AM

Nhờ bác Nataca viết giúp cái LISP chia Polyline/Spline theo phương X/Y thành những đoạn nhỏ bằng nhau có kích thước xác định. Thanks you.
http://www.cadviet.c...Chia_theo_X.zip
Tham khảo: http://www.cadviet.c...?showtopic=9019

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

Bạn xem cái này đã đạt yêu cầu chưa. Lệnh MEXY

(defun C:MEXY (/ Lent ent vent Fp Ep entL Nent Lstp pInt)
(INIT)
(SAVE_MODE)
(vl-load-com)
(setq trucchia (NHAPKEY "\n Chia deu doi tuong theo x/y: " "x y" trucchia)
Lent (SS2LST (ESENT "\n Chon doi tuong can chia" "POLYLINE,LWPOLYLINE,SPLINE,ARC,ELLIPSE,CIRCLE,LINE"))
kcach (NHAPREAL "\n Nhap khoang cach chia:" kcach)
)
(foreach ent Lent
(setq vent (vlax-ename->vla-object ent)
Fp (vlax-curve-getStartPoint vent)
Ep (vlax-curve-getEndPoint vent)
)
(command "line" Fp (list (car Ep) (cadr Fp)) "")
(setq entL (entlast)
Nent entL
Lstp '()
)
(command "measure" Nent kcach)
(while Nent
(setq Nent (entnext Nent)
Lstp (if (and Nent
(= (cdr (assoc 0 (entget Nent))) "POINT")
)
(append Lstp (list Nent))
Lstp
)
)
)


(cond ( (= trucchia "x")
(foreach d Lstp
(command "xline" "v" (cdr (assoc 10 (entget d))) "")
(setq pInt (car (GIAODT (entlast) ent)))
(entdel (entlast))
(if pInt
(entmake (list '(0 . "POINT") (cons 10 pInt)))
)
)
)
( (= trucchia "y")
(foreach d Lstp
(command "xline" "h" (cdr (assoc 10 (entget d))) "")
(setq pInt (car (GIAODT (entlast) ent)))
(entdel (entlast))
(if pInt
(entmake (list '(0 . "POINT") (cons 10 pInt)))
)
)
)
)
(foreach p Lstp (entdel p))
(entdel entL)
)
(DONE)
(RESTORE)
)

;;;Ham con

; HAM BAY LOI
(defun INIT ()
(setq OLD_ERROR *error*
*error* MYERROR
)
(command "Undo" "begin")
)1

(defun MYERROR (errmsg)

(cond
( (= errmsg "quit / exit abort")
(princ)
)
( (/= errmsg "Function cancelled")
(princ (strcat "\n Co loi: " errmsg))
)
)
;(command "Undo" 1)
(setvar "osmode" OLD_OSMODE)
(command "CECOLOR" OLD_CECOLOR)
(DONE)
(prompt "\n Da thuc hien ham error, Reset lai thiet lap ban dau")
(command "Undo" "end")

)

(defun DONE ()
(if OLD_ERROR (setq *error* OLD_ERROR))
)
;;;;;----------------------------------------------------------
; HAM LUU VA TRA LAI CAC THONG SO BAN DAU
(defun SAVE_MODE()

(command "Undo" "begin")
(command "UCS" "W" "")
(setq OLD_OSMODE (getvar "OSMODE")
OLD_CECOLOR (getvar "CECOLOR")
OLD_AUTOSNAP (getvar "AUTOSNAP")
OLD_ORTHOMODE (getvar "ORTHOMODE")
)
(command "cmdecho" 0)

)
(defun RESTORE()

(command "Undo" "end")
(setvar "osmode" OLD_OSMODE)
(setvar "AUTOSNAP" OLD_AUTOSNAP)
(setvar "ORTHOMODE" OLD_ORTHOMODE)
(command "CECOLOR" OLD_CECOLOR)
(command "cmdecho" 1)
(Grtext -1 "Lisp's written by Nataca - 0983.715.333")
)


;;;NHAP GIA TRI LA SO THUC
(defun NHAPREAL (dongnhac Tso)
(if (null Tso)
(progn
(initget (+ 1 2))
(getreal (strcat dongnhac " :"))
)
(progn
(cond
( (progn
(initget (+ 2))
(getreal (strcat dongnhac " < "(rtos Tso 2 5) " >:"))
)
)
(T Tso)

)
)

)
)

;------------------------------------------
;;;NHAP KEY VAO
(defun NHAPKEY (dongnhac key Text)

(if (null Text)
(progn
(initget 1 key)
(getkword (strcat dongnhac " :"))
)
(progn
(cond
((progn
(initget key)
(getkword (strcat dongnhac " < " Text " >:"))
)
)
(T Text)

)
)

)
)


; CHUYEN BIEU DIEN TAP HOP DOI TUONG DUOI DANG LIST CHUA ENAME CUA CAC DOI TUONG
(defun SS2LST (ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

;;; CHON DOI TUONG THEO NGUOI DUNG KEM DONG NHAC (BAT BUOC CHON)

(defun ESENT (dongnhac Nent / ss LNent Lst SLst)

(if (= Nent nil)
(while (and (not (prompt dongnhac))
(not (setq ss (ssget)))
)
)
(Progn
(setq LNent (vl-string->list Nent)
Lst '()
SLst (List (cons -4 " )
(Foreach e LNent
(if (/= e 44)
(setq Lst (append Lst (list e)))
(setq Lst (vl-list->string Lst)
SLst (append SLst (list (cons 0 Lst)))
Lst '()
)
)
)
(setq SLst (append SLst (list (cons 0 (vl-list->string Lst))))
SLst (append SLst (list (cons -4 "OR>")))
)
(while (and (not (prompt dongnhac))
(not (setq ss (ssget SLst)))
)
)
)
)
ss
)

;;;GIAO CUA 2 DOI TUONG
(defun GIAODT (ent1 ent2 / ob1 ob2 g kq sd)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
)


  • 0

#1566 dacphuong

dacphuong

    Chưa sử dụng CAD

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

Đã gửi 17 February 2009 - 10:58 AM

Chào các bạn. Mình muốn nhờ các bạn viết hộ mình lisp đánh kích thước: chọn 1 đường thẳng thì nó cho mình dim của đường đấy luôn. Mình đang cần gấp (vì phải đánh kích thước rất nhiều). Cám ơn nhiều.
  • 0

#1567 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 17 February 2009 - 02:44 PM

Bạn xem cái này đã đạt yêu cầu chưa. Lệnh MEXY


Thanks bác Nataca, Lisp chạy tốt nhưng nhờ Bác sửa dùm thếm 1 tý nhé:
+ Thêm 1 cái Point đầu tiên.
+ Làm sao cho độ chính xác cao hơn (<=0.001)

Tham khảo lisp CK của bác Ssg tại http://www.cadviet.c...?showtopic=9131

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

#1568 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 17 February 2009 - 02:47 PM

Chào các bạn. Mình muốn nhờ các bạn viết hộ mình lisp đánh kích thước: chọn 1 đường thẳng thì nó cho mình dim của đường đấy luôn. Mình đang cần gấp (vì phải đánh kích thước rất nhiều). Cám ơn nhiều.

Dùng LISP AD (do bác Ssg viết) được PP post ở đây:
http://www.cadviet.c...?showtopic=9019
  • 0

#1569 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 17 February 2009 - 03:08 PM

Chào các bạn. Mình muốn nhờ các bạn viết hộ mình lisp đánh kích thước: chọn 1 đường thẳng thì nó cho mình dim của đường đấy luôn. Mình đang cần gấp (vì phải đánh kích thước rất nhiều). Cám ơn nhiều.


Chào bạn dacphuong,
Bạn dùng thử đoạn code sau đây xem sao:
(defun c:dm ()
(setq ss (ssget "x" (list (cons 0 "line"))))
(setq lent '())
(setq i 0)
(setq n (sslength ss))
(while (< i n)
(setq en (ssname ss i))
(setq lent (cons en lent))
(setq i (+ 1 i))
)
(foreach ent lent
(setq vent (vlax-ename->vla-object ent)
Fp (vlax-curve-getStartPoint vent)
Ep (vlax-curve-getEndPoint vent)
)
(Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) "")
)
(princ)
)
Đoạn code này chỉ cho bạn ghi kích thước cho các đường line và nó tự chọn vị trí đặt đường kích thước . Trong trường hợp bản vẽ có quá nhiều đường line cần ghi kích thước bạn cần phải xác định điểm đặt đường kích thước cho phù hợp với yêu cầu của bạn. Bạn có thể chạy lisp rồi sau đó move các đường kích thước về vị trí bạn muốn. Vì không rõ yêu cầu của bạn nên mình viết tạm đoạn code náy, bạn dùng thử và có thể tự điều chỉnh theo ý bạn. Nếu bạn cần bổ sung điều gì thì hãy post nói rõ hơn nhé.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1570 dacphuong

dacphuong

    Chưa sử dụng CAD

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

Đã gửi 17 February 2009 - 03:35 PM

Cám ơn bạn phamthanhbinh. Mình thử dùng Lisp của bạn nhưng bị lỗi: ; error: no function definition: VLAX-ENAME->VLA-OBJECT. Bạn có thể xem giúp lại mình được ko. Cám ơn nhé.
  • 0

#1571 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 17 February 2009 - 04:16 PM

Chào các bạn. Mình muốn nhờ các bạn viết hộ mình lisp đánh kích thước: chọn 1 đường thẳng thì nó cho mình dim của đường đấy luôn. Mình đang cần gấp (vì phải đánh kích thước rất nhiều). Cám ơn nhiều.

Theo mình không nhất thiết phải dùng lisp với yêu cầu của bạn.
Khi dùng lệnh dim lúc cad hỏi bạn chọn điểm thì bạn đừng chọn mà enter một phát sau đó chọn vào line là được. Cách này dùng được cả với trường hợp đồi tượng chọn là 1 phân đoạn của pline.
  • 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


#1572 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 17 February 2009 - 04:17 PM

Thanks bác Nataca, Lisp chạy tốt nhưng nhờ Bác sửa dùm thếm 1 tý nhé:
+ Thêm 1 cái Point đầu tiên.
+ Làm sao cho độ chính xác cao hơn (<=0.001)

Tham khảo lisp CK của bác Ssg tại http://www.cadviet.c...?showtopic=9131

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

Mình sửa lại đây:

(defun C:MEXY (/ Lent ent vent Fp Ep entL Nent Lstp pInt)
(INIT)
(SAVE_MODE)
(vl-load-com)
(setvar "OSMODE" 0)
(setq trucchia (NHAPKEY "\n Chia deu doi tuong theo x/y: " "x y" trucchia)
huongchia (NHAPKEY "\n Chon huong chia <1-bat dau phia trai(x)/duoi(y), 2-bat dau phia phai(x)/tren(y): " "1 2" huongchia)
Lent (SS2LST (ESENT "\n Chon doi tuong can chia" "POLYLINE,LWPOLYLINE,SPLINE,ARC,ELLIPSE,CIRCLE,LINE"))
kcach (NHAPREAL "\n Nhap khoang cach chia:" kcach)
)
(foreach ent Lent
(setq Fp (vlax-curve-getStartPoint ent)
Ep (vlax-curve-getEndPoint ent)
)
(cond ( (= trucchia "x")
(command "line" Fp (list (car Ep) (cadr Fp)) "")
(setq Mp (list (/ (+ (car Fp) (car Ep)) 2) (cadr Fp)))
)
( (= trucchia "y")
(command "line" Fp (list (car Fp) (cadr Ep)) "")
(setq Mp (list (car Fp) (/ (+ (cadr Fp) (cadr Ep)) 2)))
)
)

(setq entL (entlast)
Nent entL
Lstp '()
)
(command "measure" Nent kcach)
(while Nent
(setq Nent (entnext Nent)
Lstp (if (and Nent
(= (cdr (assoc 0 (entget Nent))) "POINT")
)
(append Lstp (list Nent))
Lstp
)
)
)
(if (= huongchia "1")
(foreach p Lstp
(if (= trucchia "x")
(command "mirror" p "" Mp (list (car Mp) (1+ (cadr Mp))) "Y")
(command "mirror" p "" Mp (list (1+ (car Mp)) (cadr Mp)) "Y")
)
)
)
(cond ( (= trucchia "x")
(foreach d Lstp
(command "xline" "v" (cdr (assoc 10 (entget d))) "")
(setq pInt (car (GIAODT (entlast) ent)))
(entdel (entlast))
(if pInt
(entmake (list '(0 . "POINT") (cons 10 pInt)))
)
)
(entmake (list '(0 . "POINT") (cons 10 Fp)))
(entmake (list '(0 . "POINT") (cons 10 Ep)))
)
( (= trucchia "y")
(foreach d Lstp
(command "xline" "h" (cdr (assoc 10 (entget d))) "")
(setq pInt (car (GIAODT (entlast) ent)))
(entdel (entlast))
(if pInt
(entmake (list '(0 . "POINT") (cons 10 pInt)))
)
)
(entmake (list '(0 . "POINT") (cons 10 Fp)))
(entmake (list '(0 . "POINT") (cons 10 Ep)))
)
)
(foreach p Lstp (entdel p))
(entdel entL)
)
(DONE)
(RESTORE)
)

;;;Ham con

; HAM BAY LOI
(defun INIT ()
(setq OLD_ERROR *error*
*error* MYERROR
)
(command "Undo" "begin")
)1

(defun MYERROR (errmsg)

(cond
( (= errmsg "quit / exit abort")
(princ)
)
( (/= errmsg "Function cancelled")
(princ (strcat "\n Co loi: " errmsg))
)
)
;(command "Undo" 1)
(setvar "osmode" OLD_OSMODE)
(command "CECOLOR" OLD_CECOLOR)
(DONE)
(prompt "\n Da thuc hien ham error, Reset lai thiet lap ban dau")
(command "Undo" "end")

)

(defun DONE ()
(if OLD_ERROR (setq *error* OLD_ERROR))
)
;;;;;----------------------------------------------------------
; HAM LUU VA TRA LAI CAC THONG SO BAN DAU
(defun SAVE_MODE()

(command "Undo" "begin")
(command "UCS" "W" "")
(setq OLD_OSMODE (getvar "OSMODE")
OLD_CECOLOR (getvar "CECOLOR")
OLD_AUTOSNAP (getvar "AUTOSNAP")
OLD_ORTHOMODE (getvar "ORTHOMODE")
)
(command "cmdecho" 0)

)
(defun RESTORE()

(command "Undo" "end")
(setvar "osmode" OLD_OSMODE)
(setvar "AUTOSNAP" OLD_AUTOSNAP)
(setvar "ORTHOMODE" OLD_ORTHOMODE)
(command "CECOLOR" OLD_CECOLOR)
(command "cmdecho" 1)
(Grtext -1 "Lisp's written by Nataca - 0983.715.333")
)


;;;NHAP GIA TRI LA SO THUC
(defun NHAPREAL (dongnhac Tso)
(if (null Tso)
(progn
(initget (+ 1 2))
(getreal (strcat dongnhac " :"))
)
(progn
(cond
( (progn
(initget (+ 2))
(getreal (strcat dongnhac " < "(rtos Tso 2 5) " >:"))
)
)
(T Tso)

)
)

)
)

;------------------------------------------
;;;NHAP KEY VAO
(defun NHAPKEY (dongnhac key Text)

(if (null Text)
(progn
(initget 1 key)
(getkword (strcat dongnhac " :"))
)
(progn
(cond
((progn
(initget key)
(getkword (strcat dongnhac " < " Text " >:"))
)
)
(T Text)

)
)

)
)


; CHUYEN BIEU DIEN TAP HOP DOI TUONG DUOI DANG LIST CHUA ENAME CUA CAC DOI TUONG
(defun SS2LST (ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

;;; CHON DOI TUONG THEO NGUOI DUNG KEM DONG NHAC (BAT BUOC CHON)

(defun ESENT (dongnhac Nent / ss LNent Lst SLst)

(if (= Nent nil)
(while (and (not (prompt dongnhac))
(not (setq ss (ssget)))
)
)
(while (and (not (prompt dongnhac))
(not (setq ss (ssget (list (cons 0 Nent)))))
)
)

)
ss
)

;;;GIAO CUA 2 DOI TUONG
(defun GIAODT (ent1 ent2 / ob1 ob2 g kq sd)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
)


Cái này chắc là ngon rồi.
  • 0

#1573 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 17 February 2009 - 04:19 PM

Chào bạn dacphuong,
Bạn dùng thử đoạn code sau đây xem sao:

(defun c:dm ()
(setq ss (ssget "x" (list (cons 0 "line"))))
(setq lent '())
(setq i 0)
(setq n (sslength ss))
(while (< i n)
(setq en (ssname ss i))
(setq lent (cons en lent))
(setq i (+ 1 i))
)
(foreach ent lent
(setq vent (vlax-ename->vla-object ent)
Fp (vlax-curve-getStartPoint vent)
Ep (vlax-curve-getEndPoint vent)
)
(Command "dimaligned" fp ep (list (+ (car fp) 10) (+ (cadr fp) 10)) "")
)
(princ)
)
Đoạn code này chỉ cho bạn ghi kích thước cho các đường line và nó tự chọn vị trí đặt đường kích thước . Trong trường hợp bản vẽ có quá nhiều đường line cần ghi kích thước bạn cần phải xác định điểm đặt đường kích thước cho phù hợp với yêu cầu của bạn. Bạn có thể chạy lisp rồi sau đó move các đường kích thước về vị trí bạn muốn. Vì không rõ yêu cầu của bạn nên mình viết tạm đoạn code náy, bạn dùng thử và có thể tự điều chỉnh theo ý bạn. Nếu bạn cần bổ sung điều gì thì hãy post nói rõ hơn nhé.

Em thấy bác dùng dimaligned cho tất cả trường hợp thì không ổn lắm nên chăng kiểm tra nếu line nằm ngang hoặc dọc thì cho nó cái dimline còn xiên thì hãy dùng dimaligned
  • 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


#1574 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 17 February 2009 - 05:38 PM

...Còn độ chính xác thì bạn xem lại unit của bạn xem sao. Mình kiểm tra thấy độ chính xác ở bài toán này gần như là tuyệt đối mà .

Bác thử lại file PP post ntn nhé, khoảng cách các điểm không cho ra đúng kích thước thật (20 unit). Thanks you
http://www.cadviet.c.../Chia_X__20.zip
  • 0

#1575 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 17 February 2009 - 05:46 PM

Cám ơn bạn phamthanhbinh. Mình thử dùng Lisp của bạn nhưng bị lỗi: ; error: no function definition: VLAX-ENAME->VLA-OBJECT. Bạn có thể xem giúp lại mình được ko. Cám ơn nhé.

Chào bạn dacphuong,
Xin lỗi bạn, chắc tại bạn chưa gọi hàm (vl-load-com) đấy mà. Do trên máy của mình mình đã chạy hàm này rồi nên không thấy có lỗi. Bạn copy hàm này vào phần đầu của đoạn lisp trên sau dòng (defun c:dm ()
Sau đó bạn thử chạy lại nhé.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1576 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 17 February 2009 - 06:05 PM

Em thấy bác dùng dimaligned cho tất cả trường hợp thì không ổn lắm nên chăng kiểm tra nếu line nằm ngang hoặc dọc thì cho nó cái dimline còn xiên thì hãy dùng dimaligned

Chào bác Duy782006,
Đúng như bác nói, tại mình lười check line mà thấy dùng cái dimaligned cho cả các đường ngang dọc đều được nên để như vậy. Vả lại lisp này mới chỉ để thử xem có đúng yêu cầu của bạn dacphuong hay không rồi mới hoàn chỉnh sau. Mình cũng thấy để hoàn chỉnh nó còn khá nhiều vấn đề như:
1/- Với các polyline, lwpolyline nữa thì chọn bộ chọn ss ra sao?
2/- Khi có nhiều line thì việc lựa chọn và bố trí đường kich thước sao cho hợp lý nhất là cả một bài toán khó xơi.
3/- Mình đang định thay đổi phương án lấy bộ lựa chọn ss để người dùng can thiệp vào quá trình lựa chọn nữa
4/- Với các đối tượng khác như arc, circle,... ghi kích thước ra sao?
5/- Cho người dùng tự chọn vị trí đặt đường kích thước hợp lý, muốn thế phải xác định được trật tự của các đối tượng trong bộ chọn.
Bác Duy và các bác khác xem góp ý với mình nhé.
Xin chân thành cám ơn nhiều.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1577 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 17 February 2009 - 09:04 PM

Bác thử lại file PP post ntn nhé, khoảng cách các điểm không cho ra đúng kích thước thật (20 unit). Thanks you
http://www.cadviet.c.../Chia_X__20.zip

Thui chít. Nhầm 1 tý. Mình sửa lại rồi. Không để ý. Xin lỗi nha
  • 0

#1578 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 18 February 2009 - 07:12 AM

Chào bác Duy782006,
Đúng như bác nói, tại mình lười check line mà thấy dùng cái dimaligned cho cả các đường ngang dọc đều được nên để như vậy. Vả lại lisp này mới chỉ để thử xem có đúng yêu cầu của bạn dacphuong hay không rồi mới hoàn chỉnh sau. Mình cũng thấy để hoàn chỉnh nó còn khá nhiều vấn đề như:
1/- Với các polyline, lwpolyline nữa thì chọn bộ chọn ss ra sao?
2/- Khi có nhiều line thì việc lựa chọn và bố trí đường kich thước sao cho hợp lý nhất là cả một bài toán khó xơi.
3/- Mình đang định thay đổi phương án lấy bộ lựa chọn ss để người dùng can thiệp vào quá trình lựa chọn nữa
4/- Với các đối tượng khác như arc, circle,... ghi kích thước ra sao?
5/- Cho người dùng tự chọn vị trí đặt đường kích thước hợp lý, muốn thế phải xác định được trật tự của các đối tượng trong bộ chọn.
Bác Duy và các bác khác xem góp ý với mình nhé.
Xin chân thành cám ơn nhiều.

Lúc xưa em cũng tính làm cái lisp kiểu này nhưng vướng mấy điểm bác nêu (khó nhất là vị trí đặt dim) nên bỏ ý định 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


#1579 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 18 February 2009 - 07:53 AM

Thui chít. Nhầm 1 tý. Mình sửa lại rồi. Không để ý. Xin lỗi nha

Chưa hết lỗi bạn ơi:
1. Bạn sửa xong nó trở lại lỗi hôm trước: "malformed string on input" (cái này thì đơn giản, chắc là nhầm một chút ở đâu đó)
2. Với (command "line" Fp (list (car Ep) (cadr Fp)) "") -> chia theo trục X thì OK. Nhưng nếu theo trục Y thì bạn chưa xử lý.

Ngoài ra, ssg có thêm vài ý kiến:
1. Dùng "measure" kết hợp với "xline" để lấy giao điểm là ý rất hay :cheers:
2. Với (command "measure" Nent kcach), thao tác chia luôn luôn bắt đầu từ đầu mút có X (hoành độ) nhỏ hơn, bất kể là chia theo X hay theo Y. Quy luật đó có phải lúc nào cũng phù hợp với ý muốn của user? Theo ssg, nên thêm vào phần nhập liệu: user chỉ định điểm mút làm chuẩn để bắt đầu chia.

P/S
vlax-curve-getStartPoint và vlax-curve-getEndPoint chấp nhận argument là entity -> không cần phải dùng vlax-ename->vla-object
  • 0

#1580 dacphuong

dacphuong

    Chưa sử dụng CAD

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

Đã gửi 18 February 2009 - 08:19 AM

Chào bạn phamthanhbinh. Mình đã sửa lại lisp của bạn nhưng vẫn có lỗi: ; error: bad argument type: lselsetp nil. Bạn xem giúp lại mình nhé. Cám ơn nhiều.
  • 0