明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3878|回复: 10

[求助][LISP]Solid Hatch to Gradient?

[复制链接]
发表于 2005-7-14 15:40:00 | 显示全部楼层 |阅读模式
To create nice slides, I want to convert all the hatches with "Solid" style in current drawing into "Gradient" hatch without changing their colors. Anybody got an idea? Thanks in advance.
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2005-7-15 08:02:00 | 显示全部楼层
;;不清楚你遇到甚么困难??
(defun C:TT1 (/ SS ENT)
  (setq SS (ssget "X" '((0 . "HATCH") (2 . "SOLID")))
 N  0
  )
  (repeat (sslength SS)
    (setq ENT (entget (ssname SS N)))
    (entmod (subst (cons 2 "ANSI31") (assoc 2 ENT) ENT))
    (setq N (1+ N))
  )
  (princ)
)
 楼主| 发表于 2005-7-15 23:37:00 | 显示全部楼层
我想换成渐变色(Gradient),用ANSI31代替有时hatch很小时还要考虑比例问题,否则做出来的Slide效果还不行。
发表于 2005-7-20 10:23:00 | 显示全部楼层
  1. ;;BY LUCAS
  2. (defun C:TT1 (/ OBJ SS ENT COLOR)
  3.     (defun ColorIndex-to-TrueColor (ci / colorObj)
  4.     (vl-load-com)
  5.     (and (setq colorObj (vla-getinterfaceobject
  6.      (vlax-get-acad-object)
  7.      "AutoCAD.AcCmColor.16"
  8.    )
  9.   )
  10.   (>= ci 1)
  11.   (<= ci 255)
  12.   (not
  13.     (vl-catch-all-error-p
  14.       (vl-catch-all-apply 'vla-put-ColorIndex (list colorObj ci))
  15.     )
  16.   )
  17.   (vla-setrgb
  18.     colorobj
  19.     (vla-get-red colorObj)
  20.     (vla-get-green colorObj)
  21.     (vla-get-blue colorObj)
  22.   )
  23.     )
  24.     colorobj
  25.   )
  26.   (setq SS (ssget "X" '((0 . "HATCH")))
  27. N  0
  28.   )
  29.   (repeat (sslength SS)
  30.     (setq ENT (ssname SS N))
  31.     ;;---------------------------------------
  32.     ;;只对有62 dxf测试,相信你可以完成(增加其他情况--bylayer/truecolor)
  33.     (setq color (cdr (assoc 62 (entget ent))))
  34.     ;;---------------------------------------
  35.     (vla-put-HatchObjectType
  36.       (setq obj (vlax-ename->vla-object ent))
  37.       1
  38.     )
  39.     (vla-put-GradientColor1
  40.       obj
  41.       (ColorIndex-to-TrueColor color)
  42.     )
  43.     (setq N (1+ N))
  44.   )
  45.   (princ)
  46. )
 楼主| 发表于 2005-7-30 00:15:00 | 显示全部楼层
谢谢龙龙仔,但我一直没有成功。可能是因为我要跨文档操作,我改成VBA也不行,每次到改变HatchObjectType时AutoCAD就死掉。
发表于 2005-8-2 07:57:00 | 显示全部楼层
  1. ;;(arxload "acetutil.arx" NIL)
  2. ;;不清楚你如何跨文档操作
  3. ;;批量修改Hatchobj为渐变色(非OBJECTDBX)
  4. ;;BY LUCAS(龙龙仔)
  5. (vl-load-com)
  6. (defun C:TTT (/ HOLDECHO APP DWGNAME PREFIX_DWG NN QQ WW ENT N COLOR)
  7.   (defun COLORINDEX-TO-TRUECOLOR (CI / COLOROBJ)
  8.     (vl-load-com)
  9.     (and (setq COLOROBJ (vla-getinterfaceobject
  10.      (vlax-get-acad-object)
  11.      "AutoCAD.AcCmColor.16"
  12.    )
  13.   )
  14.   (>= CI 1)
  15.   (<= CI 255)
  16.   (not
  17.     (vl-catch-all-error-p
  18.       (vl-catch-all-apply 'vla-put-colorindex (list COLOROBJ CI))
  19.     )
  20.   )
  21.   (vla-setrgb
  22.     COLOROBJ
  23.     (vla-get-red COLOROBJ)
  24.     (vla-get-green COLOROBJ)
  25.     (vla-get-blue COLOROBJ)
  26.   )
  27.     )
  28.     COLOROBJ
  29.   )
  30.   (setq HOLDECHO (getvar "cmdecho"))
  31.   (setvar "cmdecho" 0)
  32.   (setq PREFIX_DWG
  33.   (strcat
  34.     (vl-string-right-trim
  35.       "\"
  36.       (strcase (acet-ui-pickdir
  37.    "选择目录"
  38.    (vl-string-right-trim "\" (getvar "dwgprefix"))
  39.    "批量修改Hatchobj为渐变色"
  40.         )
  41.       )
  42.     )
  43.     "\"
  44.   )
  45.   )
  46.   (setq QQ (vl-directory-files PREFIX_DWG "*.DWG"))
  47.   (setq NN 0)
  48.   (if (/= QQ NIL)
  49.     (progn
  50.       (setq APP (vlax-get-acad-object))
  51.       (repeat (length QQ)
  52. (setq DWGNAME (strcase (strcat PREFIX_DWG (nth NN QQ))))
  53. (setq WW (vla-open (vla-get-documents APP) DWGNAME))
  54. (vlax-for N (vla-get-blocks WW)
  55.    (vlax-for ENT N
  56.      (if (vlax-property-available-p ENT 'HATCHOBJECTTYPE)
  57.        (progn
  58.   ;;只对有62 dxf测试,相信你可以完成(增加其他情况--bylayer/truecolor)
  59.   (if (setq COLOR
  60.       (cdr
  61.         (assoc 62
  62.         (entget (vlax-vla-object->ename ENT))
  63.         )
  64.       )
  65.       )
  66.     (progn
  67.       (vla-put-hatchobjecttype
  68.         ENT
  69.         1
  70.       )
  71.       (vla-put-gradientcolor1
  72.         ENT
  73.         (COLORINDEX-TO-TRUECOLOR COLOR)
  74.       )
  75.     )
  76.   )
  77.        )
  78.      )
  79.    )
  80. )
  81. (vla-save WW)
  82. (prompt (strcat "\n" DWGNAME " <修改Hatchobj完成>!!!"))
  83. (vla-close WW :vlax-false)
  84. (setq NN (1+ NN))
  85.       )
  86.       (vlax-release-object WW)
  87.       (vlax-release-object APP)
  88.     )
  89.     (prompt "\n所选目录中未有任何图档!!!")
  90.   )
  91.   (setvar "cmdecho" HOLDECHO)
  92.   (princ)
  93. )
  94. (princ)
 楼主| 发表于 2005-8-2 10:20:00 | 显示全部楼层

Thanks again. I have just tried your routine in 2004 but it didn’t work. The Solid hatch in drawings didn’t change to Gradient hatch type. And it exited with error before finishing the whole folder.

 

What I want to do is: Open an existing DWG file è Zoom extent è Substitute all Solid hatch with gradient Hatch type è Make a slide è Quit without save

发表于 2005-8-2 12:43:00 | 显示全部楼层

VLISP跨文档无法做Zoom extent,看来只能用INSERT图档

附我的测试图(R2005通过)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2005-8-2 13:18:00 | 显示全部楼层

Yes, it works fine on your test drawing. Now I know the reason why I failed to do that. Because we were told to save our drawings in 2000 format by default and there is no gradient in 2000 and I believe some drawing information has lost.

发表于 2011-4-29 23:59:20 | 显示全部楼层
好贴很多,可我水平很有限,只能取所需学习一下啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-23 11:58 , Processed in 0.277770 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表