Đến nội dung


Hình ảnh
- - - - -

Lisp sửa giá trị của dim


  • Please log in to reply
15 replies to this topic

#1 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 10 September 2010 - 10:44 PM

Bác nào có lisp thay đổi giá trị của dim khi mình pick vào 1 điểm, vd như hình vẽ của e dưới đây. Làm sao líp dùng chọn đối tượng dim có giá trị 1358.98 rồi pick vào điểm thuộc đường đỏ dim này sẽ biến thành giá trị của dim dưới có giá trị 1094,02.
đây là file cad của em.
http://www.cadviet.c...gia_tri_dim.dwg
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#2 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 12 September 2010 - 03:43 PM

bác nào biết giúp e với
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#3 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 16 September 2010 - 11:38 AM

Bác nào có lisp thay đổi giá trị của dim khi mình pick vào 1 điểm, vd như hình vẽ của e dưới đây. Làm sao líp dùng chọn đối tượng dim có giá trị 1358.98 rồi pick vào điểm thuộc đường đỏ dim này sẽ biến thành giá trị của dim dưới có giá trị 1094,02.
đây là file cad của em.
http://www.cadviet.c...gia_tri_dim.dwg

mình viết cho bạn rồi đó. chúc thành công
http://www.cadviet.c...pfiles/3/md.lsp

(defun ttt(AA / aa pt1 pt2 pt3 pt4 pt5 so d1 d2 pt11 k50)
(SETQ PT1 (CDR (ASSOC '13 AA)))
(SETQ PT2 (CDR (ASSOC '14 AA)))
(SETQ pt3 (list (car pt2) (cadr pt1)))
(SETQ pt4 (list (car pt1) (cadr pt2)))
(SETQ PT11 (CDR (ASSOC '11 AA)))
(setq d1 (distance pt1 pt3))
(setq d2 (distance pt1 pt4))
(setq k50 (cdr (ASSOC '50 AA)))
(if (= k50 0)
(setq so (rtos d1))
(setq so (rtos d2))
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:md(/ so dt m dtc t1 t2 ent ent_ht sodoituong index)
(prompt "\nChon dim thay doi gia tri: ")
(setq dtc (ssget '((0 . "dimension"))))
(prompt "\nChon dim tham chieu: ")
(setq dtm (entsel))
(setq t1 (entget (car dtm)))
(if (= (atof (cdr(assoc 1 t1))) 0.0)
(setq so (ttt t1))
(setq so (cdr(assoc 1 t1)))
)
(defun chu (ent / ent)
(setq t2 (entget ent))
(setq t2 (subst (cons 1 so) (assoc 1 t2) t2 ))
(entmod t2)
)
(setq
sodoituong (sslength dtc)
index 0
)
(repeat sodoituong
(setq
ent_ht (ssname dtc index)
index (1+ index)
)
(chu ent_ht)
)
(princ)
)

bạn có thể chọn nhiều đối tượng dim để thay đổi giá trị theo một đối tượng tham chiễu
  • 1
Hình đã gửi

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 September 2010 - 02:09 PM

mình viết cho bạn rồi đó. chúc thành công
http://www.cadviet.c...pfiles/3/md.lsp


(defun ttt(AA / aa pt1 pt2 pt3 pt4 pt5 so d1 d2 pt11 k50)
(SETQ PT1 (CDR (ASSOC '13 AA)))
(SETQ PT2 (CDR (ASSOC '14 AA)))
(SETQ pt3 (list (car pt2) (cadr pt1)))
(SETQ pt4 (list (car pt1) (cadr pt2)))
(SETQ PT11 (CDR (ASSOC '11 AA)))
(setq d1 (distance pt1 pt3))
(setq d2 (distance pt1 pt4))
(setq k50 (cdr (ASSOC '50 AA)))
(if (= k50 0)
(setq so (rtos d1))
(setq so (rtos d2))
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:md(/ so dt m dtc t1 t2 ent ent_ht sodoituong index)
(prompt "\nChon dim thay doi gia tri: ")
(setq dtc (ssget '((0 . "dimension"))))
(prompt "\nChon dim tham chieu: ")
(setq dtm (entsel))
(setq t1 (entget (car dtm)))
(if (= (atof (cdr(assoc 1 t1))) 0.0)
(setq so (ttt t1))
(setq so (cdr(assoc 1 t1)))
)
(defun chu (ent / ent)
(setq t2 (entget ent))
(setq t2 (subst (cons 1 so) (assoc 1 t2) t2 ))
(entmod t2)
)
(setq
sodoituong (sslength dtc)
index 0
)
(repeat sodoituong
(setq
ent_ht (ssname dtc index)
index (1+ index)
)
(chu ent_ht)
)
(princ)
)

bạn có thể chọn nhiều đối tượng dim để thay đổi giá trị theo một đối tượng tham chiễu

Lisp này không đúng yêu cầu của bạn vminh_ct rồi

Bác nào có lisp thay đổi giá trị của dim khi mình pick vào 1 điểm, vd như hình vẽ của e dưới đây. Làm sao líp dùng chọn đối tượng dim có giá trị 1358.98 rồi pick vào điểm thuộc đường đỏ dim này sẽ biến thành giá trị của dim dưới có giá trị 1094,02.
đây là file cad của em.
http://www.cadviet.c...gia_tri_dim.dwg

Theo như yêu cầu của bạn vminh_ct thì Lisp có thể xây dựng được nhưng Tue_NV nghĩ rằng nó cũng không nhanh hơn CAD là bao nhiêu (Chỉ cần dùng Grid mà kéo là được)

Lisp của lp_hai là Lisp sửa giá trị Dim hay nói cách khác là "độ chế" Dim. Nó cũng như lệnh Ded (dimedit) nhưng lệnh Ded (dimedit) có nhiều tính năng hơn
  • 0

#5 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 17 September 2010 - 09:18 AM

đúng là như bác Tue_NV nói là có thể dùng grip, nhưng trong bản vẽ có nhiều dim và khi các dim đã bị chặt chân đi rồi thì dùng grip bực lắm, lại phỉa di chuyển grip vào đối tượng rồi lại chặt lại Dim, thế thì mệt chết bác à. Các bác xem thế nào giúp e
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#6 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 17 September 2010 - 09:33 AM

cám ơn anh lp_hai, đúng là a hiểu nhầm ý e, e muốn không phải sửa giá trị của dim mà cả chân dim,tức là trong bản vẽ có nhiều đối tượng, e "S" 1 vài đối tượng mà không Stretch dim theo nên e muốn sửa dim theo cách đấy, chứ không kéo grip thì lâu mà lại phải chỉnh sửa chân dim 1 lần nữa hì hì
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#7 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 18 September 2010 - 09:49 AM

đúng là như bác Tue_NV nói là có thể dùng grip, nhưng trong bản vẽ có nhiều dim và khi các dim đã bị chặt chân đi rồi thì dùng grip bực lắm, lại phỉa di chuyển grip vào đối tượng rồi lại chặt lại Dim, thế thì mệt chết bác à. Các bác xem thế nào giúp e

Đúng là mình nhầm to rồi
mình có ý này ko biết có giúp dc bạn ko nhé!
đầu tiên bạn có 1 dim và một dt(ví dụ là đường thẳng nha).
bgiờ bạn muốn dim này là dim cho dt kia?
với Dim bạn có mã DXF 13 và 14 cho tọa độ 2 điểm vị trí của chân dim. còn với đường line bạn có được tọa độ 2 diểm dầu và cuối (chọn bằng cách pick diểm với osmode chọn end)
với Dim nằm ngang bạn thay giá trị X của diểm 1 vào giá trị X của mã DXF 13, X2 vào X của DXF 14 bằng hàm subst và entmod.
nếu dim nằm dứng thì bạn thay gt Y. dụa vào mã DXF 50 bạn biết dim đúng hay ngang.
làm theo cách mình nói thì bạn phải chọn 2 điểm trên đối tượng mới. nhưng bạn không cần phải cắt lại chân dim.
nếu ko giúp dc bạn xin dừng cười nha!
heheheee
  • 1
Hình đã gửi

#8 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 18 September 2010 - 07:54 PM

hic, cám ơn anh Lp_hai nhé, nhưng về lisp e chỉ mới tâp toẹ thôi, thú thật anh bảo cách của anh e không hiểu gì mấy, hì hì, dù sao cũng cảm ơn anh, chắc phải stop bài viết ở đây vì chưa ai giúp được anh à, :undecided:
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#9 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 20 September 2010 - 09:54 AM

hic, cám ơn anh Lp_hai nhé, nhưng về lisp e chỉ mới tâp toẹ thôi, thú thật anh bảo cách của anh e không hiểu gì mấy, hì hì, dù sao cũng cảm ơn anh, chắc phải stop bài viết ở đây vì chưa ai giúp được anh à, :(

mình cũng chẵn biết nhiều lắm. mong giúp dc bạn
(defun ldx(ent xasso nasso / ds l2 xasso nasso yasso l6 ent)
(setq ds (entget ent))
(setq l2 (assoc nasso ds))
(setq yasso (nth 2 l2))
(setq l6 (list nasso xasso yasso 0.0))
(setq ds (subst l6 (assoc nasso ds) ds ))
(entmod ds)
(princ)
)
;;;;;;;;;;;;;;
(defun ldy(ent yasso nasso / ds l2 xasso nasso yasso l6 ent)
(setq ds (entget ent))
(setq l2 (assoc nasso ds))
(setq xasso (nth 1 l2))
(setq l6 (list nasso xasso yasso 0.0))
(setq ds (subst l6 (assoc nasso ds) ds ))
(entmod ds)
(princ)
)
;;;;;;;;;;;;;;


(defun c:ad(/ dt pt1 pt2 x1 x2 y1 y2 oso)
(prompt "\nChon dim : ")
(setq dt (car(entsel)))
(setq oso (getvar "osmode"))
(setvar "osmode" 33)
(setq pt1(getpoint "\nchon diem 1:"))
(setq pt2(getpoint pt1 "\nchon diem 2:"))
(setq
x1 (car pt1)
x2 (car pt2)
y1 (cadr pt1)
y2 (cadr pt2)
)
(setq k50 (cdr (ASSOC '50 (entget dt))))
(if (= k50 0)
((ldx dt x1 13)
(ldx dt x2 14))
((ldy dt y1 13)
(ldy dt y2 14))
)
(setvar "osmode" oso)
(princ)
)

http://www.cadviet.c...pfiles/3/ad.lsp
  • 1
Hình đã gửi

#10 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 20 September 2010 - 10:06 AM

hi , cũng gần đúng với ý em rồi, nhưng Bác lp_hai xem khi bắt điểm 1 và điểm 2 bác gán hàm gì mà nó chỉ bắt điêm end thôi, em muốn nó bắt tất cả các điểm cơ. hì hì
có phỉa sửa dòng này không nhỉ. :(
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#11 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 20 September 2010 - 10:06 AM

(setvar "osmode" 33).
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#12 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 20 September 2010 - 10:24 AM

hi, a lp_hai có thể sửa lúc khi mình chọn dim thì sử dụng chế độ crossing được không à.
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#13 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 20 September 2010 - 10:35 AM

(setvar "osmode" 33).

nếu bạn muốn chọn các kiểu bắt điểm khác nhau thì bỏ cái dòng đó đi.
còn bạn muốn chọn dt bằng Crossing(bạn muồn chọn nhiều ĐT ??), mình thấy hơi khó vì bạn ko thể chọn nhiều đường dim rồi lại lấy theo một giá trị giống nhau. nếu ý bạn muốn chọn một lượt nhiều dim rồi sửa lần lượt theo nhiều điểm thì có lẽ dc. bạn nhờ các cao thủ khác viết hộ. mình còn gà lắm. heeee
  • 1
Hình đã gửi

#14 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 20 September 2010 - 11:40 AM

hê hê, mình đoán cũng trúng phoóc ghê, cám ơn bác lp_hai nhé. như thế cũng gần đựơc như mong muốn rồi.
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#15 cuibap

cuibap

    biết zoom

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

Đã gửi 05 November 2010 - 09:25 AM

Nhân tiện đây bác Tue_NV và các bác cho mình hỏi thêm xíu nhé:
Có lisp nào mà khi mình chọn vào đối tượng dim nào, đối tượng đó vẫn giữ nguyên giá trị khi bị stretch hay ko? Thông thường muốn làm như vậy thì phải edit từng giá trị dim, rất mất thời gian.
Mod thông cảm vì ko sành về mấy dzụ post bài trên mạng lắm. Nên mạo mụi hỏi nơi đây luôn. :)
  • 0

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 November 2010 - 09:47 AM

Nhân tiện đây bác Tue_NV và các bác cho mình hỏi thêm xíu nhé:
Có lisp nào mà khi mình chọn vào đối tượng dim nào, đối tượng đó vẫn giữ nguyên giá trị khi bị stretch hay ko? Thông thường muốn làm như vậy thì phải edit từng giá trị dim, rất mất thời gian.
Mod thông cảm vì ko sành về mấy dzụ post bài trên mạng lắm. Nên mạo mụi hỏi nơi đây luôn. :)

Bạn có thể sử dụng Lisp fakedim của bác NguyenHoanh
Lisp FakeDim
  • 0