明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2621|回复: 16

[源码] CAD图档倒出SVG图形,做图标利器

[复制链接]
发表于 2021-12-18 22:59:31 | 显示全部楼层 |阅读模式
本帖最后由 邹锋 于 2021-12-23 15:25 编辑

最近需求要做图标,所以开发个CAD做图标工具,CAD框选转SVG    的源码  ,SVG的好处理可以放很大都不会模糊
代码很简单的




下面是编辑器改颜色用的

2021-12-22


;;示例(HH:rtosr 2.500);"2.5"
(defun HH:rtosr        (RealNum / DIMZIN1 SHORTREAL1)
  (setq DimZin1 (getvar "DIMZIN"))
  (setvar "DIMZIN" 8)
  (setq ShortReal1 (rtos RealNum 2 8))
  (setvar "DIMZIN" DimZin1)
  ShortReal1
)


;;;;by 明经黄贡偳
;;示例1 保留一位小数,四舍五入(HH:rtosr1 2.555 1);"2.6"
(defun HH:rtosr1 (RealNum n / DIMZIN1 SHORTREAL1)
  (setq DimZin1 (getvar "DIMZIN"))
  (setvar "DIMZIN" 0)
  (setq ShortReal1 (rtos RealNum 2 n))
  (setvar "DIMZIN" DimZin1)
  (setq num (atof shortreal1))
  (setq ShortReal2 (HH:rtosr num))
  ShortReal2
)


(defun c:cj (/ SS)
  (setvar "cmdecho" 0)
  (setq xx (ssget))
(vl-cmdf "pedit" "m" xx "" "y"  "j" "j"  ""  0.1 "")
  (princ)
  )


;;CAD 做SVG  支持直线,圆 多线段  要串起来 就是实心的,打散就是线条
(defun c:svg()
   (setq ffn (getfiled "另存为" "" "svg" 1))
  (setq out (open ffn "w"))
  (SETQ SS (SSGET))  
  (write-line "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>" out)  
  (write-line "<svg width=\"200\" height=\"200\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" out)
  (SETQ i 0)
  (repeat (sslength ss)
    (setq pline (ssname ss i))
    (setq ent (entget pline))
    (cond ((= (cdr (assoc 0 ent)) "LWPOLYLINE")      
            (write-line "<polyline points=\"" out)
            (setq str "")
            (foreach lst ent
              (if (= (car lst) 10)
                (progn
                  (setq point (cdr lst))
                  (setq xx (HH:rtosr1  (abs (car point))0))
                  (setq yy (HH:rtosr1  (abs (cadr point))0))
                  ;(setq pts (append pts (list (cdr lst))))
                  
                  (setq str (strcat str xx " "  yy ","))
                  )
              )
            )
            (setq js (- (strlen str) 1))
            (setq s1(substr str 1 js))
            (write-line s1 out)   
            (write-line "\" fill=\"#000000\" stroke=\"none\" stroke-opacity=\"0\" xmlns=\"http://www.w3.org/2000/svg\" />" out)
            (print)
            )
    ((= (cdr (assoc 0 ent)) "LINE")      
            (write-line "<line " out)
            (setq p1 (cdr (assoc 10 ent))
               p2 (cdr (assoc 11 ent))
               xx1 (HH:rtosr1  (abs (car p1))0)
               yy1 (HH:rtosr1  (abs (cadr p1))0)
               xx2 (HH:rtosr1  (abs (car p2))0)
               yy2 (HH:rtosr1  (abs (cadr p2))0)
                  )
            (setq s1 "")
            (setq s1(strcat s1 "x1=\"" xx1 "\" y1=\"" yy1 "\" x2=\"" xx2 "\" y2=\"" yy2))
            (write-line s1 out)   
            (write-line "\" style=\"stroke:rgb(255,0,0);stroke-width:2\"/>" out)
            (print)
            )
    ((= (cdr (assoc 0 ent)) "CIRCLE")      
            (write-line "<circle " out)
            (setq p1 (cdr (assoc 10 ent))
               rad (cdr (assoc 40 ent))
               xx1 (HH:rtosr1  (abs (car p1))0)
               yy1 (HH:rtosr1  (abs (cadr p1))0)
               rr (HH:rtosr1  (abs rad)0)
                  )
            (setq s1 "")
            (setq s1(strcat s1 "cx=\"" xx1 "\" cy=\"" yy1 "\" r=\"" rr))
            (write-line s1 out)   
            (write-line "\" style=\"stroke:rgb(255,0,0);stroke-width:2\"/>" out)
            (print)
            )
     ((= (cdr (assoc 0 ent)) "TEXT")      
            (write-line "<text " out)
            (setq p1 (cdr (assoc 10 ent))
               txt (cdr (assoc 1 ent))
               xx1 (HH:rtosr1  (abs (car p1))0)
               yy1 (HH:rtosr1  (abs (cadr p1))0)
                  )
            (setq s1 "")
            (setq s1(strcat s1 "x=\"" xx1 "\" y=\"" yy1  "\" fill=\"red\">" txt))
            (write-line s1 out)   
            (write-line " </text>" out)
            (print)
            )
          )
   ; <text x="0" y="15" fill="red">I love SVG</text>
    (SETQ I (1+ i))
    ;(print pts)
    (princ)
  )
  (write-line "</svg>" out)
  ;(princ "</svg>")
  (close out)
  (princ  )
)

本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +4 收起 理由
yanshengjiang + 1 先给币,再浏览。
USER2128 + 1 神马都是浮云
muwind + 1 神马都是浮云
xtjd + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-12-22 12:43:00 | 显示全部楼层
tjy168 发表于 2021-12-20 16:03
我这解压不,显示压缩包损坏了

据说论坛系统有点问题 压缩文件都有问题。  最简单的办法是使用360压缩软件就可以了。
发表于 2021-12-20 08:40:01 | 显示全部楼层
                           
发表于 2021-12-20 19:15:41 | 显示全部楼层
解决各图标对象坐标保存就好,然后通过坐标转换为要求的图标,对曲线只要取得的坐标足够密即可,坐标转换为像素表就可
发表于 2021-12-19 09:41:20 | 显示全部楼层

感谢楼主分享源码
发表于 2021-12-19 21:55:25 | 显示全部楼层
谢谢楼主分享!
发表于 2021-12-19 21:59:42 | 显示全部楼层
谢谢楼主分享!
发表于 2021-12-20 06:20:46 | 显示全部楼层
                    
发表于 2021-12-20 11:07:31 | 显示全部楼层
感谢楼主分享
发表于 2021-12-20 15:33:31 | 显示全部楼层
楼主提供的右侧图形,为什么生成不了?我自己测试也生成不了。图形有什么规则吗?
发表于 2021-12-20 16:03:02 | 显示全部楼层
我这解压不,显示压缩包损坏了
发表于 2021-12-20 16:38:43 | 显示全部楼层
感谢楼主分享源码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:24 , Processed in 0.279031 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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