zxjing 发表于 2011-2-18 23:46:43

图案填充的比例修改了,但图的显示并未修改

各位前辈:
小弟又有一问题来烦扰大家了,
首先感谢 G版 在“如何使 选择集中的图元 被选中[已结]”一贴中对我的帮助
鼓捣了大半天也没搞定,结果G版一句话就搞定了,这差距净如此之大,呜呜~
问题如下:


41
填充图案比例或间距(仅限图案填充)

图案填充的比例按如下程序修改组码41后
(defun C:gg ()
(setq bili (getreal "\n输入比例:"))
;;;(setq ss (ssget "X" (list'(2 . "ANSI31")'(0 . "HATCH") '(8 . "地块位置示意") )))
(setq ss (ssget "X" (list'(2 . "ANSI31")'(0 . "HATCH"))))
;;;(sssetfirst nil ss)
(setq n 0) ;序号的初值设为0
(repeat (sslength ss);重复执行ss的长度的次数,即对象的个数
(setq name (ssname ss n));得到选择集内第n个对象的图元名
(setq ent (entget name));得到该对象的图元表
(if (assoc 41 ent)
      (setq ent (subst(cons 41 bili) (assoc 41 ent) ent))
      (setq ent (append 41 (list(cons 41 bili))))
    )
      (entmod ent)(entmod ent)
;;;   (redraw name 4)
(setq n(1+ n));序号n的数量加1
)
(prin1)
)

图案填充的比例修改了,但图的显示并未修改



对比了两种不同形式的组码,不觉得有什么可疑的地方

命令: (entget(car(entsel)))
选择对象: ((-1 . <图元名: 7ef731e0>) (0 . "HATCH") (330 . <图元名: 7ef70cf8>)
(5 . "104") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "地块位置示意")
(100 . "AcDbHatch") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . "ANSI31") (70 . 0)
(71 . 0) (91 . 1) (92 . 1) (93 . 4) (72 . 1) (10 32168.7 -8256.93 0.0) (11
34864.7 -8256.93 0.0) (72 . 1) (10 34864.7 -8256.93 0.0) (11 34864.7 -10399.5
0.0) (72 . 1) (10 34864.7 -10399.5 0.0) (11 32168.7 -10399.5 0.0) (72 . 1) (10
32168.7 -10399.5 0.0) (11 32168.7 -8256.93 0.0) (97 . 0) (75 . 0) (76 . 1) (52
. 0.0) (41 . 33.0) (77 . 0) (78 . 1) (53 . 0.785398) (43 . 7676.64) (44 .
-4103.84) (45 . -112.253) (46 . 112.253) (79 . 0) (98 . 1) (10 24182.9 -10121.2
0.0))
命令: (entget(car(entsel)))
选择对象: ((-1 . <图元名: 7ef731e8>) (0 . "HATCH") (330 . <图元名: 7ef70cf8>)
(5 . "105") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "地块位置示意")
(100 . "AcDbHatch") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . "ANSI31") (70 . 0)
(71 . 0) (91 . 1) (92 . 1) (93 . 4) (72 . 1) (10 29293.7 -5622.81 0.0) (11
31989.8 -5622.81 0.0) (72 . 1) (10 31989.8 -5622.81 0.0) (11 31989.8 -7765.36
0.0) (72 . 1) (10 31989.8 -7765.36 0.0) (11 29293.7 -7765.36 0.0) (72 . 1) (10
29293.7 -7765.36 0.0) (11 29293.7 -5622.81 0.0) (97 . 0) (75 . 0) (76 . 1) (52
. 0.0) (41 . 33.0) (77 . 0) (78 . 1) (53 . 0.785398) (43 . 7676.64) (44 .
-4103.84) (45 . -449.013) (46 . 449.013) (79 . 0) (98 . 1) (10 21307.9 -7487.08
0.0))

但是双击填充,进入图案填充编辑器,再点击“确定”按钮 填充就会刷新,也不知道问什么
执行命令“U”可以倒退回到 比例修改了但是显示不正确的状态,

也不知道是还有需要修改的组码,还是需要执行什么操作来刷新什么的
恳请各位前辈不吝赐教,谢过~





比n还多 发表于 2019-4-14 16:30:50

这个问题是啥原因?我也遇到同样问题(defun DCL_TC ()
(setq sst(entget(car(entsel))))
(setq BL1 (cdr(assoc 41 sst)))
(vl-file-delete(strcat (getvar "TEMPPREFIX") "TMP_BL.DCL"))
(setq FA2(open (strcat (getvar "TEMPPREFIX") "TMP_BL.DCL") "a"))
(foreach stream '( "TCBLTZ:dialog{\n"
            "label= \"填充比例调整:\";\n"
                                                "initial_focus=\"edit_p\";\n"       
            ":edit_box{" "label= \"当前填充比例:\"; key=\"YBL\"; edit_width=8;}\n"
            ":edit_box{" "label= \"新的填充比例:\"; key=\"edit_p\"; edit_width=8; allow_accept=true;}\n"
            "ok_cancel;\n"                                               
            "}\n"      
            )
(princ stream FA2))
(close FA2)
(setq DCL_T (LOAD_DIALOG (strcat (getvar "TEMPPREFIX") "TMP_BL.DCL")))
(new_dialog "TCBLTZ" DCL_T)
        (set_tile "YBL" (rtos BL1 2 3))
        (action_tile "accept" "(BLXG) (done_dialog 1)")
        (start_dialog))
(defun BLXG ()
(setq a (atof (get_tile "edit_p")))
(setq sst (subst (cons 41 a) (assoc 41 sst) sst))
(entmod sst))

Gu_xl 发表于 2011-2-19 09:39:20

回复 zxjing 的帖子


(defun C:gg ()
(setq bili (getreal "\n输入比例:"))
;;;(setq ss (ssget "X" (list'(2 . "ANSI31")'(0 . "HATCH") '(8 . "地块位置示意") )))
(setq ss (ssget "X" (list'(2 . "ANSI31")'(0 . "HATCH"))))
;;;(sssetfirst nil ss)
(setq n 0) ;序号的初值设为0
(repeat (sslength ss);重复执行ss的长度的次数,即对象的个数
(setq name (ssname ss n));得到选择集内第n个对象的图元名
(vla-put-PatternScale (vlax-ename->vla-object name) bili)
;;;   (redraw name 4)
(setq n(1+ n));序号n的数量加1
)
(prin1)
)

ZZXXQQ 发表于 2011-2-19 21:27:23

本帖最后由 ZZXXQQ 于 2011-2-20 20:03 编辑

这样试试:

(defun C:gg ()
(setq bili (getreal "\n输入比例:"))
(setq ss (ssget "X" '((0 . "HATCH") (2 . "ANSI31"))))
(setq n 0) ;序号的初值设为0
(repeat (sslength ss);重复执行ss的长度的次数,即对象的个数
(setq name (ssname ss n));得到选择集内第n个对象的图元名
(setq ent (entget name));得到该对象的图元表
(setq b45 (* (cdr(assoc 45 ent)) (/ bili (cdr(assoc 41 ent)))))
(setq ent (subst (cons 45 b45) (assoc 45 ent) ent))
(setq ent (subst (cons 41 bili) (assoc 41 ent) ent))
(entmod ent)
(entupd name)
(setq n(1+ n));序号n的数量加1
)
(prin1)
)

gzxl 发表于 2011-2-19 21:43:47

本帖最后由 gzxl 于 2011-2-19 22:03 编辑

那象cass植被间距如何修改?请高手提供点思路,谢谢!

zxjing 发表于 2011-2-19 23:46:02

本帖最后由 zxjing 于 2011-2-19 23:46 编辑

回复 Gu_xl 的帖子

谢谢G版,经测试达不到要求的效果,还是不能刷新填充的显示,还请再度赐教,不胜感激~
CAD版本:2004    windows:XP

zxjing 发表于 2011-2-19 23:57:42

回复 ZZXXQQ 的帖子

谢谢热心的Z版,好久不向您请教问题了,哈哈 ~
程序运行后还是不能达到刷新显示的效果,
另外有个问题就是如何获取填充的质心,这个也拖了好久了没有解决,
多段线的质心那个倒是可以提取到,但是填充的就不知道该怎么弄了,
选中填充的时候,CAD会有那个控制点显示,可是如何才能获取到呢

zxjing 发表于 2011-2-20 00:06:15

回复 gzxl 的帖子

你好,我看了你的那个dwg文件,不清楚它那个是怎么弄的,特性面板里提示是块参照,但在一起又像是编组,在对象编组里却又没有编组名,炸开后全部变单线。你说的这个软件我从来没用过,不了解它到底是怎么个运行机制,我感觉上他那个树木还可以统计数量出来,这样的难度,小弟也是刚接触lisp不久,恐怕帮不上忙了就~

Gu_xl 发表于 2011-2-20 01:10:22

回复 gzxl 的帖子

这其实不是填充!是对象无名编组!要改变填充密度,将改组内填充图块删除,根据边界重新计算插入密度,插入图块后再编无名组

Gu_xl 发表于 2011-2-20 01:13:07

回复 zxjing 的帖子

在08上我的方法没有问题,ZZXXQQ 的不行。04上未经测试,还不太清楚,我的机器没装04,现在无法测试!

gzxl 发表于 2011-2-20 07:52:27

本帖最后由 gzxl 于 2011-2-20 08:10 编辑

多谢G版和zxjing,G版的在CAD2004上测试可以啊
页: [1] 2
查看完整版本: 图案填充的比例修改了,但图的显示并未修改