明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2004|回复: 13

单线变双线,保留原线为中心线

[复制链接]
发表于 2023-3-21 23:08:20 | 显示全部楼层 |阅读模式
本帖最后由 aggdqty 于 2023-3-24 17:10 编辑

附件是论坛一位大神写的单线变双线的程序,麻烦帮修改一下,将原线变成中心线,线形为cnter,颜色为1,谢谢。
  • (defun c:Sx (/ getds0 obj)
  •   (if (null vlax-dump-object) (vl-load-com) )
  •   (SETVAR "CMDECHO" 0)
  •   (or *getds* (setq *getds* 90))
  •   (setq getds0 (getdist (strcat"\n输入宽度<"(rtos *getds* 2 3)">:")))
  •   (if getds0 (setq *getds* getds0))
  •   (while (setq obj (entsel))
  •     (setq obj (vlax-ename->vla-object(car obj)))
  •     (vla-offset obj (* 0.5 *getds*))
  •     (vla-offset obj (* 0.5 *getds* -1))
  •   )
  •   (SETVAR "CMDECHO" 1)
  •   (princ)
  • )




已调好,感谢各位

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
菜鸟初来乍到 + 1

查看全部评分

发表于 2023-3-22 08:50:31 | 显示全部楼层
  1. (defun c:Sx (/ ACADOBJECT ACADDOCUMENT FOUND LINETYPESEL GETDS0 OBJ)
  2.   (setq        AcadObject         (vlax-get-acad-object)
  3.           AcadDocument (vla-get-ActiveDocument Acadobject)
  4.   )
  5.   (setq found :vlax-false)
  6.   (setq LinetypeSel (vla-get-Linetypes AcadDocument)) 
  7.   (VLAX-FOR entry LinetypeSel 
  8.     (IF        (= (VLA-GET-NAME ENTRY) "CENTER")
  9.         
  10.       (SETQ FOUND :VLAX-TRUE)
  11.     )
  12.   )
  13.   (IF (= FOUND :VLAX-FALSE)    
  14.     (VLA-LOAD LINETYPESEL "CENTER" "ACAD.LIN")
  15.   )
  16.   (if (null vlax-dump-object)
  17.     (vl-load-com)
  18.   )
  19.   (SETVAR "CMDECHO" 0)
  20.   (or *getds* (setq *getds* 90))
  21.   (setq
  22.     getds0 (getdist (strcat "\n输入宽度<" (rtos *getds* 2 3) ">:"))
  23.   )
  24.   (if getds0
  25.     (setq *getds* getds0)
  26.   )
  27.   (while (setq obj (entsel))
  28.     (setq obj (vlax-ename->vla-object (car obj)))
  29.     (vla-offset obj (* 0.5 *getds*))
  30.     (vla-offset obj (* 0.5 *getds* -1))
  31.     (vla-put-color obj 1)
  32.     (vla-put-Linetype Obj "CENTER")
  33.   )
  34.   (SETVAR "CMDECHO" 1)
  35.   (princ)
  36. )

发表于 2023-3-22 22:02:46 | 显示全部楼层
本帖最后由 wzg356 于 2023-3-22 22:05 编辑

(defun c:sx ( / e ps p)
(if(setq e(ssget ":E:S" '((0 . "*line"))))(progn
        (setq e(ssname e 0))
        (setq ps(outcurvept e))
        (setq d(if(setq d(getdist "\n输入偏移宽度<20>"))d 20))
        (setvar "cmdecho" 0)
        (vl-cmdf "mline" "j" "z" "ST" "STANDARD" "S" d)
        (foreach p ps (vl-cmdf "non" p))
        (vl-cmdf "")
        (vl-cmdf  "change" e "" "p" "lt" "CENTER" "c" "1" "")
        (setvar "cmdecho" 1)
))(princ)
)

函数outcurvept在http://bbs.mjtd.com/thread-182691-1-1.html
 楼主| 发表于 2023-3-24 13:23:05 | 显示全部楼层
wzg356 发表于 2023-3-22 22:02
(defun c:sx ( / e ps p)
(if(setq e(ssget ":E:S" '((0 . "*line"))))(progn
        (setq e(ssname e  ...

谢谢              
发表于 2023-3-22 09:16:33 | 显示全部楼层
本帖最后由 vitalgg 于 2023-3-22 09:20 编辑

https://www.bilibili.com/video/BV1Jv4y157X3/



源码:
https://gitee.com/atlisp/packages/blob/main/at-curve/at-curve.lsp
最底下那个函数。
 楼主| 发表于 2023-3-22 09:22:51 | 显示全部楼层

谢谢。如果改变中心线的图层怎么设置
 楼主| 发表于 2023-3-22 09:26:36 | 显示全部楼层
vitalgg 发表于 2023-3-22 09:16
https://www.bilibili.com/video/BV1Jv4y157X3/

谢谢,                                 
发表于 2023-3-22 14:48:27 | 显示全部楼层

16-18行的加载扩展库放在第二行是不是好一点啊,前面已经用到了vlax函数了,如果没加载可能会报错的吧
发表于 2023-3-22 15:08:09 | 显示全部楼层
Klein 发表于 2023-3-22 14:48
16-18行的加载扩展库放在第二行是不是好一点啊,前面已经用到了vlax函数了,如果没加载可能会报错的吧

我就随便复制了组合代码,没思考这么多
 楼主| 发表于 2023-3-22 15:39:28 | 显示全部楼层
发表于 2023-3-22 15:51:32 | 显示全部楼层
奇怪,我运行是正常的~没有报错误~
发表于 2023-3-22 20:12:52 | 显示全部楼层
aggdqty 发表于 2023-3-22 09:22
谢谢。如果改变中心线的图层怎么设置

(vla-put-layer obj "DOTE")
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:56 , Processed in 0.193094 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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