明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 418|回复: 1

[提问] 双线偏移

  [复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 惜惜2 于 2025-7-9 22:53 编辑

(DEFUN C:ZZ (/ ENTITY ENTNAME1 ENTNAME2 ENT1 ENT2 PT1 PT2 PT3 PT4 D1 D2 STR L ORG)
  (SETVAR "BLIPMODE" 0)
  (SETVAR "CMDECHO" 0)
  
  (PRINC "\n本程序用于3D展开后折弯线尺寸调整 (BY Jerry.G 03-07-21)\n")
  (PRINC "\n注意: 如果中途非正常退出(即未见到ok), 则用户坐标原点会丢失!!")
  
  ; 检查并设置变形区宽度 ZK
  (IF (= ZK NIL)
    (SETQ ZK 0.4)
  )
  
  (SETQ MMK ZK)
  (PRINC "\n当前变形区 k=")
  (PRINC ZK)
  
  (SETQ ZK (GETREAL "\n输入内系数 k: "))
  (IF (= ZK NIL)
    (SETQ ZK MMK)
  )
  
  ; 开始撤销标记并选择折弯线对
  (COMMAND "_UNDO" "MARK")
  (PROMPT "\n选择要调整的折弯线对: ")
  (SETQ ENTITY (SSGET))
  
  ; 主循环处理每对折弯线
  (WHILE (/= ENTITY NIL)
    ; 获取两条线的实体数据和端点坐标
    (SETQ ENTNAME1 (SSNAME ENTITY 0))
    (SETQ ENTNAME2 (SSNAME ENTITY 1))
    (SETQ ENT1 (ENTGET ENTNAME1))
    (SETQ ENT2 (ENTGET ENTNAME2))
   
    (SETQ PT1 (CDR (ASSOC 10 ENT1)))  ; 第一条线起点
    (SETQ PT2 (CDR (ASSOC 11 ENT1)))  ; 第一条线终点
    (SETQ PT3 (CDR (ASSOC 10 ENT2)))  ; 第二条线起点
    (SETQ PT4 (CDR (ASSOC 11 ENT2)))  ; 第二条线终点
   
    ; 计算偏移距离并保存当前 UCS 原点
    (SETQ L (PLDISTANCE PT1 PT3 PT4))
    (SETQ L (/ (- L ZK) 2))
    (SETQ ORG (GETVAR "UCSORG"))
   
    ; 切换到世界坐标系
    (COMMAND "_.UCS" "W")
   
    ; 偏移两条线(根据L的正负切换参考点)并删除原线
    (IF (> L 0)
      ; 当L为正数时,用PT3和PT1作为参考点(向内偏移)
      (PROGN
        (COMMAND "_.OFFSET" L ENTNAME1 PT3 "")
        (COMMAND "_.OFFSET" L ENTNAME2 PT1 "")
      )
      ; 当L为负数时,取绝对值并改用PT4和PT2作为参考点(向外偏移)
      (PROGN
        (COMMAND "_.OFFSET" (- L) ENTNAME1 PT4 "")
        (COMMAND "_.OFFSET" (- L) ENTNAME2 PT2 "")
      )
    )
    (COMMAND "_.ERASE" ENTNAME1 "")
    (COMMAND "_.ERASE" ENTNAME2 "")
   
    ; 恢复 UCS 原点
    (COMMAND "_.UCS" "O" ORG)
   
    ; 提示用户继续选择
    (PROMPT "\n选择要调整的折弯线对: ")
    (SETQ ENTITY (SSGET))
  )
  
  (PRINC "\n==========OK========")
  (PRINC)
)

; 辅助函数:计算点到线段的垂直距离
(DEFUN PLDISTANCE (PT0 PT1 PT2 / A B C D S H)
  (SETQ A (DISTANCE PT0 PT1))  ; 点到线段起点的距离
  (SETQ B (DISTANCE PT0 PT2))  ; 点到线段终点的距离
  (SETQ C (DISTANCE PT1 PT2))  ; 线段长度
  
  ; 使用海伦公式计算三角形面积
  (SETQ D (/ (+ A B C) 2))
  (SETQ S (SQRT (* D (- D A) (- D B) (- D C))))
  
  ; 计算点到线段的垂直距离
  (SETQ H (/ (* 2 S) C))
  H  ; 返回结果
)

回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
这个一看就是反编译出来的...
而且双线偏移不会写就问问AI啊...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-16 03:44 , Processed in 0.159226 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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