乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 69|回复: 7

[编程交流] 我的第一个Autolisp项目:Co

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 06:47:25 | 显示全部楼层 |阅读模式
你好
 
我非常激动地宣布我的第一个项目在Autolisp。我知道的比我能咀嚼的多得多,但我兴奋的原因是,这个程序可以节省我在日常工作中的时间,甚至几天。
 
我试着尽可能地让人容易理解。我用通俗易懂的英语编写命令,绘制并注释所有步骤,甚至发布流程图。
 
项目概述:
 
将墙的总长度除以x段数(限制为每个段的最小长度和最大长度的结果(感谢marko))。
 
 
 
该程序只需检查正面和背面标高之间的距离,并绘制一面墙(地面上)和一面底墙(地下)
 
 
而不是绘制一个从最低点到墙(形成墙)的矩形,然后根据前后立面之间的距离绘制基础墙。
 
欢迎任何想法!
074727etxp4mcn34j34rno.jpg
074729fj58h4z7t4daic8h.jpg
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 07:01:28 | 显示全部楼层
你好
我写了以下代码:
  1. ;** get user information **;
  2. ;get the start and end points, total length
  3. (defun c:main ( / strPt endPt totLng)
  4. (setq strPt (getpoint "\nStart point of line : "))
  5. (setq endPt (getpoint strPt "\nEnd point of line : "))
  6. (setq strPt (trans strPt 1 0) endPt (trans endPt 1 0))
  7. (setq totLng (distance strPt endPt))
  8. )
这是我在计时点后得到的输出:
 
线路起点:
线路终点:400.0
(我不明白400是从哪里来的)
 
当我打字的时候!合计
我得到0
我希望它能保持距离,
为什么会这样?
 
谢谢
谢伊
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:05:50 | 显示全部楼层
如果您不使用ucs,则代码可以更简单,即如果您的dwg是二维的,则仅忽略trans
 
  1. ;get the start and end points, total length
  2. (defun c:main ( / strPt endPt totLng)
  3. (setq strPt (getpoint "\nStart point of line : "))
  4. (setq endPt (getpoint strPt "\nEnd point of line : "))
  5. (setq totLng (distance strPt endPt))
  6. )

 
如果你使用ucs,但想在世界上合作,那么像这样的事情
 
  1. ;get the start and end points, total length
  2. (defun c:main ( / strPt endPt totLng)
  3. (setq strPt (trans (getpoint "\nStart point of line : ") 1 0))
  4. (setq endPt (trans (getpoint strPt "\nEnd point of line : ") 1 0))
  5. (setq totLng (distance strPt endPt))
  6. )
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 07:14:13 | 显示全部楼层
你好
 
我简化了代码的结构:
 
我应该始终使用局部变量吗?如果另一个函数需要先前计算的变量的值,该怎么办?
 
谢谢
谢伊
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 07:29:59 | 显示全部楼层
您必须收集main_列表中的所有小计,
那么总的结果是这样的
  1. (setq total (apply '+ main_list))

如果需要从一开始就增加距离列表
尝试此功能
  1. ;; by VovKa
  2. (defun sumlist (lst / )
  3. (if lst
  4. (append (sumlist (reverse (cdr (reverse lst))))
  5. (list (apply '+ lst)))
  6.    ));if & defun

 
用法:
  1. (setq runned_totals (sumlist main_list))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:31:27 | 显示全部楼层
也许可以这样改变你的main,你的totlong不被设置为局部变量。也不需要strpt endpt,因为它们是局部变量。虽然这不是很好的编程,但从()开始,没有变量集使所有变量都是全局的,然后随着代码的进行返回并设置局部变量。也许也有一个想法,你的defun真的是做2件事,得到2个点加上距离,我会更倾向于使用它,因为2xpt,然后把距离作为一个局部声明,你可能会想要更简单的例程,比如选择3个点加上是前两个的第三个perp。在变量的使用方面,有比我更多的专家,我相信他们会有所帮助。
 
我一直在使用defuns,这让生活变得更加轻松。把你所有的常用defuns都放在acaddoc中。lsp则可以使用,无需在每个程序中再次编码。
 
  1. (defun c:main ()
  2. (getTwopoints)
  3. (setq totlng (distance pt1 pt2)) ; this way you can use pt1 & pt2 again else a defun (dp1p2)
  4. ;(setq totlng (dp1p2))
  5. )
  6. (defun getTwopoints ( )
  7. (setq strPt (getpoint "\nStart point : "))
  8. (setq endPt (getpoint strPt "\nEnd point : "))
  9. )
  10. (defun dp1p2 (pt1 pt2 / )
  11. (distance pt1 pt2)
  12. )
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 07:43:18 | 显示全部楼层
谢谢BIGAL和fixo。当我让主要功能工作时,我会记住这一点。现在仍然有问题,
 
简单地说,到目前为止,我从用户那里得到了总长度,然后将其除以(由marko_ribar编写的原始代码),所以现在我知道了我有多少段,以及每个段的长度。
 
下一步是询问用户哪条线代表墙,哪条线代表正面、背面和现有立面(不确定如何存储它们)
 
然后,我想用“段长度”间隔沿每条线分布顶点,并找到每个段中的最低y坐标(pBe编写的原始代码)
 
 
 
 
 
我对两件事感到困惑:
[列表=1]
  • 我应该如何将多段线名称(后、前等)与其对应的坐标列表绑定?
  • 如何沿总长度每隔4点获得最低y坐标?
    这是我在这个伟大团队成员的帮助下编辑的不可中断代码,希望在不久的将来成为可中断代码
    1. 9

     
     
     
    谢谢
    谢伊
  • 回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-6 07:55:30 | 显示全部楼层
    几点建议
     
    您只需要在代码的最开始第2行加载vl com。
     
    您只需要1个get co ords defun,只需将返回值设置为新的变量名,您可能需要包括getco ords的第二部分,该部分构成一个pline点列表。
     
    1. 10

     
    关于每4个点的最小值Y,只需使用(nth J frontelev)和步长J乘2列表是x Y x Y x Y,只需使用a(如果(
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-3-10 15:08 , Processed in 1.094476 second(s), 71 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表