Chuyển đến nội dung
Diễn đàn CADViet

hung1608

Thành viên
  • Số lượng nội dung

    155
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    6

Bài đăng được đăng bởi hung1608


  1. Hy vọng là được (Khuyến mại thêm Textstyle): :D​

    (defun c:eb (/ get-gc put-gc getvalue *error* att curcmd dcledittext dcl_id editext file_dcl hei oldhei oldval oldwid str wid dialog taolist

    lststy possty sty)

    (setq *error* (defun my-err (msg)

    (cond ((= msg "function cancelled") (princ "\t\tuser abort"))

    (t (progn (princ msg) (princ))))

    (setq *error* nil)

    (princ)))

    (defun get-gc (group entity) (cdr (assoc group (entget entity))))

    (defun put-gc (value group entity / properties)

    (setq properties (entget entity))

    (setq properties (subst (cons group value) (assoc group properties) properties))

    (entmod properties))

    (defun getvalue ()

    (setq str (get_tile "text")

    hei (atof (get_tile "hei"))

    wid (atof (get_tile "wid"))

    sty (atoi (get_tile "sty"))))

    (defun taolist (kieu / kieu nl lkq)

    (setq lkq '())

    (setq nl (tblnext kieu t))

    (while nl (setq lkq (append lkq (list (cdr (assoc 2 nl))))) (setq nl (tblnext kieu)))

    lkq)

    (vl-load-com)

    (setq dcledittext (list

    "edit: dialog {label = \"CHANGE TEXT PROPERTIES\";initial_focus = \"text\";"

    ":edit_box {label = \"String:\"; allow_accept = true; edit_width = 45; key = \"text\";}" ": row {"

    ":edit_box {label = \"Height:\"; allow_accept = true; edit_width = 8; key = \"hei\";}"

    ":edit_box {label = \"Width:\"; allow_accept = true; edit_width = 8; key = \"wid\";}"

    ":popup_list {allow_accept = true; edit_width = 12; key = \"sty\";}" "}" "spacer_1;" "ok_cancel;}"))

    (setq curcmd (getvar "cmdecho"))

    (setvar "cmdecho" 0)

    (while (/= (setq att (car (nentselp "\nselect attribute for edit: "))) nil)

    (if (or (= (get-gc 0 att) "ATTRIB") (= (get-gc 0 att) "TEXT"))

    (progn (setq oldval (get-gc 1 att)

    oldhei (rtos (get-gc 40 att) 2 (getvar 'LUPREC))

    oldwid (rtos (get-gc 41 att) 2 2)

    oldsty (get-gc 7 att)

    lststy (taolist "STYLE")

    possty (vl-position oldsty lststy))

    (setq editext.dcl (vl-filename-mktemp "edittext.dcl")

    file_dcl (open editext.dcl "w"))

    (foreach ll dcledittext (write-line ll file_dcl))

    (close file_dcl)

    (if (> 0 (setq dcl_id (load_dialog editext.dcl)))

    (progn (alert "not found file edittext.dcl") (exit)))

    (if (not (new_dialog "edit" dcl_id))

    (progn (alert "not found edit dialog") (exit)))

    (set_tile "text" oldval)

    (set_tile "hei" oldhei)

    (set_tile "wid" oldwid)

    (set_tile "sty" (rtos possty))

    (start_list "sty" 3)

    (mapcar 'add_list lststy)

    (end_list)

    (action_tile "accept" "(getvalue)(setq dialog 1)(done_dialog)")

    (action_tile "cancel" "(setq dialog nil)")

    (start_dialog)

    (unload_dialog dcl_id)

    (if (eq dialog 1)

    (progn (put-gc str 1 att) (put-gc hei 40 att) (put-gc wid 41 att) (put-gc (nth sty lststy) 7 att))))

    (princ "select attrib/text")))

    (if editext.dcl

    (vl-file-delete editext.dcl))

    (setvar "cmdecho" curcmd)

    (setq *error* nil)

    (princ))

    Tuyệt vời bạn ơi

    Thanks


  2. Bạn ơi chỉnh cho mình 1 chút nữa được không

    Lisp của bạn hoạt động rùi, nhưng nó tăng tất cả các text Att trong block , bạn có thẻ làm cho lisp điều chỉnh các text riêng biệt được không, và khi chọn text thì mình biết được chiều cao và độ rộng của text hiện là bao nhiêu được không bạn để khi điều chỉnh dễ dàng hơn


  3. Trim thì trim được có điều làm vậy mất thời gian lắm, vì Hatch của bạn là tổ hợp của nhiều Hatch chồng chéo nên nhau, mà hatch đó nếu chỉ dùng HCN màu đỏ làm bao cắt thì sau khi dùng nó, Khung Bao (boundary) của Hatch vẫn chưa kín, nên không Hatch được (hoặc kín thì thì chỉ đủ để Trim riêng phần được kín đó) không đạt được kết quả cuối cùng.

    Gặp trường hợp này có lẽ nên làm thế này:

    B1: Chuyển layer hiện hành sang 1 layer khác không trùng, ko dùng trong vùng đang chỉnh sửa. Chẳng hạn layer "0"

    B2: Dùng lệnh "HE" với lựa chọn ReCreate Boumdary - Tái tạo lại khung bao đối tượng) nhấn Ok, ... cho hết lệnh, kết quả được Các Line, Polyline bao quanh Hatch, ở Layer "0", đường bao trùng đường bao của Hatch,

    B3: Xóa Hatch cũ.

    B4: Hatch mới, với lựa chọn Pick điểm (trong trường hợp mà đầu bài đưa ra, chỉ cần pick 1 điểm trong vùng ), hatch bình thường.

    B5: tắt toàn bộ layer khác chỉ để lại layer "0", xóa bỏ toàn bộ đối tường được tạo từ B2.

    END

    Bạn ơi có cách nào nhanh hơn được không, bởi bản vẽ nặng diện tích lớn, hatch nhiều lúc rất khó khăn

×